考虑以下代码:
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
这段代码看起来不是很有用,这是因为它只是我真实代码的一部分,简化了。问题是:-我如何说服预处理器执行前5-5 (只是一个数学运算的例子),并将结果(在本例中为0)连接到XFUNC_?现在它不工作了,它在第8行告诉我“预处理器指令后面的意外标记-期望换行”。更新:看起来是对的,上面的代码将是结果XFUNC_5-5的简单代码替换。但在这种情况下,我有另一个问题:-是否存在像宏这样的函数,它接受表达式(参数)作为输入(参数)并输出数字;我认为可能是像向量这样的东西,其中你放入连续的数字:你放入索引(这可能是一个完整的表达式),你得到的结果是相同的,除了now不是表达式,而是“纯”数字,然后可以连接起来
发布于 2012-05-21 21:09:43
你不能。预处理器会在将文件传递给编译器之前进行简单的文本替换。它不会执行计算。
发布于 2012-05-21 22:14:29
P99为中等大小的整数实现了预处理器算法。
发布于 2012-05-21 21:11:34
当预处理器进行简单的文本替换时,宏将扩展为XFUNC_5-5
。由于其中包含字符-
,因此您将收到错误。
https://stackoverflow.com/questions/10685781
复制相似问题