C 在linux上粘贴宏不起作用
下面的程序在windows上运行良好。但是在linux上发生编译错误 错误:粘贴“.”和“配置”未提供有效的预处理令牌 有什么原因吗???我不明白为什么C 在linux上粘贴宏不起作用,c,C,下面的程序在windows上运行良好。但是在linux上发生编译错误 错误:粘贴“.”和“配置”未提供有效的预处理令牌 有什么原因吗???我不明白为什么 #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)); //t
#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;
}
#包括
类型定义结构{
int-config;
}公共关系;
#定义联接(x,y)x.##y
void main()
{
pr_t temp={5};
printf(“值%d\n”,JOIN(temp,config));//temp.config
返回0;
}
尝试不使用##::)
这与尝试将文字字符串和标记粘贴在一起有关。此行为在gcc 2.7以后的版本中发生了更改,例如,请参见以下信息: 您应该能够删除##,并简单地连接运算符:
#define JOIN(x,y) x.y
宏连接运算符##只能在两个宏参数之间使用。它们之间有一个句点,用于分隔两个参数名。因此,正如ykatchou所建议的,只需从宏定义中编辑出##运算符:
#define JOIN(x,y) x.y
在windows编译器中仍然可以正常工作。不能使用
#
将两个不在一起构成有效标记的标记粘贴在一起编译器错误清楚地表明: 错误:粘贴“.”和“配置”无效 未提供有效的预处理令牌 按照其他人的建议,您可以将
##
一起删除
更多信息。您是从哪里想到要为该功能使用预处理器粘贴的?
#define JOIN(x,y) x.y