1、书写标识符时,忽略了大小写字母的区别。
2、忽略了变量的类型,进行了不合法的运算。
3、将字梁培符常量与字符串常量混淆。
4、忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号
。5、多加分号。
6、输入变量时忘记加衡渣好地址运算符&。
7、、输入数据的方式与要咐铅求不符。
8、输入字符的格式与要求不一致。
我只有C语言的代码。主要功能是main.c,它包括其他c文件,如#include "Flash.h"。我想让项目继续工作,但可以添加一个cpp文件。
有人告诉我,我必须把主管道换成
main.cpp
这将在编译时产生250个错误-关于包含的c文件
将主文件转换为cpp并逗码悔仍然包含C文件的正确方法是什么?
主.cpp:
#include "Flash.h"
int main(void)
{
....
}
我读过的How to use C source files in a C++ project?并没有直接解决这个问题(我的编译器无论如何都会使用c++)。
编辑:
在有人因为问我而杀了我之前(不知道你为什么这么咄咄逼人),我只得到3种错误250次:
'->' cannot appear in a constant-expression
'&' cannot appear in a constant-expression
a cast to a type other than an integral or enumeration type cannot appear in a constant-expression
编辑2:
下面是一些代码行(对某些射频芯片使用SDK运行):
大部分错误都来自这一部分
typedef enum /*lint -save -e30 -esym(628,__INTADDR__) */
{
NRF_GPIOTE_TASKS_OUT_0 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[0]), /**<Out task 0.*/
NRF_GPIOTE_TASKS_OUT_1 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[1]), /**<Out task 1.*/
NRF_GPIOTE_TASKS_OUT_2 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[2]), /**<Out task 2.*/
NRF_GPIOTE_TASKS_OUT_3 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[3]), /**<Out task 3.*/
#if (GPIOTE_CH_NUM >4) || defined(__SDK_DOXYGEN__)
NRF_GPIOTE_TASKS_OUT_4 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[4]), /**<Out task 4.*/
NRF_GPIOTE_TASKS_OUT_5 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[5]), /**<Out task 5.*/
NRF_GPIOTE_TASKS_OUT_6 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[6]), /**<Out task 6.*/
NRF_GPIOTE_TASKS_OUT_7 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[7]), /**<Out task 7.*/
在这些行上重复相同的错误:
a cast to a type other than an integral or enumeration type cannot appear in a constant-expression
最佳答案
C++中的#include指令是源代码的文字包含。想象一下,在Flash.h中包含的中的C源代码做了与C++类似的不兼容的事情。
typedef int class
现在,在您的main.c中
#include "Flash.h"
就好像你在C++源文件中直接有了这个代码main.cpp——所以这是一个错误。
如果你有模枝C标题的C源代码,山正你根本不需要使用C++!
如果您想编写新的C++代码并使其调用旧代码(反之亦然),只需使用链接器即可。C++代码包括C++头文件,C代码包括C标头,链接器将把所有代码组合成一个可执行文件。
为了使C和C++部件一起工作,需要一个附加的头文件。例如,将其称为typedef int class。然后将它包含在所有的C和C++源文件中:
#include "c-cpp-interface.h" // in C files
extern "C" {
#include "c-cpp-interface.h" // in C++ files
}
这个文件应该用普通的C/C++子集语言编写。也就是说,大多数情况下是C语言,但是类型安全性提高了(例如,所有函数的原型必须完整地编写,没有隐含的c-cpp-interface.h参数)。
理想情况下,您现有的C头文件可以这样使用。然而,C头文件经常积累CRUFT,而创建一个新文件可能比清理现有文件更实用。
查看您所拥有的实际错误消息(使用...),您应该尽量在C-C++接口中拥有尽可能少的代码。不要把实现细节(比如各种常量的值)放在那里。只有其他语言调用的函数的声明/原型(C调用C++或反之亦然)。
一般来说头文件提供接档漏口,源判蠢轿文件提供实现编译器掘肆规定源文件必须包含函数入口,即main函数。而头文件不得包含函数入口,头文件不可以单独编译成一个程序,仅仅包含程序片段或者定义常,变量。
头文件专为源代码调用而写的静态包含文件,可被源代码文件中#include编译预处理指令解释,如果将头文件完整,拷贝到源代码的指令处,从而编译时相当于在源代码中插入函数声明或者实现。
头文件和源文件
头文件就是.h文件,一般放类的声明,平时用的#include就是包含这种文件
源文件就是.cpp文件,一般用来放在头文件声明的类成员函数的具体实现。一般一个.h文件总会有一个同名的.cpp
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)