在linux上粘贴宏不工作

时间:2010-10-18 15:59:30

标签: c

以下程序在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;
}

4 个答案:

答案 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