Если я правильно вас понимаю, вы хотите иметь уникальные коды ошибок, чтобы вы могли вернуться к строке, где произошла ошибка?
обращусь, что Y question instead of your X one:
Вы можете использовать __LINE__
. __LINE__
расширяется до целочисленной константы текущего номера строки. Вы можете #define
бросить как:
#define quit(code) (quit)(__LINE__+(code))
void (quit)(code) { // seperate func in case you want to do more
exit(code);
}
Имейте в виду, однако, что код выхода процесса не лучший способ кодирования такой информации. В POSIX гарантированно доступен только младший 8 бит кода выхода. Но поскольку вы уже используете 300 в качестве базового значения, я предполагаю, что вы находитесь в Windows или какой-либо другой системе, где это не вызывает беспокойства.
Для целей отладки в качестве альтернативы рассмотрите возможность записи в stderr
, когда произошла ошибка (возможно, с флагом командной строки).
Если exit
был просто пример, и вы собираетесь использовать его в своем приложении, вы можете сохранить __LINE__
и __FILE__
в глобальных (или _Thread_local
) переменных на ошибки и хранить только причину выхода в коде ошибки.
Что касается вашего вопроса X, препроцессор не делает таких вещей. Вам придется разгружать такие задачи в оболочку/perl/любой скрипт, который может вызвать скрипт сборки.
Это не C, ни C++. – Quentin
Если вы открыты для использования оболочки, вы можете использовать «grep» quit (300 "* .c | wc'. Первое возвращаемое число будет равно количеству совпадений. Используйте' egrep', если вам нужны регулярные выражения. –
I can not use grep. Я хочу директиву препроцессора, подсчитывать и использовать этот номер в файле c/C++. Это не дубликат, потому что этот вопрос только печатает его, не использует его. –