gcc无法将 *.C源代码识别为有效c程序

cbeh67ev  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(155)

我在UBUNTU 16.04 LTS中不小心将.C [注意大写C]扩展名分配给了我的C源代码,并用Gedit程序打开它来输入我的代码。
gcc编译器无法将其识别为C编程源代码,并在试图编译时产生错误。
而UBUNTU文件管理器显示为cpp文件。

    • 代码**
#include <stdlib.h>

int main(){

    int * c = malloc(sizeof(int));
    free(c); 
  
    return 0;   
}
    • gcc编译命令,输出:**
$gcc test.C -o test
test.C:8:18: error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive]
  int * c = malloc( sizeof(int) );

正如我们所知,这是一个C特定的错误,我认为gcc的行为就像this中所说的C文件一样。

    • 这是我的系统信息**
Linux ee 4.8.0-36-generic #36~16.04.1-Ubuntu SMP  i686 i686 i686 GNU/Linux

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

gedit - Version 3.18.3

我知道我们可以简单地将malloc()的返回值转换为(int*),这显然是有效的。

在C why not cast return of malloc()中强制转换malloc()类型是不正确的
在UBUNTU中只有小写扩展对C源代码有效,为什么他们这样做?
以及我如何修复这个问题,并在我的机器上用gcc编译我的source.C

    • 编辑**

正如MCG在答案中所说,我们可以强制gcc将任何给定的文件视为特定类型,这是用-x标志告诉它的。
例如,如果我们有一个扩展名为. f的C有效源代码,甚至是一个UBUNTU上没有任何扩展名的源代码,通过使用此命令,它将被正确编译,

    • 使用任何扩展名编译C源代码**:
gcc -x c src.f -o src // with .f or any others
gcc -x c src -o src  //without extension
ki1q1bka

ki1q1bka1#

GCC将.C(大写字母)扩展名识别为C文件。您需要将文件的扩展名更改为.c(小写字母)。此外,您正确地提到并引用了C在malloc的情况下需要强制转换,而在c中,任何对象指针类型都需要隐式转换为void *。
请参阅以下GCC文件中关于文件扩展名(.C.c)的说明。请参阅以下GCC链接,了解各种文件扩展名的详细说明。
file.C
必须进行预处理的C源代码。请注意,在.cxx中,最后两个字母必须都是字面上的x。同样,.C表示字面上的大写C。
file.c
必须进行预处理的C源代码。
https://gcc.gnu.org/onlinedocs/gcc-3.3/gcc/Overall-Options.html
此外,您可以给予标志-x c来强制GCC将文件视为C,而不是C

相关问题