2017-03-09 92 views
0

我从GNU Make中收到奇怪的“预期声明”错误。Gnu在打开头文件时抛出错误

inc/pub/teos_config.h:22:28: error: expected declaration specifiers or '...' before '(' token 
#define TEOS_SYSUINT  ((unsigned)TEOS_SYSINT) 
          ^

这是文件...

#ifndef __TEOS_CONFIG_H__ 
#define __TEOS_CONFIG_H__ 

#include <stdint.h> 

#ifdef __cplusplus 
extern "C" { 
#endif 

#define TEOS_SYSINT  int32_t 
#define TEOS_SYSUINT  ((unsigned)TEOS_SYSINT) 

#ifdef __cplusplus 
} 
#endif 

#endif // __TEOS_CONFIG_H__ 

非常简单。我是GNU Make的新手,所以也许我错过了一个开关?

+2

也许一个错误在什么包括'teos_config.h'而不是一个文件? 另外,与你的问题无关,但是你有什么理由不使用typedefs而不是define? – rtur

+3

gnu-make没有问题 - 这是一个C头文件,错误来自你的编译器。但尝试用'typedef'替换这些宏呢? –

回答

1

头是有效的,它应该编译(我已经尝试了GCC)。所以这意味着错误来自另一个文件,其中包括teos_config.h

这不是一个严格意义上的gnu-make错误。

但你通常应该使用typedef,而不是define为你做

typedef int32_t TEOS_SYSINT; 
+0

它仍然会编译,如果你尝试'int main(void){TEOS_SYSUINT myUint = 33;返回0; ''? – yano

2

错误由C编译器发出,而不是由make本身发出。它反映了源代码中的错误。

此外,错误不是直接显示在头文件中,而是在使用该头中定义的TEOS_SYSUINT宏的C源文件中。您已删除说明实际错误位置的整体多行错误消息的一部分。尽管如此,我可以用相当高的置信度说当你试图在变量或函数定义中使用该宏作为类型说明符时会出现问题。例如,

TEOS_SYSUINT x; 

...它展开......

((unsigned)int32_t) x; 

...这是不变量x的有效申报。

目前还不清楚为什么你不定义宏这样,而是:

#define TEOS_SYSUINT  uint32_t 

更改为将很可能解决你问这个问题。