2016-01-20 2 views
1

При выполнении следующего кода кода неудачной компиляции 1, однако, на основе this, я ожидаю, что это будет = = 3. Почему это? Что я могу сделать, если мне нужны более подробные коды выхода, чем бинарный успех/неудача?Неожиданный статус выхода при использовании -pass-exit-кодов в g ++

> echo "int main() {fail}" > fail.cpp 
> g++ -pass-exit-codes fail.cpp -o fail 
fail.cpp: In function ‘int main()’: 
fail.cpp:1: error: ‘fail’ was not declared in this scope 
fail.cpp:1: error: expected ';' before ‘}’ token 
> echo $? 
1 
> g++ --version 
g++ (GCC) 4.1.3 20080704 (Red Hat 4.1.2-27) 

Thanks.

ответ

0

Документация, на которую вы указываете, принадлежит версии gcc 3.3.6. Однако, в версии> = 4, документация для этого флага компилятора изменился, и теперь он только говорит:

-pass-exit-codes
Normally the gcc program exits with the code of 1 if any phase of the compiler returns a non-success return code. If you specify -pass-exit-codes, the gcc program instead returns with the numerically highest error produced by any phase returning an error indication. The C, C++, and Fortran front ends return 4 if an internal compiler error is encountered.

который немного сбивает с толку при чтении. Он не указывает коды ошибок, которые были хорошо объяснены в документации 3.x. Тогда возможно, что код выхода, который вы ищете, больше не генерируется в версии 4.x gcc/g ++.

+0

Имеет смысл. Вопрос в том, какие коды выхода для версии> = 4? Не нашли их нигде и не могли думать о способах вызвать код выхода, отличный от 1 (который, как я полагаю, должен означать, что исходный файл не может быть скомпилирован). – user1622959

+0

К сожалению, кроме кода выхода 4 (внутренняя ошибка компилятора), похоже, нет документации. Если вы выполните коды ошибок, определенные (и переопределенные) в исходном коде gcc 4.8.2 (в gcc/system.h), единственные, которые определены, - это 0, 1 и 4, поэтому я предполагаю, что это в значительной степени это. –

+0

Я искал отличия внутренних ошибок g ++ от ошибок исходного кода, в частности, мне нужно определить следующую ошибку: 'fatal_error (input_location,« пришлось переместить PCH »);' (gcc/gcc-common.c). Основываясь на моем быстром просмотре кода, 'fatal' будет кодом выхода 1, это правильно? – user1622959