预处理器指令

来源:互联网 发布:视频矩阵的工作原理 编辑:程序博客网 时间:2024/06/05 13:25

预处理器指令

预处理器指令是包含在我们的程序不被程序语句,但预处理器指令的代码行。 这些生产线的前面总是由一个hash符号(#)。 实际汇编代码开始之前执行的预处理,因此预处理消化所有这些指令的语句所产生的任何代码之前。 

这些预处理器指令扩展只在一个单一的代码行。 只要发现一个换行符,预处理器指令被认为是结束。 别无分号(;)预计在年底预处理器指令。 预处理器指令可以通过一个以上的线路延长的唯一方法是一个反斜杠(\)结束该行的换行符前。 

宏定义(#定义#UNDEF)

预处理宏定义,我们可以使用#定义 。 其格式为: 

#define标识符替换 

当预处理程序遇到这个指令,它会替换任何发生的标识符 ,在剩下的代码替换 。 这种替换可以是一个表达式,声明,块或简单的东西。 预处理器不理解C + +,它只是取代任何标识符更换发生。 

1  2  3  
 #define TABLE_SIZE 100 int table1[TABLE_SIZE]; int table2[TABLE_SIZE]; 


预处理后已经取代TABLE_SIZE,代码变得等同于: 

 1  2  
 int table1[100]; int table2[100]; 


这种使用#定义为恒定的定义者是从前面的教程中,我们已经知道,但#定义也可以用参数来定义函数宏: 

 
 #define getmax(a,b) a>b?a:b 


这将取代任何发生getmax的后面两个参数替换表达,但也更换每个参数的标识符,正是你所期望的,如果它是一个功能: 

 1  2  3  4  5  6  7  8  9  10  11  12  13  14  
 // function macro #include <iostream> using namespace std; #define getmax(a,b) ((a)>(b)?(a):(b)) int main() { int x=5, y; y= getmax(x,2); cout << y << endl; cout << getmax(7,x) << endl; return 0; } 
  5   7 


定义的宏块结构不会受到。 宏持续,直到它是不确定的#UNDEF预处理指令: 

 1  2  3  4  5  
 #define TABLE_SIZE 100 int table1[TABLE_SIZE]; #undef TABLE_SIZE #define TABLE_SIZE 200 int table2[TABLE_SIZE]; 


这将产生相同的代码: 

 1  2  
 int table1[100]; int table2[200]; 


功能的宏定义接受更换序列中的两个特殊运算符(###): 
如果操作员是用于替换序列中之前,可以使用一个参数,则该参数被替换为一个字符串常量(就好像它是由双引号引起) 

 1  2  
 #define str(x) #x cout << str(test); 

原创粉丝点击