C-定义、包含和重新定义

C-定义、包含和重新定义,c,C,我有一个已知可以在别人的机器上编译的驱动程序,但是,它不在我的机器上(工具链/编译器的区别?)。我得到错误:函数“\uu REG”[-Werror=隐式函数声明]的隐式声明。以下是导致该问题的代码: enum { #define __REG(a,b2,b1,c,d,e,f) a, #include "mycodec-i2c.h" #undef __REG }; 后来在代码中 static const mycodec_reg_t mycodec_data[]= { #define __REG(a

我有一个已知可以在别人的机器上编译的驱动程序,但是,它不在我的机器上(工具链/编译器的区别?)。我得到
错误:函数“\uu REG”[-Werror=隐式函数声明]
的隐式声明。以下是导致该问题的代码:

enum {
#define __REG(a,b2,b1,c,d,e,f) a,
#include "mycodec-i2c.h"
#undef __REG
};
后来在代码中

static const mycodec_reg_t mycodec_data[]=
{
#define __REG(a,b2,b1,c,d,e,f) c,
#include "mycodec-i2c.h"
#undef __REG
};
在C语言中这样做真的合法吗?我怎样才能避开它


头文件包含一大堆寄存器定义。

在“代码”片段中丢失的哈希值是打字错误吗?我们可能还需要知道
mycodec-i2c.h
中的内容。错误来自哪一行?头文件看起来是这样的:是的;这种用法是合法的。它们有时被称为x宏。如果有错误,您必须查看预处理的文件(
gcc-E
),并从中推断出问题所在。