電子書籍の厳選無料作品が豊富!

 C言語について質問致します。
 C言語にはISOでの規格について(通称)C55、C99の2通りがあると聞きましたが、今自分が使っているCはどちらの方
を使っているかというのはどのようにしたら分かるのでしょうか。

 今、私はVisual Studio 2008で書いていますが、規格は何に依存するものなのでしょうか。
 Editorとか、コンパイラーによって、自動的に決まるものなのでしょうか。
 
 また、このような規格についてのサイトがあれば教えて頂けないでしょうか。
 宜しくお願いします。

A 回答 (3件)

ISO の規格は,C99 のみが現行の規格になります。


C90 (ISO/IEC 9899:1990) は C95 (ISO/IEC 9899:1990/Amd.1:1995) によって改正され,
C90 および C95 は C99 (ISO/IEC 9899:1999) によって取り消され,かつ置き換えられています。

識別方法ですが,本来の識別方法で言えば,
・__STDC__ が定義されていない
非標準
・__STDC__ が 1 かつ __STDC_VERSION__ が定義されていない
C90
・__STDC__ が 1 かつ __STDC_VERSION__ が 199409L
C95
・__STDC__ が 1 かつ __STDC_VERSION__ が 199901L
C99
になります。

他に,非標準の機能が使えないことを前提で言えば,
コンパイラが
int main (void) <% return 0; %>
を通せば C95 or C99,
int main (void) <% return 0; %> // comment
を通せば C99 です。


>  今、私はVisual Studio 2008で書いていますが、規格は何に依存するものなのでしょうか。
>  Editorとか、コンパイラーによって、自動的に決まるものなのでしょうか。

コンパイラです。
ただし,コンパイラが複数バージョンをサポートしている場合があります (GCC 等)。
その場合は,コンパイラオプション等が関係してきます。

VC++ 2008 に関しては,ほぼ C95 をサポートしています。
ほぼ,というのは,wcstok のように,未だに標準と異なる形のものが残っているためです。
また,ISO C++ (C++98/C++03) に対応したコンパイラの場合,C++ の規格が C95 を参照するため,少なくとも C95 の範囲はほとんどカバーされます。
# VC++ は C++ 側を中心にしているっぽいので,C++0X のサポートは進んでいますが,C99 のサポートは進んでいない状況です。


>  また、このような規格についてのサイトがあれば教えて頂けないでしょうか。

規格の説明サイトはいくつかあると思いますが,規格自体に関しては,原則として規格を購入することになります。
# ちょっと調べれば,ドラフトが見つかったりするのですが……。

購入に関しては,英語版になりますが,ANSI Standard StoreでINCITS/ISO/IEC 9899を購入するのが一番安いです。
ISO/IEC 9899と同等のもので,30ドル,書き込み時点の為替相場で3000円弱,クレジットカードの手数料を考えても4000円は超えないと思います。
# JIS規格は14280円,ISO規格は33264円 (書き込み時点)
site: American National Standards Institute - ANSI Standards Store
http://webstore.ansi.org/

抜け道としては,日本工業標準調査会のサイトで閲覧することができます (閲覧のみ可能です)。
JIS検索でX3010を検索してください。
site: JISC 日本工業標準調査会
http://www.jisc.go.jp/
    • good
    • 0

>C言語にはISOでの規格について(通称)C55、C99の2通りがあると聞きましたが、今自分が使っているCはどちらの方


>を使っているかというのはどのようにしたら分かるのでしょうか。

「C55ではエラーになるが、C99ではエラーにならない、新しい書き方」をしているソースコードをコンパイルしてみると、ある程度は判ります。

エラーが出なければC99に準拠している可能性があります。

エラーが出た場合、少なくとも「C99には準拠していない」ことが判ります。

次に「C55以前の古いコンパイラではエラーになるが、C55ではエラーにならない書き方」をしているソースコードをコンパイルしてみると、もう少し判ります。

エラーが出なければC55に準拠している可能性があります。

エラーが出た場合、少なくとも「C55には準拠していない」ことが判ります。

また、エラーが出るか出ないかの他に「ライブラリ関数の挙動」でも、どの規格に準拠しているか、少しは判ります。
    • good
    • 0

> C言語にはISOでの規格について(通称)C55、C99の2通りがあると聞きましたが、


ISOの規格でないものも含めれば、K&RとかC89、C90やそれらを独自拡張された方言もたくさんありますよ。

> 今自分が使っているCはどちらの方を使っているかというのはどのようにしたら分かるのでしょうか。
まあ、そのソースコードを見るしかありません。また規格上で違いがない部分だけで書かれているコードであれば見ても分かりません。

> 今、私はVisual Studio 2008で書いていますが、規格は何に依存するものなのでしょうか。
> Editorとか、コンパイラーによって、自動的に決まるものなのでしょうか。
たしかVisual Studioに付属のコンパイラは規格ではC90に対応しているだけだったような...(違っていたら誰か指摘してください)
まあ、それから独自の拡張が色々とされていますけどね。
Editorによって決まることはありません。
コンパイラーによってはある程度は規定されます。規格に完全に準拠していなくても一部には対応していたりするので...
 
> また、このような規格についてのサイトがあれば教えて頂けないでしょうか。
日本語の資料としては、例えば
JIS X3010-1993 プログラム言語C
JIS X 3010-2003 プログラム言語C
とか...
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!