预处理器指令

预处理器指令

预处理器指令是包含在我们的程序不被程序语句,但预处理器指令的代码行。   这些生产线的前面总是由一个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); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值