2016-02-23 2 views
2

Я пытаюсь определить во время компиляции, были ли исключения отключены с помощью переключателя (-fno-exceptions). Я попытался оценить:обнаружить во время компиляции, исключены ли исключения

noexcept(throw)

Но это не будет компилироваться, если исключения будут отключены при обоих НКУ и лязгом.

EDIT: Взгляните here.

+1

Как насчет установки '-DNO_EXCEPTIONS' на то же место» re установить '-fno-exceptions' и проверить' #ifdef NO_EXCEPTIONS'? --- Поскольку отказ от поддержки исключений является несоответствующим, поведение, определяемое реализацией, я сомневаюсь, что существует «стандартный» способ обнаружения отключенной поддержки. Опять же, вы никогда не знаете с C++. ;-) – DevSolar

+0

Существует, я только что нашел его: макрос [__cpp_exceptions] (https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_exceptions.html) – user1095108

+0

... который не определен стандартом, но реализация (GCC). что и требовалось доказать ;-) – DevSolar

ответ

3

Символ __cpp_exceptions устанавливается gcc при наличии исключений. Затем добавьте макрос, который либо расширяется до нуля, либо обрабатывает исключения. Есть примеры, что в документации здесь:

https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_exceptions.html

По крайней мере, лязг совместим с GCC в этом смысле - вам может понадобиться другой вариант в Microsoft (или совместимый MS) компилятор. Я предполагаю gcc и/или clang на основе имени опции.

1

В случае GCC вы можете проверить следующий макрос:

__EXCEPTIONS

Этот макрос определяется со значением 1, при компиляции C++ исходный файл с поддержкой исключений. Если при компиляции файла используется -fno-exceptions, то этот макрос не задан .

2

Как всегда, это довольно легко проверить, какие макросы предварительно определены для конкретного компилятора с заданным набором параметров командной строки:

$ g++ -dM -E -x c++ - < /dev/null &> except.txt 
$ g++ -dM -E -x c++ -fno-exceptions - < /dev/null &> no-except.txt 
$ sdiff -s except.txt no-except.txt 
#define __EXCEPTIONS 1       < 
#define __cpp_exceptions 199711     < 
$ 
+1

Мне нравится подход к DIY. – user1095108

Смежные вопросы