具体报错:
In file included from perfmon_priv.h:32,from perfmond.c:21:
perfmon_api.h:7:18: 错误: 声明指定了两个以上的数据类型7 | #define uint8_t unsigned char
perfmon_api.h:7:27: 错误: 声明指定了两个以上的数据类型7 | #define uint8_t unsigned charIn file included from perfmond.c:21:
perfmon_priv.h:29:18: 错误: 声明指定了两个以上的数据类型29 | #define uint16_t unsigned short
perfmon_priv.h:29:27: 错误: 声明指定了两个以上的数据类型29 | #define uint16_t unsigned short
perfmon_priv.h:21:18: 错误: 声明指定了两个以上的数据类型21 | #define uint32_t unsigned long
perfmon_priv.h:21:27: 错误: 声明指定了两个以上的数据类型21 | #define uint32_t unsigned long这里插入代码片
项目报错指出unsigned和 char变量冲突,这是很不让人理解的,经过不断查找偶然间发现错误的地方在这里
#include <stdio.h>
#include <stdint.h>#ifndef uint8_t
#define uint8_t unsigned char
#endiftypedef unsigned char uint8_t;int main(){uint8_t a = 257;printf("%d", a);
}
问题出现在经过#define
之后uint8_t
已经等效成unsigned char
了下面typedef unsigned char uint8_t
,就等效成unsigned char unsigned char
了
因为上述#include <stdint.h>
就有这个typdef
所以说这样也会报错:
#include <stdio.h>#ifndef uint8_t
#define uint8_t unsigned char
#endif#include <stdint.h> int main(){uint8_t a = 257;printf("%d", a);
}
解决办法就是将stdint头文件放在#define前面
这样虽然前面typdef unsigned char uint16_t;
但后面#define发现uint16_t
没有被#define所以又会执行
#ifndef uint16_t
#define uint16_t unsigned char
#endif