Frage

{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'

Dieser Code verwendet fcntl.h und die definierten Funktionen der Dateihandling - wie Open (), Write (), Close () usw. Der Code kompiliert und funktioniert wie beabsichtigt.

{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)

Wenn ich ihn als CPP -Quellcode verwende, warum beschwert sich GCC? Und seltsamerweise beschwert es sich nicht für Open ()? Was passiert hier überhaupt?

War es hilfreich?

Lösung

  1. C ++ ist strenger in Bezug auf Header - Sie brauchen: #include <unistd.h> Um die Funktionen richtig anzugeben.

  2. global.h Sollte nicht B - Header sollten Variablen nicht initialisieren.

  3. Beim Kompilieren sollten Sie verwenden -Wall -Werror Und das wird Sie zwingen, alle zwielichtigen Teile Ihres Codes zu beheben.

  4. Bekommen exit() sauber Sie brauchen #include <cstdlib> (C ++) oder #include <stdlib.h> (C)

  5. Verwenden g++ So verknüpfen Sie C ++ Code, damit C ++ -Bibliotheken eingeschlossen werden. Wahrscheinlich am einfachsten zu tun, um das gesamte C ++ - kompilieren g++.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top