我無意中分配.C
[注爲大寫C]擴展在Ubuntu 16.04 LTS我的C源代碼,並用gedit程序打開它進入我的代碼。GCC不承認* .C源代碼作爲有效的C程序
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,行爲像一個C++文件如this 中所述。
這是我的系統信息
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*)
,這顯然會工作。
但我們知道malloc()
返回類型爲void*
看到linuxdie malloc()
而且這還不是真正的在C投malloc()
類型why not cast return of malloc()
是是事實,只有小寫的擴展是有效的C源代碼.c
在UBUNTU下,如果真的,他們爲什麼這樣做?
如果不是我怎麼能解決這個問題和編譯我的source.C
與我的機器上的gcc。
編輯
由於MCG在回答說,我們可以強制gcc
對待任何給定的文件作爲特定類型是告訴它-x
標誌。
例如,如果我們有.F擴展或者甚至是源代碼,而無需對任何UBUNTU擴展一個C有效的源代碼,通過使用該命令將被正確編譯,
編譯C源與任何代碼擴展:
gcc -x c src.f -o src // with .f or any others
gcc -x c src -o src //without extension
你是怎麼運行GCC的? – user2357112
''#include'(你可能會強制使用C++編譯器,通過使用大寫'C') –
wildplasser
您應該通過將其重命名爲小寫'.c'來解決它。大寫'.C'表示習慣上的C++源代碼。 – Ryan