gcc是否有一个pragma来定义文件类型/编译器?

Joe*_*Joe 5 c c++ gcc pragma

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

有没有办法在文件中使用pragma覆盖这些?

评论后更新:

我正在转换一个目前50/50 C&C++的代码库,用C++编译器完全编译.这是为了允许当前的"C"模块调用我无法更改的新C++基础(并且不希望换行).我想将扩展名保持为.c以获取真正为C的文件,即使它们现在具有C++链接.我认为将它们保留为".c"表示它们为何如此(我在想这里的后代!;-))但是更改构建系统以适应每个更改的C文件名也是一项大工作.更糟糕的是,一小部分C文件不能很好地转换为C++,所以如果他们不调用C++基础我想把它们留作C.重写它们不是一个选择,但稳定性的风险该项目太棒了.

Chr*_*odd 2

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

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

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