代码块-混合c和c++文件

Code Blocks - mixing c and c++ files

本文关键字:c++ 文件 混合 代码      更新时间:2023-10-16

到目前为止,我一直在使用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的源文件。

检查项目中是否包含所有标准库文件;有关链接文件的帮助,请参考此。