4

だけを使ってプログラムをコンパイルすると

gcc code.c

メッセージはなく、出力ファイルは正常に生成されます。出力されたファイルは動作します。ただし、IDEで同じcygwinインストールのgccコンパイラを試してみると(NetbeansとDev-C ++を試しました)、次のエラーが発生します

main.cpp:27: error: `exit' undeclared (first use this function)
main.cpp:27: error: (Each undeclared identifier is reported only once for each function it appears in.)
main.cpp:77: error: `write' undeclared (first use this function)
main.cpp:78: error: `close' undeclared (first use this function)

何が違うのかわかりません。なぜコンパイルされないのですか?

OK、問題は、IDEではファイルの拡張子が.cppであるのに対し、ターミナルからコンパイルする場合は拡張子が.cであるということでした。だから、私の新しい質問は、C++ファイルとして扱われるときになぜコンパイルされないのかということです。CはC++のサブセットではありませんか?

4

4 に答える 4

7

C++ は C よりも厳密です。C ではプロトタイプなしで関数を呼び出すことができますが、C++ ではこれが許可されていません。

この問題を解決するには、次を追加します。

#include <stdlib.h>

また、コマンドラインでコンパイルする場合。-Wall重要な警告が表示されるように、必ずフラグを使用してください。

gcc -Wall code.c
于 2010-02-08T03:56:01.957 に答える
1

IDE は、コンパイラに対してより面倒なオプションを使用しています。いくつかのヘッダーを含める必要があります。

#include <stdlib.h>  // exit()
#include <unistd.h>  // close(), write()

デフォルトのオプションでは、C である可能性のあるほとんどすべてのものをコンパイルできます。見たところ、IDE は「-Wmissing-prototypes」をコンパイラ オプションの 1 つとして設定しています。


C++ コンパイラでコードをコンパイルする場合は、すべての関数が使用前に宣言されていることを確認する必要があります。C はその点でずさんです (またはもっとずさんな可能性があります) - すべての関数を定義または参照する前に宣言することをお勧めしますが、必須ではありません。C++ ではオプションではありません。

C++ のサブセットでもある C のサブセットがあります。C++ ではない C のビットがあり、C ではない C++ の多くのビットがあります。特に、任意の C プログラムは一般に C++ プログラムではありません。たとえば、C プログラムは「exit()」を宣言しない場合がありますが、それを使用してコンパイルすることができます。C++ プログラムは、それを使用してコンパイルする前に、'exit()' を宣言する必要があります。

于 2010-02-08T03:58:13.753 に答える
0

考えられる理由の 1 つは、IDE がインクルード ファイルにアクセスできないこと、cygwin gcc コンパイラがインクルード ファイルを期待している可能性があること/usr/include(不明)、および dev-cpp がそれにアクセスできない可能性があることです。

于 2010-02-07T19:58:18.813 に答える
0

g++ファイルのコンパイルに使用する必要があり.cppます。

于 2010-02-07T19:48:45.000 に答える