C预处理

  C预处理有挺多的,#define,#include,#under...

  其中#define有两种,一个是#define  选定的缩写(宏,类对象宏)   替换体; 另一种 #define  选定的缩写(类函数宏)  替换体 .宏生成内联代码

1.#define MEAN(X,Y) (((X)+(Y))/2)  //把宏MEAN(X,Y)替换成 (((X)+(Y))/2) 

 

 #define SQUARE(X) X*X
 #define PR(X) printf("The result is %d.\n", X) 
 #include<stdio.h>
 int main (void)
 { 
     int z; 
     z = SQUARE(2); //z = 2*2
    printf("Evaluating SQUARE(x): "); 
    PR(z); //printf("The result is %d.\n", 2*2)
    
    return 0; 
  } 
//类函数宏和函数一样携带参数,这些参数随后出现在替换体中 

输出:Evaluating SQUARE(x): The result is 4.

 

2. #x转化为字符串"x"的形参名

 #include<stdio.h>
 #define PSQR(x) printf("The square of "#x" is %d.\n", ((x)*(x)))
 int main()
 {
     int y=5;
     
    PSQR(y); //The square of y is 25 
    PSQR(2+4);//The square of 2+4 is 36 
    
    return 0; 
 } 

输出:The square of y is 25.
The square of 2+4 is 36.

 

3.##运算符; 
   例如:#define XNAME(n) x ## n
       XNAME(4) 就展开为 x4

 #include<stdio.h>
 #define XNAME(n) x ## n
 #define PRINT_XN(n) printf("x"#n" = %d\n", x ## n);
  
 int main( void )
 {

    int XNAME(1) = 14;  //变成int x1 =14; 
    int XNAME(2) = 20;  //变成int x2 =20;
    int x3 = 30;
    PRINT_XN(1);   //变成printf("x1 = %d\n", x1); 
    return 0; 
 } 

输出:x1 = 14

 

4.变参宏: ...和_ _VA_ARGS_ _ 

   #define PR(...) printf(_ _VA_ARGS_ _)
   PR("Howdy");
   输出 :printf("Howdy");

 公的优势是内联代码,在程序中生成语句,例如调用20次宏,即在程序中插入了20行代码.而程序不一样,它被调用20次,但程序中是只有一份函数,所以函数节省空间,但函数的调用需转跳至函数内,再返回主调函数,所以时间花费更多.

posted @ 2020-05-21 11:49  sirdeng  阅读(170)  评论(0)    收藏  举报