我从GNU Make得到一个奇怪的“预期声明”错误。
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的新手,所以也许我错过了那里的转换?
答案 0 :(得分:2)
错误由C编译器发出,而不是由make
本身发出。它反映了源代码中的错误。
此外,错误不是直接在您提供的标头中,而是在使用该标头中定义的TEOS_SYSUINT
宏的C源文件中。您已删除了整个多行错误消息的部分,该消息指出实际错误的位置。不过,我可以非常自信地说,当您尝试将该宏用作变量或函数定义中的类型说明符时,会出现问题。例如,
TEOS_SYSUINT x;
......扩展为......
((unsigned)int32_t) x;
...这不是变量x
的有效声明。
目前还不清楚为什么不以这种方式定义宏,而是:
#define TEOS_SYSUINT uint32_t
更改为可能会解决您提出的问题。
答案 1 :(得分:1)
标题有效,应该编译(我已尝试使用GCC)。因此,这意味着错误来自包含teos_config.h
的其他文件。
严格来说,这并不是一个gnu-make错误。
但您通常应该使用typedef
代替define
来处理您正在做的事情
typedef int32_t TEOS_SYSINT;