Ansi c预处理器:我可以将宏名称和参数连接成单个变量名吗?

时间:2013-10-22 14:07:24

标签: c macros ansi

我想缩短变量名,所以不要这样: FPData.Temps.T.Solar.Val

我想用:

TEMP_Solar.Val

并定义宏:

#define TEMP_  FPData.Temps.T.

但只有当我在其间放置空格时它才有效:

TEMP_ Solar.Val     

编译好,但我想使用这个

TEMP_Solar.Val

可能?我知道我可以通过使用宏和参数“TEMP_VAL(Solar)”来解决这个问题,但是希望保持简单,线性串联......

2 个答案:

答案 0 :(得分:3)

这是因为处理宏的预处理器只识别自己的标识符。当你使用例如TEMP_Solar它与TEMP_的标识符不同。

预处理器甚至可以使用简单的strcmp来查找其宏,因此不存在子字符串,也不会出现差异。

答案 1 :(得分:1)

最明显和最简单的解决方案:

#define TEMP FPData.Temps.T

TEMP.Solar.Val

(您不能也不应该更改结构成员的实际变量名。)