C宏:如何连接一个名称和一个由数学运算产生的数字(也由预处理器完成)?

0 c macros concatenation

请考虑以下代码:

1. #define SUFFIX 5-5
2. #define XFUNC_0( x )  (100 * x)
3. #define XFUNC_1( x )  (101 * x)
4. #define XFUNC_2( x )  (102 * x)
5. #define CATX( x, y )  x##y
6. #define CAT( x, y )   CATX( x, y )
7. #define XFUNC         CAT( XFUNC_, SUFFIX )
8. #if     XFUNC(2) == 200
...... etc
N. #endif
Run Code Online (Sandbox Code Playgroud)

这段代码似乎没有用,这是因为它只是我真实代码的一部分,简化了.问题是: - 如何说服预处理器先执行5-5(只是数学运算的一个例子),并将结果(在本例中为零)连接到XFUNC_?因为它现在不起作用,它告诉我"预处理器指令后面的意外令牌 - 期望换行",在第8行.更新:看来是正确的,上面的代码将是简单的代码替换结果XFUNC_5-5.但在这种情况下,我还有另一个问题: - 确实存在一种方法来获得像宏这样的函数或接受输入(参数)表达并输出数字的东西; 我想也许类似于你放置连续数字的向量:你把索引(这可能是一个完整的表达)你得到的结果是相同的,除了现在不是表达而是"纯"数字然后可以连接

har*_*ald 6

你不能.在将文件传递给编译器之前,预处理器将执行简单的文本替换.它不会执行计算.