gpt4 book ai didi

c++ - gcc 是否有 pragma 来定义文件类型/编译器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:55 25 4
gpt4 key购买 nike

GCC 根据文件扩展名(.c、.cc)、命令行参数 (-x) 或直接调用适当的编译器(比如 g++ 而不是 gcc)自动在编译器之间切换。

有什么方法可以在文件中使用 pragma 来覆盖这些吗?

评论后更新:

我正在将当前 50/50 C 和 C++ 的代码库转换为完全使用 C++ 编译器编译。这是为了允许当前的“C”模块调用我无法更改(并且不想包装)的新 C++ 基础。对于真正是 C 的文件,我想将扩展名保留为 .c,即使它们现在具有 C++ 链接。我认为将它们保留为“.c”表明它们为何如此(我在这里考虑后代!;-))但是更改构建系统以适应每个更改的 C 文件名也是一项艰巨的工作。更糟糕的是,C 文件的一小部分不会正常地转换为 C++,所以如果它们不调用 C++ 基础,我想将它们保留为 C。尽管重写它们不是一种选择,但稳定性存在风险项目太大了。

最佳答案

您提到有一个构建系统问题提示了这个问题。我曾经通过在源文件中使用注释解决了类似的问题。我使用了如下 Makefile 规则:

%.o: %.c
$(CC) $(CFLAGS) `if head -1 $< | grep -q 'C++'; then echo '-x c++'; else echo '-x c'; fi` -c -o $@ $<

现在,如果源文件以注释行开头,如 /* C++ */,它将被编译为 C++,否则将被编译为 C(无论是否 CC=gcc CC=g++)

关于c++ - gcc 是否有 pragma 来定义文件类型/编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19728897/

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