【问题标题】:Macro not compiling [closed]宏未编译[关闭]
【发布时间】:2015-12-18 22:04:14
【问题描述】:

为什么这段代码不能编译?

#define container_of(ptr, type, field_name) ( \
(type *) ((char *) (ptr) - offsetof(type, field_name)))

错误

C:\list.h:37: 错误: ')' 标记之前的预期表达式 (type * )((char *) (ptr) - offsetof(type, field_name))) ^

【问题讨论】:

  • This compiles fine. 我们可能需要看看你在哪里使用宏。
  • 宏定义后面有分号吗?
  • 这里没看出什么问题,多发些代码试试。
  • 也许你在反斜杠后面有一个空格,所以它没有转义换行符。
  • 确认一下,是宏定义还是它的用法在第37行?

标签: c macros


【解决方案1】:

编译器在宏定义上产生错误的最可能原因是定义提前结束并且第二行被作为代码进行编译。如果\ 和行尾之间有额外的空白字符,就会发生这种情况。如果文件从 Windows 环境移动到 Linux 或 Mac 系统, 或制表符或可能出现意外回车。

使宏适合一行:

#define container_of(ptr, t, m) ((t*)((char*)(ptr) - offsetof(t, m)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多