Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在linux上粘贴宏不起作用_C - Fatal编程技术网

C 在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

下面的程序在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)); //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