繁体   English   中英

在Linux上粘贴宏无法正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM