keil中编译stdint.h报错 identifier "__int8" is undefined

RT

建立的工程里包含stdint.h这个文件。但是编译是报错。。。
类似的错误很多。但是这个文件是我网上下载的,为什么会有问题?

..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stdint.h(69): error: #20: identifier "__int8" is undefined
typedef __int8 int8_t;
..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stdint.h(70): error: #20: identifier "__int16" is undefined
typedef __int16 int16_t;
..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stdint.h(71): error: #20: identifier "__int32" is undefined
typedef __int32 int32_t;

..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stdint.h(93): error: #20: identifier "uint8_t" is undefined
typedef uint8_t uint_fast8_t;
..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stdint.h(94): error: #20: identifier "uint16_t" is undefined
typedef uint16_t uint_fast16_t;
..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stdint.h(95): error: #20: identifier "uint32_t" is undefined
typedef uint32_t uint_fast32_t;
..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_wwdg.h(85): error: #20: identifier "uint32_t" is undefined
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);
..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_wwdg.h(86): error: #20: identifier "uint8_t" is undefined
void WWDG_SetWindowValue(uint8_t WindowValue);
..\Libraries\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_wwdg.h(88): error: #20: identifier "uint8_t" is undefined

keil中编译stdint.h报错 identifier "__int8" is undefined是设置错误造成的,解决方法为:

1、点击魔术棒按钮Target Options...。

2、点击选项卡output。

3、Name of Executable 名字中间的空格用“_”下划线代替。

4、重新编译ok。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-05

我使用的Keil4,STM32F103芯片,曾经也出现过类似问题,现把我当时的原因列出来,你检测一下你的程序是否是同样的原因。

 

 

出错误的地方不是在stdint.h文件中,而是它的上一级:有宏定义__int8   __int16   __int32   uint8_t等这类名称的文件,假设文件名 A(我猜测可能是 stm32f4xx.h之类的文件名)。

如果不出意外的话,你从网上下载的程序包里面应该有一个文件,它的名字是A,该文件里面会有:

typedef singed char __int8;  //宏定义 __int8

这样功能的程序语句,如果你把这个文件A添加到工程中,应该就能消除这些错误。

但是现在,你的工程中已经有了一个名字为A但内容却不太一样的文件(为做区分,这个文件可以称为A2),而且查看A2的路径可以发现,它指向的是你的Keil软件安装目录下,比如你的Keil软件安装在C盘根目录下,则它的路径就是:C:\Keil\ARM.....之类的。

 

出现这种情况的原因是:你没有把A文件的路径告诉Keil软件,它在链接的时候找不到A文件,就只好把同名字的系统文件A2添加到了工程中。

 

那么你现要需要做的,就是把A2文件从你的工程中删掉,把A文件加载进来。具体操件如下图示:

1、在Project->Options for Target对话框中的C/C++选项卡中添加你的目标文件的寻找路径

2、

3、

4、选中你从网上下载的程序文件夹

注1:我使用的Keil4版本,需要将路径详细到最低级文件夹,即该文件夹中直接就是你想要的程序文件,Keil软件不会查找路径中的子文件夹。

注2:必须把你需要的.c文件和.h头文件都添加进来。

5、添加完成后,重新编译即可。

本回答被提问者采纳
第2个回答  2014-09-04
这个问题太简单了,IAR中的stdint.h是这样定义的
/* Fixed size types. These are all optional. */
#ifdef __INT8_T_TYPE__
typedef __INT8_T_TYPE__ int8_t;
typedef __UINT8_T_TYPE__ uint8_t;
#endif /* __INT8_T_TYPE__ */

#ifdef __INT16_T_TYPE__
typedef __INT16_T_TYPE__ int16_t;
typedef __UINT16_T_TYPE__ uint16_t;
#endif /* __INT16_T_TYPE__ */

#ifdef __INT32_T_TYPE__
typedef __INT32_T_TYPE__ int32_t;
typedef __UINT32_T_TYPE__ uint32_t;
#endif /* __INT32_T_TYPE__ */

#ifdef __INT64_T_TYPE__
#pragma language=save
#pragma language=extended
typedef __INT64_T_TYPE__ int64_t;
typedef __UINT64_T_TYPE__ uint64_t;
#pragma language=restore
#endif /* __INT64_T_TYPE__ */

在keil中要是这样行不通,可以定义如下
typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef signed short int int16_t;
typedef unsigned short int uint16_t;
typedef signed int int32_t;
typedef unsigned int uint32_t;
typedef signed long int int64_t;
typedef unsigned long int uint64_t;
第3个回答  2014-08-29
你没有定义_int8这个数据类型,所以编译器认不出,估计你网上的代码不全。
另外,你也可以把_int8手工改成char,这样效果是一样的
第4个回答  2019-07-09
有可能是库的问题

Warning: Invalid argument supplied for foreach() in /www/wwwroot/www.t2y.org3v3b34/skin/templets/default/contents.html on line 47
相似回答