宏定义#define的使用
程序员文章站
2024-03-22 10:29:22
...
#define的使用
1.#
假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。
例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing)。
#include <iostream>
#define SQUARE(x) printf("square of " #x " is %d\n", (x) * (x))
using namespace std;
int main()
{
int y = 4;
SQUARE(4); // square of 4 is 16
SQUARE(2+4); // square of 2+4 is 36
}
第一次调用宏时使用“y”代替#x;第二次调用时用“2+4"代#x。
2.##
##还可以用于类对象宏的替换部分。
这个运算符把两个语言符号组合成单个语言符号。
#include <stdio.h>
#define XN(n) x##n
#define PXN(n) printf("x" #n " = %d\n", x##n)
using namespace std;
int main()
{
int XN(1) = 10; //x1
PXN(1); //print("x1 = %d\n", x1);
}
输出结果:
x1=10
3./
4.#ifdef
如果F1之前define过了,就走#ifdef和#else之间,
如果没define过,就走#else和#endif之间
#include <iostream>
#define F1 1
#ifdef F1
#define F2 1
#else
#define F2 2
#endif
using namespace std;
int main()
{
cout << F2; //输出1
}
5.VA_ARGS 可变宏参数
#include <iostream>
#define DEBUG(...) printf(__VA_ARGS__)
#define ERROR(fmt, ...) printf(fmt, __VA_ARGS__)
using namespace std;
int main()
{
int y = 99;
//宏展开: printf("%d\n", y)
DEBUG("%d\n", y);
//宏展开: printf("%d,%d,%d\n", y, 1, 2)
DEBUG("%d,%d,%d\n", y, 1, 2);
ERROR("%d\n", y);
ERROR("%d,%d,%f\n", 1, 2, 3.0);
}
下一篇: gpdb使用纪要