2017-08-28 6 views
-1

UBUNTU 16.04 LTSの.C [大文字の注記に注記]拡張機能をCソースコードに割り当てて、Geditプログラムで開いてコードを入力します。gccは有効なCプログラムとして* .Cソースコードを認識しません

gccコンパイラをCプログラミングソースコードとして認識せず、コンパイルしようとするとエラーが発生します。

UBUNTUファイルマネージャは、それをcppファイルとして表示します。私たちは、これがC++固有のエラーである知っているように

$gcc test.C -o test 
test.C:8:18: error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive] 
    int * c = malloc(sizeof(int)); 

、と私はgccが、そのCのような++ファイルを振る舞うと思う:

コード

#include <stdlib.h> 

int main(){ 

    int * c = malloc(sizeof(int)); 
    free(c); 

    return 0; 
} 

のgccコマンドの出力をコンパイル言ったように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 
私たちは単に(int*)malloc()の戻り値をキャストすることができます知っている

、これは明らかに動作します。我々はmalloc()戻り値の型がlinuxdie malloc()

を参照してくださいそして、C why not cast return of malloc()

malloc()のタイプをキャストする真実ではありませんvoid*である知っている

しかしは真のみ小文字の拡張子は、Cのソースコード.cのために有効ですUBUNTUの下で、もし彼らがなぜこれをしているのですか?

もし私がこれを修正し、私のマシン上でsource.Cをgccでコンパイルできないのであれば。 MCGとして

編集

が答えに言った、我々は-xフラグでそれを教えてくれている特定のタイプとして任意のファイルを処理するためにgccを強制することができます。我々はUBUNTU上の任意の拡張子なしの.f拡張子、あるいはソースコードをC、有効なソースコードを持っている場合

はたとえば、次のコマンドを使用して、それは、正確にどのと

コンパイルCのソースコードをコンパイルします延長

gcc -x c src.f -o src // with .f or any others 
gcc -x c src -o src //without extension 
+0

どのようにGCCを実行しましたか? – user2357112

+0

'#include '(C++コンパイラを 'C'を使って強制するかもしれません) – wildplasser

+11

' .c'を小文字にして修正する必要があります。大文字の '.C'は、慣例によりC++ソースを表します。 – Ryan

答えて

3

GCCは、C++ファイルとして.C(大文字)の拡張子を認識します。ファイルの拡張子を.c(小文字)に変更する必要があります。また、C++はmallocの場合にキャストを必要とすることを正しく言及し、参照しています。ここで、cでは、オブジェクトポインタ型からvoid *への暗黙の変換があります。

GCCドキュメントのファイル拡張子(.Cおよび.c)についての以下の説明を参照してください。さまざまなファイル拡張子の詳細については、GCCのリンクを参照してください。

file.C

C++ source code which must be preprocessed. Note that in .cxx, the last two letters must both be literally x. Likewise, .C refers to a literal capital C.

file.c

C source code which must be preprocessed.

https://gcc.gnu.org/onlinedocs/gcc-3.3/gcc/Overall-Options.html

また、あなたはC、C++ではないとして、ファイルを処理するためにGCCを強制的にフラグ-x cを与えることができます。

+0

あなたのリンクからいくつかの情報を追加してください(入力言語を-xオプションで明示的に指定することができます)。@MarkPlotnickへの私のコメントも、拡張子なしで、あるいはgccで拡張子を '-xc'オプションでコンパイルすることもできます。 – EsmaeelE

+0

この問題に関する情報が必要です。拡張ファイルなしでgccに与えると投稿のコメントセクションで言うように、 'f:file not recognized:ファイルフォーマットが認識されません。 collect2:エラー:ldが1終了ステータスを返しました。 '* .C'ファイルの場合、gccは実際にはcppソースコードのように振る舞います。 gccコンパイラにこの不正行為を使用するフラグがありますか? – EsmaeelE

関連する問題