代码块-混合c和c++文件
Code Blocks - mixing c and c++ files
到目前为止,我一直在使用g++(在Windows上),但由于某些原因,我想使用Code:Blocks来使用sfml库(非常容易配置,与干净的g++相反)。
我使用bison创建file.tab.c和file.tab.h(从file.y),我使用flex为lex.yy.c(从file.l),我有我自己的文件包含我的项目(file.cpp和file.h)所需的函数。所以在g++中,我像这样编译它:
g++ lex.yy.c file.tab.c file.cpp -o file.exe
,它工作得很好。现在我想用代码:块编译这些文件,我得到一个奇怪的错误:
file.l:4:18: fatal error: cstdio: No such file or directory
为什么它在文件中发出错误信号?L当这个文件甚至不包括到我的项目(它只是用来创建lex.yy.c,我附加到项目)?我不确定,但是……main()在file.tab.c中,所以这是一个入口点-我可以特别要求Code:Blocks用g++编译所有东西,就像我在命令行中做的那样,并且有机会让它工作吗?我有最新版本的Code:Blocks。提前感谢
//编辑:我还可以补充说,当我从命令行编译它时,我得到同样的错误:
将C::B项目中的所有源文件编译为c++,而不考虑文件扩展名并且无论gcc
还是g++
被调用,都要添加-x c++
选项志愿者项目 -> 构建选项… -> 编译器设置 -> 其他选择。
强制c++编译,应该可以解决你的问题,但是以防你不清楚,错误:
fatal error: cstdio: No such file or directory
发生是因为c++头文件<cstdio>
在编译中被#include
-ed了被编译为C语言,并且该头文件不在C编译器的include-search路径中。
根据文件的扩展名(.c
)选择C编译器发生错误时编译。-x c++
选项覆盖了这一点,但是您可以这样做通过调查c++头文件是如何得到的来寻找更好的解决方案在C源文件中包含,并在可以的情况下更正。
与<cstdio>
等价的C头文件是<stdio.h>
。你能简单地解决这个问题吗将<cstdio>
更改为<stdio.h>
?如果您使用-x c++
溶液,那么它阻止您向项目中添加应该被编译为c的源文件。
检查项目中是否包含所有标准库文件;有关链接文件的帮助,请参考此。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到