【发布时间】:2015-12-28 01:36:48
【问题描述】:
考虑以下设置:
啊.h
#define A 5
#define B A
#undef A
#define A 3
交流
#include "a.h"
#include <stdio.h>
int main()
{
printf("%d\n", B);
return 0;
}
虽然这非常合理地打印 3,但有没有办法让它打印 5,即已经在 a.h 的第二行用 5 替换 A?
【问题讨论】:
-
我认为你做不到。我会等待比我更有知识的人来证明我错了。
-
这些不是赋值,而是使用时的文本替换。
A永远不会有值 5 或 3,B永远不会等于 5 或 3。 -
@WeatherVane 感谢您的提醒。我相应地编辑了措辞。
-
您可能会考虑将 a.h 更改为
const int B = A;而不是#define B A- 这样它会在编译时捕获A的值。另一种选择是使用非标准但广泛实现的(gcc、clang、visual C++ ...)#pragma push_macro("A")来保留A的原始值,然后在评估B之前将其弹出,但这既繁琐又脆弱. -
const int有效。 ideone.com/MpiOOz
标签: c macros c-preprocessor