2009-11-16 2 views
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 и функции обработки файлов, определенных - как открытый(), написать(), Close() и т.д .. код компилируется и работает, как предполагалось.вопросы FCNTL компиляции C++

{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

Многие люди используют fcntl в коде cpp; Вы можете разместить для директив #includes write_test.cpp и начало global.h (по крайней мере, до предупреждения?) – Joe

+0

Это были мои включает в себя ... #include #include #include #include " global.h " – halluc1nati0n

+0

global.h имеет только одно внешнее определение - значение char * b =" "; – halluc1nati0n

ответ

6
  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++.

+0

Я скорректировал свой код в соответствии с вашими предложениями, и теперь он отлично компилируется. Но при попытке связать его, я, соблюдая следующие ошибки: {net04: ~/хххх/WIP} GCC -o write_test write_test.cpp Undefined первый ссылается символ в файле __gxx_personality_v0/USR/TMP/cclwLzgI. o ld: фатальный: ошибки ссылки на символы. Нет выхода, записанного на write_test collect2: ld возвращен 1 статус выхода Почему это происходит? – halluc1nati0n

+0

Используйте g ++ для связи программ на C++; используйте gcc для связи программ на C. Если вы смешиваете C и C++, используйте g ++. –

+0

Кроме того, exit() объявлен в '' (C++) или '' (C). –