[英]Pasting macro on linux not working
下面的程序在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;
}
尝试不使用## :)
#define JOIN(x,y) x.y
宏串联运算符##仅应在两个宏参数之间使用。 它们之间有一个句点,用于分隔两个参数名称。 因此,如ykatchou所建议,只需从宏定义中删除##运算符:
#define JOIN(x,y) x.y
在Windows编译器中仍然可以正常工作。
无法使用##
将不能一起形成有效令牌的两个令牌粘贴在一起。
编译器错误清楚地表明:
错误:粘贴“。” 并且“ config”没有给出有效的预处理令牌
正如其他人所建议的,您可以完全删除##
。
更多信息在这里 。
这与尝试将文字字符串和令牌粘贴在一起有关。 此行为已在gcc 2.7及更高版本中更改,例如,请参见以下信息: http : //weblog.pell.portland.or.us/~orc/2004/12/30/000/index.html
您应该能够删除##并只需连接运算符:
#define JOIN(x,y) x.y
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.