2017-01-01 1 views
2

Я работаю в библиотеке C, которая иногда используетВ поисках команды препроцессора, чтобы удалить команду в коде

static inline void myfunc(...) 

при определении функции.

Теперь я пытаюсь перенести это на старый компилятор C, который не поддерживает «статический встроенный». Это компилятор Bcc - Bruce's.

Могу ли я использовать команду в заголовочном файле, который заменяет

static inline void 

с

void 

во всех программах, которые включают в себя этот заголовочный файл?

+3

Я думаю, вы могли бы добавить пустое определение void: #define void. –

+0

Вы действительно хотите переопределить ключевое слово 'void', а не ключевое слово' inline'? Также смотрите поиск и чтение о * условной компиляции *. –

+0

Извините, это была опечатка - я хочу заменить «static inline void» на «void» – Georg

ответ

5

Когда вы должны настроить таргетинг на компилятор, который не поддерживает определенные функции, обычно используется макрос в вашем коде, вместо того чтобы пытаться изменить код с помощью макросов.

В этой ситуации вы можете определить STATIC_INLINE макрос в компилятором зависит образом, и использовать его как это:

#ifdef BCC_COMPILER 
#define STATIC_INLINE 
#else 
#define STATIC_INLINE static inline 
#endif 
... 
STATIC_INLINE void myfunc(...) 
+0

Это будет работать, но у меня уже так много ifdef в коде. Я надеялся, что это будет короче, чтобы определить это в одном месте с помощью команды #define или аналогичной. – Georg

+0

Теперь я понимаю, что вы можете поместить этот код в заголовочный файл. Можно ли заставить препроцессор заменить «статический inline» на пустую строку? Тогда мне не нужно менять каждый программный код. – Georg

+1

@Georg К сожалению, препроцессор может заменить один токен, а не пару токенов, которые появляются рядом друг с другом. Вот почему многие библиотеки, которые я видел, используют этот трюк, хотя он делает остальную часть кода менее удобочитаемой. – dasblinkenlight

1

Большое спасибо всем за помощь. Я должен сообщить, что BLUEPIXY дал ответ, который работал на меня в своем comment:

#define inline 

Видимо ОЦК ли принимать static void но не static inline void.

+1

Проще способ выражения: «Скрытая копия не поддерживает« встроенные »функции». Поддержка 'static' и' void' требуется даже в компиляторах C90; 'inline' был добавлен в C99. –

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