具体报错:
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 char
In 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
#endif
typedef 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




















