1
{net04:~/xxxx/wip} gcc -o  write_test write_test.c
In file included from write_test.c:4:
global.h:10: warning: `b' initialized and declared `extern'

このコードは、fcntl.hと、open()、write()、close()などの定義されたファイル処理関数を使用します。コードは意図したとおりにコンパイルおよび動作します。

{net04:~/xxxx/wip} gcc -o  write_test write_test.cpp
In file included from write_test.cpp:4:
global.h:10: warning: `b' initialized and declared `extern'
write_test.cpp: In function `int main()':
write_test.cpp:56: error: `exit' undeclared (first use this function)
write_test.cpp:56: error: (Each undeclared identifier is reported only once for each function it appears in.)
write_test.cpp:58: error: `write' undeclared (first use this function)
write_test.cpp:62: error: `close' undeclared (first use this function)

CPPソースコードとして使用すると、GCCが文句を言うのはなぜですか?そして不思議なことに、なぜそれがopen()に文句を言わないのですか?ここで何が起こっているのでしょうか?

4

1 に答える 1

7
  1. C ++はヘッダーに関してより厳密です-必要なもの:#include <unistd.h>示された関数を適切に取得するため。

  2. global.hbを定義するべきではありません-ヘッダーは変数を初期化するべきではありません。

  3. コンパイルするときは-Wall -Werror、を使用する必要があります。これにより、コードの危険な部分をすべて修正する必要があります。

  4. exit()きれいにするには、#include <cstdlib>(C ++)または#include <stdlib.h>(C)が必要です

  5. g++C ++ライブラリが含まれるように、C++コードをリンクするために使用します。おそらく、C++全体をでコンパイルするのが最も簡単g++です。

于 2009-11-16T07:51:56.277 に答える