【问题标题】:Pasting macro on linux not working在linux上粘贴宏不起作用
【发布时间】:2010-10-18 15:59:30
【问题描述】:

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

【问题讨论】:

  • 您是从哪里想到要为该功能使用预处理器粘贴的?

标签: c


【解决方案1】:

尝试不带## :)

#define JOIN(x,y) x.y

【讨论】:

    【解决方案2】:

    宏连接运算符## 只能在两个宏参数之间使用。它们之间有一个句点,用于分隔两个参数名称。因此,正如 ykatchou 建议的那样,只需从宏定义中编辑 ## 运算符即可:

    #define JOIN(x,y) x.y 
    

    在您的 Windows 编译器中应该仍然可以正常工作。

    【讨论】:

      【解决方案3】:

      不能使用## 将不一起形成有效令牌的两个令牌粘贴在一起。
      编译器错误清楚地说明了这一点:

      错误:粘贴“。”而“配置”确实 未提供有效的预处理令牌

      根据其他人的建议,您可以完全放弃 ##

      更多信息here

      【讨论】:

        【解决方案4】:

        这与尝试将文字字符串和标记粘贴在一起有关。从 gcc 2.7 开始,此行为已更改,例如,请参见此处的信息: http://weblog.pell.portland.or.us/~orc/2004/12/30/000/index.html

        您应该能够删除 ## 并简单地连接运算符:

        #define JOIN(x,y) x.y
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-10
          • 1970-01-01
          • 2016-06-03
          相关资源
          最近更新 更多