Domanda

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

Questo codice utilizza le funzioni di gestione dei file definiti fcntl.h e - come open (), write (), close (), ecc .. Il codice compila e funziona come previsto.

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

Quando uso come codice sorgente CPP, perché GCC si lamentano? E, curiosamente, il motivo per cui non si lamenta per open ()? Che cosa è ancora succedendo qui?

È stato utile?

Soluzione

  1. C ++ è più severa sulle intestazioni - è necessario:. #include <unistd.h> per ottenere correttamente le funzioni indicate

  2. global.h non dovrebbe essere la definizione di b - headers non dovrebbe inizializzare le variabili.

  3. Quando si compila si dovrebbe usare -Wall -Werror e che vi costringerà a risolvere tutti i bit dodgy del codice.

  4. Per ottenere exit() modo pulito sarà necessario #include <cstdlib> (C ++) o #include <stdlib.h> (C)

  5. Usa g++ per collegare il codice C ++ in modo che le librerie C ++ vengono inclusi. Probabilmente più facile da fare tutto il C ++ compilare con g++.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top