gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:31 24 4
gpt4 key购买 nike

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

而且效果很好。现在我想用 Code:Blocks 编译这些文件,我得到一个奇怪的错误:

file.l:4:18: fatal error: cstdio: No such file or directory

当这个文件甚至没有包含在我的项目中时(它只是用来创建我附加到项目的 lex.yy.c),为什么它会在 file.l 中发出错误信号?我不确定,但是... main() 在 file.tab.c 中,所以这是一个入口点 - 我可以特别要求 Code:Blocks 像我在命令行中那样使用 g++ 编译所有内容吗?有机会让它发挥作用吗?我有最新版本的 Code:Blocks。提前致谢

//编辑:我还可以补充一点,当我从命令行编译它时会遇到同样的错误:gcc lex.yy.c。

最佳答案

要使 C::B 项目中的所有源文件都编译为 C++,而不管文件扩展名不管是否gccg++被调用,添加选项 -x c++YourProject -> Build options... -> Compiler settings -> Other options.

这会强制进行 C++ 编译,应该可以解决您的问题,但以防万一您不清楚,错误:

fatal error: cstdio: No such file or directory

发生是因为 C++ header <cstdio>正在 #include -在汇编中编辑被编译为 C,并且该 header 不在 C 编译器的包含搜索路径中。

C 编译器的选择基于文件的文件扩展名 (.c)发生错误时编译。 -x c++选项覆盖这个,但你可能通过调查 C++ 头文件是如何发生的来寻找更好的解决方案包含在 C 源文件中,并在可能的情况下进行更正。

相当于<cstdio> 的C 头文件是<stdio.h> .你能简单地解决这个问题吗改变 <cstdio><stdio.h>某处?如果您使用 -x c++解决方案然后它阻止您将源文件添加到应该编译为 C 的项目。

关于c++ - 代码块 - 混合 c 和 c++ 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23915136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com