预编译注释
1. 预处理
首先源代码文件(.c/.cpp)和相关头文件(.h/.hpp)被预处理器cpp预编译成.i文件(C++为.ii)。预处理命令为:
gcc –E hello.c –o hello.i
预编译过程主要处理那些源代码中以#开始的预编译指令,主要处理规则如下:
u 将所有的#define删除,并且展开所有的宏定义;
u 处理所有条件编译指令,如#if,#ifdef等;
u 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。该过程递归进行,及被包含的文件可能还包含其他文件。
u 删除所有的注释//和 /**/;
u 添加行号和文件标识,如#2 “hello.c” 2,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号信息;
u 保留所有的#pragma编译器指令,因为编译器须要使用它们。
2. 编译
编译过程就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件(.s)。编译的命令为:
gcc –S hello.i –o hello.s
或者从源文件直接输出汇编代码文件:
gcc –S hello.c –o hello.s
现在版本的GCC把预编译和编译两个步骤合并成一个步骤,由程序cc1来完成(C++为cc1plus)。
3. 汇编
汇编就是将汇编代码转变成机器可以执行的命令,生成目标文件(.o),汇编器as根据汇编指令和机器指令的对照表一一翻译即可完成。汇编的命令为:
gcc –c hello.s –o hello.o
或者从源文件直接输出目标文件:
gcc –c hello.c –o hello.o
4. 链接
链接就是链接器ld将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件。链接的命令为:
ld –static crt1.o crti.o crtbeginT.o hello.o –start-group –lgcc –lgcc_eh –lc-end-group crtend.o crtn.o
一般我们使用一条命令就可以完成上述4个步骤:
gcc hello.c
实际上gcc只是一些其它程序的包装,它会根据不同参数去调用预编译编译程序cc1、汇编器as、链接器ld。
B. 源代码怎么用的
不知道你玩的啥游戏,但是看样子估计是c++代码,我英文学的不好x0dx0a从英文描述中我猜测这是v c++的代码,“//”在代码中表示注释,前三行是注释,其大意如下:x0dx0a stdafx.cpp :源文件,包括刚才的标准单元?x0dx0a fixyou.pch将是预编译的标题 x0dx0a stdafx.obj将包含预编译的类型信息x0dx0a“cpp”明显是c++源码文件的缩写名,而最后一行是头文件。x0dx0a所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。 x0dx0ax0dx0a预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。 x0dx0ax0dx0a编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。 x0dx0ax0dx0a因此,所有的CPP实现文件第一条语句都是:#include "stdafx.h"。x0dx0a其实我学的pascal,所以对c++了解的少,如果你真的想学会他,还是自己找几本c++的书学一下,这样才能“使用”代码得心应手。
C. 我想问一下C语言宏注释和/* //注释有什么区别
预编译与注释是不一样的概念。代码文本在进行编译时,首先排除了注释。然后根据预编译条件进行筛选排除或选择分支。就象宏,编译前首先替换宏,再进行编译。预编译和宏都是为了更高效率的代码编写和方便修改而存在的,不是为程序运行时准备的。
#if #endif 功能相当于if(){};只不过预编译是在代码编译前已经选择,条件选择是在运行时进行选择而已。
D. C++中的注释,如//和/* */的注释内容,会参与编译吗即反编译时会被看到吗
这个建议在CSDN技术专区里面找到答案。
(4)预编译注释扩展阅读:由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机。可分为超级计算机、工业控制计算机、网络计算机、个人计算机、嵌入式计算机五类,较先进的计算机有生物计算机、光子计算机、量子计算机等。计算机发明者约翰·冯·诺依曼。计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展。它的应用领域从最初的军事科研应用扩展到社会的各个领域。
E. 在java中如何实现预编译
/*
* ProCompile.java *预处理要编译的文件,删除多余的空白,注释,换行,回车等
* Created on 2007年9月18日, 下午8:58 */ package javacompile; import java.io.*;
import java.util.regex.*;
import javax.swing.JOptionPane; /** * @com.junjian.sun public class PerCompile { File f = null;
String fileString = null;
Pattern p = null;
Matcher m = null;
String regex; //正则表达式 //初始化p
public PerCompile() {
regex ="(//.+)" + //(//.+) 对应单行注释
//"|(/\\*(.+\\n)+\\*/)"+ // 想对应多行注释... "|(\\r\\n)" + "|(\\n)"+//(\\r\\n)|(\\n)对应换行
"|(\\B\\s+)" ; // 空白符
String ss;
f = new File(new JOptionPane()
.showInputDialog("请输入文件所在路径~"));
try {
BufferedReader bf = new BufferedReader(new FileReader(f));
ss = bf.readLine()+"\n";
fileString = ss; //如果没有这两句,ss的开头会有“null”
while((ss = bf.readLine())!= null){
fileString += ss+"\n"; bf.close();
} catch (IOException ex) {
ex.printStackTrace(); p = Pattern.compile(regex);
m = p.matcher(fileString); //执行替换所有多余空行,空白符,注释
void Dels(){
System.out.println("before: "+fileString);
if(m.find()) System.out.println("find!!");
System.out.println(m.replaceAll("")); } }
-
F. android.mk 怎么注释
注释的方式是使用#这个符号,如下代码:
#8 预编译宏
# define the macro to compile through support/zip_support/ioapi.c
LOCAL_CFLAGS := -DUSE_FILE32API
LOCAL_EXPORT_CFLAGS := -DUSE_FILE32API
#9 声明生成静态库
include $(BUILD_STATIC_LIBRARY)
#10 添加外部导入库目录
$(call import-add-path,$(LOCAL_PATH))
#11 添加导入库(基于上一行添加的导入库目录)
G. 程序进行预编译处理时将每个注释替换为一个空格是什么意思,有什么用
编译时 注释部分不产生目标代码,注释对运行不起作用。注释只是给人看的,而不是让计算机执行的!