2012-11-26 1 views
7

Мне нужно включить некоторые заголовки, первоначально написанные в C в проекте C++. В файлах заголовков используется restrict keyword, что приводит к синтаксической ошибке для C++.Макрос для удаления ключевого слова `restrict` при компиляции с C++

Я ищу макрос препроцессора, который проверяет, компилирую ли я компилятор C++ и удаляет ключевое слово restrict в этом случае.

ответ

10
#ifdef __cplusplus 
#define restrict 
#endif 

должен это сделать. restrict - это не ключевое слово в C++, поэтому #define В этом ничто не является беспроблемным.

Или, как Arne Mertz предположил, что еще лучше, у

extern "C" { 
#define restrict 
// include C headers here 
#undef restrict 
} 

где вы включаете заголовки C в вашем C++ источник.

:
+1

0 «Ограничить» ничто не будет законным даже в C (поскольку препроцессор преобразует источник до того, как компилятор C его увидит), но это не было тем, что предназначалось. –

+0

@AlexeyFeldgendler, поэтому он обернут '#ifdef __cplusplus' ... – SomeWittyUsername

+3

, если вы поместите' # define' в код C++, прежде чем включать заголовки C (вместе с 'extern" C "{' вам понадобится), вам даже не понадобится '# ifdef/# endif'. Попытайтесь быть минимальным инвазивным, то есть не изменяйте свой C-код, потому что кто-то может попытаться использовать lib на C++. Измените код C++. –

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