keil MDK用CPP开发STM32
MDK4.72+STM323.5固件库建立main.cpp后,直接调用固件库的SystemInit竟然编译通过了,而宏定义了__cplusplus后反而报错:C:\Kei...
MDK4.72 + STM32 3.5固件库
建立main.cpp后,直接调用固件库的SystemInit竟然编译通过了,而宏定义了__cplusplus后反而报错:
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(20): error: #20: identifier "namespace" is undefined
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(20): error: #65: expected a ";"
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(224): error: #169: expected a declaration
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(232): error: #65: expected a ";"
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(233): error: #65: expected a ";"
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(234): error: #65: expected a ";"
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(235): error: #65: expected a ";"
……
……
main.cpp如下:
#include "common.h"
int main()
{
testClass stm32;
stm32.GPIO();
SystemInit();
return 0;
}
求指点迷津,谢谢 展开
建立main.cpp后,直接调用固件库的SystemInit竟然编译通过了,而宏定义了__cplusplus后反而报错:
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(20): error: #20: identifier "namespace" is undefined
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(20): error: #65: expected a ";"
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(224): error: #169: expected a declaration
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(232): error: #65: expected a ";"
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(233): error: #65: expected a ";"
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(234): error: #65: expected a ";"
C:\Keil\ARM\ARMCC\bin\..\include\stdint.h(235): error: #65: expected a ";"
……
……
main.cpp如下:
#include "common.h"
int main()
{
testClass stm32;
stm32.GPIO();
SystemInit();
return 0;
}
求指点迷津,谢谢 展开
2个回答
展开全部
testClass 你定义了没有,定义后main中有声明没有
更多追问追答
追问
在init.h和init.cpp中做了声明和定义。
基本语法应该是没问题的,只要不宏定义'__cplusplus'编译就是正常的,没有警告,没有错误,这错误是对"__cplusplus"做了宏定义后出现的。
追答
__cplusplus一般用于将C++代码以标准C形式输出(即以C的形式被调用),这是因为C++虽然常被认为是C的超集,但是C++的编译器还是与C的编译器不同的。C中调用C++中的代码这样定义会是安全的。
一般的考虑跨平台使用方法如下:
#ifdefined(__cplusplus)||defined(c_plusplus) //跨平台定义方法
extern "C"{
#endif
//... 正常的声明段
#ifdefined(__cplusplus)||defined(c_plusplus)
}
#endif
简单的用在windows下可以如下定义:
#ifdef __cplusplus
extern "C"{
//... 正常的声明段
}
#endif
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
需要帮你做设计吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询