У меня есть некоторый C-код, вызываемый из C ++.
Заголовок напоминает следующее:
#ifndef CLibH
#define CLibH
#ifdef __cplusplus
extern "C" {
#endif
//C API
void foo(void);
// ...
#ifdef __cplusplus
}
#endif
#endif
Так как я уже использую extern C
,
есть ли польза от добавления nothrow
атрибут компилятора?
#ifndef CLibH
#define CLibH
#ifdef __cplusplus
extern "C" {
#endif
//C API
void foo(void) __attribute__((nothrow));
// ...
#ifdef __cplusplus
}
#endif
#endif
Есть ли extern C
сделать это избыточным?
Есть ли еще преимущества применения в этих условиях?
Да, это так. Из документации gcc:
Например, большинство функций в стандартной библиотеке C может быть
гарантированно не выбрасывать исключение с заметными исключениями
qsort и bsearch, которые принимают аргументы указателя на функцию.
Других решений пока нет …