Обратите внимание, что GCC означает Коллекция компиляторов GNU , а не компилятор GNU C (как и многие другие инструменты, для которых был установлен префикс g ).Это не компилятор C-only.И многие языки обнаруживаются по расширениям файлов.Адам Розенфилд частично прав в своем комментарии.Да, g++
добавит библиотеку C ++ на этапе компоновщика, но это не единственное отличие (подробнее об этом позже).
Чтобы объяснить, как изменение расширения решило проблему, пожалуйста, посмотрите в этом текстепрямо из руководства GCC:
Compiling C++ Programs
C++ source files conventionally use one of the suffixes
.C, .cc, .cpp,
.CPP, .c++, .cp,
or
.cxx;
C++ header files often use
.hh
or
.H;
and
preprocessed C++ files use the suffix .ii. GCC recognizes files with
these names and compiles them as C++ programs even if you call the
compiler the same way as for compiling C programs (usually with the
name
gcc).
Итак, "GCC повторно регистрирует файлы с этими именами", и ваша программа компилируетсякак источник C ++.Я предполагаю, что в C ++ есть какое-то специальное использование &
, чего я точно не могу сказать (я не знаю C ++).Отсюда ошибка.
Теперь, что касается разницы между g++
и gcc
, перейдите к следующему абзацу:
However, the use of
gcc
does not add the C++ library.
g++
is a program
that calls GCC and treats
.c, .h
and
.i
files as C++ source files
instead of C source files unless
-x
is used, and automatically
specifies linking against the C++ library. This program is also useful
when precompiling a C header file with a
.h
extension for use in C++
compilations. On many systems,
g++
is also installed with the name
c++.
По реальному вопросу: в моей системе нет двух wait
с (Дарвин 11),только стандартный системный вызов.Проверьте, не происходит ли то, что сказал Кевин.То же самое, stdlib.h включает sys / wait.h :
#include <_types.h>
#if !defined(_ANSI_SOURCE)
#include <sys/wait.h>
#if (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE))
#include <alloca.h>
#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
#endif /* !_ANSI_SOURCE */
Проверьте свой заголовок.