2010-12-30 35 views
7

私は、さまざまなC仕様に関連する多くのことに疑問を抱いています。C99コードとC99コードを混在させることは可能ですか?

C99でライブラリをプログラミングする場合、C89コードからライブラリを使用できますか? (C89準拠の定義を持つ関数のみを使用します)。

例では、このコードはC89で使用できますか?共有ライブラリの

ヘッダー:事前に

 

#ifdef C99 
void func (double complex a, double complex b); // C99 function 
#endif 

/* another C89 compliant function */ 
void func2 (double a, double b); 
 

おかげで:)

+0

おそらく '#define C99'が正しい限りです。 http://stackoverflow.com/questions/2115867/is-there-a-define-for-c99 – BoltClock

+0

「複雑」とは何ですか? –

+0

@BoltClock私はそれを見ました:pですが、私の質問は、C89プログラムとC99ライブラリのバイナリ互換性をより重視しています。 – castarco

答えて

7

C言語では、C89とC99のコードのバイナリ互換性については何も言いません。これは、実行可能ファイルのさまざまな部分に使用するコンパイラに完全に依存します。

ライブラリの外部ヘッダーをC89コンパイラに適したものにすることができれば、2つのコンパイラが互換性のあるコードを生成できることを確認する通常の問題を除いて、動作しないという明白な理由はありません。

+0

これは正解です。 – Joshua

2

#ifdef C99の代わりに、#if __STDC_VERSION__ > 199900Lなどを使用してください。

関連する問題