考虑以下设置:
虽然这段代码可以输出3,但是有没有办法在a.h的第二行就将A替换成5,让它输出5呢?
a.h
#define A 5
#define B A
#undef A
#define A 3
a.c
#include "a.h"
#include <stdio.h>
int main()
{
printf("%d\n", B);
return 0;
}
虽然这段代码可以输出3,但是有没有办法在a.h的第二行就将A替换成5,让它输出5呢?
A
从未具有值5或3,而B
也从未等于5或3。 - Weather Vanea.h
改成const int B = A;
,而不是#define B A
- 这样它就能在编译时捕获A
的值。另一个选择是使用非标准但被广泛实现(如 gcc、clang、visual C++)的#pragma push_macro("A")
来保留A
的原始值,然后在计算B
之前弹出它,但这种方法比较繁琐且容易出错。 - Tony Delroyconst int
可以使用。https://ideone.com/MpiOOz - Erobrere