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次,但程序中是只有一份函数,所以函数节省空间,但函数的调用需转跳至函数内,再返回主调函数,所以时间花费更多.

浙公网安备 33010602011771号