2011-07-14 7 views
6

Is this proper C declaration? If so, why does it not work?を読んでいる間、私は厳密に準拠したこのプログラムは、約異なるヘッダーを含めるときに、C実装が暗黙的に標準ヘッダーを含めることはできますか?

#include <stdio.h> 

int main(void) { 
    int bool = 0; 
    return bool == 0; 
} 

です考えていましたか?言い換えれば、stdio.hstdbool.hを含めることが許されているのですか?そうすることは禁じられていますか?これは仕様で指定されていますか?

答えて

5

標準ヘッダーには他のヘッダーを含めることはできません。これは、明示的に許可されているC++とは異なります。

C99規格、セクション7.1.3

が各ヘッダは、その関連する箇条に記載されているすべての識別子を宣言または定義する[...] 他の識別子が予約されていません。

+0

私はあなたを信じていますが、K&Rなどの参考文献を教えてもらえますか? –

+0

1つのヘッダーに別のヘッダーが含まれていると、プログラムは2つのヘッダーを効果的に含みます。そして、両方のヘッダの識別子が予約されているようです。または、これを許可する明示的な規則がないので、別のヘッダのこのような包含は違法ですか? –

+0

@Johannes - 私が理解しているところでは、特定のヘッダーには指定された名前と一般的に予約されている名前しか含めることができません(これは[...])。 'bool'を定義したい場合は、を含める必要があります。それ以外の場合は '_Bool'だけで、例のようにboolを使うことができます。 –

3

私はそれが正式であるかどうかわかりませんが、ここにはPlaugerの記載があります(それはc89のものです)。

標準Cライブラリには15個の標準ヘッダーがあります。ヘッダ にはいくつかのプロパティがあります。

これらは相互に独立しています。標準ヘッダーは、それが正しく機能するために最初に別の標準ヘッダーを含めることを要求しています( )。 標準ヘッダーには、別の標準ヘッダーも含まれていません。

これについては、c99またはc89には記載されていません。

EDIT

私はinttypes.hヘッダ<inttypes.h>ヘッダ<stdint.h>を含み、ホストされた実装によって提供される追加機能とそれを 延びstdint.h

7.8から1

を含んで見ることができます。

関連する問題