2016-07-29 3 views
-1

В питоне я могу просто сделать этоКак необязательно включать заголовочный файл

def func(): 
    if condition: 
     import something 
    else: 
     import somethingelse 

Есть ли способ или стандарт конвенции для этого в стандарте ANSI C? Если это помогает, мне нужно, чтобы инструкции печати уходили, когда я нахожусь на компьютере, и чтобы они не уходили, когда я во встроенной системе, потому что функции печати могут быть недоступны для внутреннего компилятора.

+0

ANSI C не имеет значения. C стандартизован как ISO9899 с единственной допустимой версией 2011 года. И в том числе файлы условно, скорее всего, не правильный способ делать то, что вам кажется нужным. Без этих заголовков ваш код по-прежнему будет вызывать функцию, но без обязательных прототипов. (Независимо от того, что вы имеете в виду с «внутренним компилятором») – Olaf

+0

Ну, при поиске решений я часто вижу решения, которые включают библиотеки, уникальные для Linux, такие как sys \ stat.h. Мне жаль, что я этого не сделал. Я все еще изучаю жаргон. Более того, из ответов здесь я могу просто включить прототипы с пустыми функциями для смягчения проблемы, которую вы вызываете. Внутренний означает «сделано внутри организации». Таким образом, это означает, что мы построили его, и это может не включать некоторые вещи. –

+0

** Внешние ** библиотеки не связаны со стандартом C. (Они не должны даже записываться на C, если они соответствуют ABI). Прототипы ничего не определяют. Таким образом, они не являются «пустыми» (независимо от того, что означает, например, функцию, которая должна возвращать результат). Во всяком случае, это окончательно не просто вопрос опускания деклараций, т. Е. Заголовков. Возможно, вам захочется сделать чистую концепцию, прежде чем вы начнете думать о конкретной реализации. – Olaf

ответ

2
#define SOME_CONSTANT 

#ifdef SOME_CONSTANT 

#include<header.h> 

#else 

#include<otherheader.h> 

#endif 
1

Это обычно выполняется с условной компиляцией.

#if EMBEDDED == 1 
#define print_xxx(...) (void)0 
#endif 

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

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