C Gnu Make在头文件中打开Pren时抛出错误

C Gnu Make在头文件中打开Pren时抛出错误,c,gnu-make,build-error,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_C

我从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__
\ifndef\uu TEOS\u CONFIG\H__
#定义配置__
#包括
#ifdef_uucplusplus
外部“C”{
#恩迪夫
#定义TEOS\u SYSINT int32\u t
#定义TEOS_SYSUINT((未签名)TEOS_SYSINT)
#ifdef_uucplusplus
}
#恩迪夫
#endif//\u TEOS\u配置\u H__

很简单。我是GNU Make的新手,所以可能我错过了那里的一个开关?

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

此外,错误并不直接出现在您提供的头文件中,而是出现在使用该头文件中定义的
TEOS\u SYSUINT
宏的C源文件中。您已经删除了整个多行错误消息中表示实际错误所在位置的部分。尽管如此,我可以很有把握地说,当您尝试在变量或函数定义中将该宏用作类型说明符时,就会出现问题。比如说,

TEOS_SYSUINT x;
。。。扩展到

((unsigned)int32_t) x;
。。。这不是变量
x
的有效声明

不清楚为什么不这样定义宏:

#define TEOS_SYSUINT       uint32_t

更改为该选项很可能会解决您所问的问题。

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

此外,错误并不直接出现在您提供的头文件中,而是出现在使用该头文件中定义的
TEOS\u SYSUINT
宏的C源文件中。您已经删掉了一部分完整的多行错误消息,该消息表示实际错误在哪里。尽管如此,我可以很有把握地说,当您尝试在变量或函数定义中将该宏用作类型说明符时,就会出现问题。比如说,

TEOS_SYSUINT x;
。。。扩展到

((unsigned)int32_t) x;
。。。这不是变量
x
的有效声明

不清楚为什么不这样定义宏:

#define TEOS_SYSUINT       uint32_t

更改为该选项很可能会解决您所问的问题。

头是有效的,应该可以编译(我已经尝试使用GCC)。因此,这意味着错误来自另一个包含
teos\u config.h
的文件

严格来说,这并不是gnu犯的错误

但是您通常应该使用
typedef
而不是
define
来完成所做的工作

typedef int32_t TEOS_SYSINT;

头是有效的,应该编译(我用GCC试过了)。因此,这意味着错误来自另一个包含
teos\u config.h
的文件

严格来说,这并不是gnu犯的错误

但是您通常应该使用
typedef
而不是
define
来完成所做的工作

typedef int32_t TEOS_SYSINT;

可能是包含
teos\u config.h
的文件中的错误?另外,与你的问题无关,但是你为什么不使用typedefs而不是define呢?gnu make没有问题-这是一个C头文件,错误来自你的编译器。但是试着用
typedef
替换这些宏?可能是包含
teos\u config.h
的文件中的错误?另外,与你的问题无关,但是你为什么不使用typedefs而不是define呢?gnu make没有问题-这是一个C头文件,错误来自你的编译器。但是尝试用
typedef
替换这些宏?如果尝试
intmain(void){TEOS\u SYSUINT myUint=33;return 0;}
,它是否仍然可以编译?如果尝试
intmain(void){TEOS\u SYSUINT myUint=33;return 0;}