以下程序在Windows上运行正常。但是在linux上发生编译错误 “错误:粘贴”。“和”config“没有提供有效的预处理令牌”
任何原因???我不明白为什么......
#include <stdio.h>
typedef struct pr {
int config;
}pr_t;
#define JOIN(x,y) x.##y
void main()
{
pr_t temp = {5};
printf("Value %d\n", JOIN(temp, config)); //temp.config
return 0;
}
答案 0 :(得分:2)
尝试不使用##:)
#define JOIN(x,y) x.y
答案 1 :(得分:1)
宏连接运算符##只应在两个宏参数之间使用。它们之间有一个句点,用于分隔两个参数名称。因此,正如ykatchou建议的那样,只需从宏定义中编辑##运算符:
#define JOIN(x,y) x.y
在Windows编译器中仍然可以正常工作。
答案 2 :(得分:1)
使用##
无法将两个不一起构成 有效令牌 的令牌粘贴在一起。
编译器错误清楚地表明:
错误:粘贴“。”和“配置” 不提供有效的预处理令牌
正如其他人所建议的那样,您可以完全放弃##
。
更多信息here。
答案 3 :(得分:0)
这与尝试将文字字符串和标记粘贴在一起有关。此行为在gcc 2.7及更改中已更改,请参阅此处的信息: http://weblog.pell.portland.or.us/~orc/2004/12/30/000/index.html
您应该能够删除##并简单地连接运算符:
#define JOIN(x,y) x.y