fcntl выдает компиляцию C ++ - PullRequest
1 голос
/ 16 ноября 2009
{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 ()? Что здесь вообще происходит?

1 Ответ

6 голосов
/ 16 ноября 2009
  1. C ++ более строг в отношении заголовков - вам нужно: #include <unistd.h>, чтобы правильно получить указанные функции.

  2. global.h не должен определять b - заголовки не должны инициализировать переменные.

  3. При компиляции вы должны использовать -Wall -Werror, и это заставит вас исправить все хитрые биты вашего кода.

  4. Чтобы получить exit(), вам понадобится #include <cstdlib> (C ++) или #include <stdlib.h> (C)

  5. Используйте g++, чтобы связать код C ++, чтобы включить библиотеки C ++. Вероятно, проще всего сделать полную компиляцию C ++ с помощью g++.

...