Gnu在打开头文件中的Pren时出错

时间:2017-03-09 15:38:03

标签: c gnu-make build-error

我从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的新手,所以也许我错过了那里的转换?

2 个答案:

答案 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;