「C99」の版間の差分
提供: C言語入門
(同じ利用者による、間の2版が非表示) | |||
行112: | 行112: | ||
== 関連項目 == | == 関連項目 == | ||
{{iso}} | {{iso}} | ||
+ | * [[C言語のインクルードガードはpragma onceを使う]] | ||
<!-- vim: filetype=mediawiki | <!-- vim: filetype=mediawiki | ||
--> | --> |
2016年1月9日 (土) 18:44時点における最新版
C99 とは、1999年に策定されたC言語の規格です。ANSI-C(C89)をより便利にしたものです。型の追加、ヘッダファイルの追加、文法の拡張、ライブラリの拡張など、いくつもの変更が施されています。現代では、C11という新しい規格も策定されています。
読み方
- C99
- しーきゅうじゅうきゅう
目次
概要
C99は、C言語で安全にコーディングしたり、より便利な機能が追加されています。
- 型の追加
- 変数宣言
- ローカル変数宣言がどこでもできる
- 配列の拡張
- 可変長配列
- 指示初期化子
- 配列
- 構造体
- プリプロセッサの改善
- C++スタイルのコメント(//)
- 関数名マクロ __func__
- インライン
- ライブラリの拡張
- stdio.h
- snprintfなどn系関数
- stdio.h
- 複合リテラル
コンパイル
C99を有効にしてコンパイルするには、c99を指定します。
cc -std=c99 hoge.c
プロプロセッサの改善
関数名マクロ __func__
__func__ は、プログラムのデバッグやロギングの味方です。__func__ は、__func__ が書かれたブロックの属する関数名に置き換えられます。
* * __func__.c * Copyright (C) 2016 kaoru <kaoru@localhost> */ #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { (void) printf("%s\n", __func__); exit(EXIT_SUCCESS); }
このコードは、関数 main を表示します。
$ cc __func__.c $ ./a.out main
デバッグやログのエラーの情報を吐き出すときに、一緒に、関数名を付け加えておくと、あとで調査が簡単になります。
変数宣言
変数宣言をどこでもできるようになった
従来までは、変数の宣言は、関数やブロックの先頭でないと宣言できませんでした。
{ int i; int total = 0; int x; for (i = 0; i < 10; ++i) { total += i; } x = total; }
C99では、ブロックの先頭部分に変数宣言をまとめる必要はなく、使いたい時に宣言できる、つまり、どこでも宣言できるようになりました。整数の変数 x は、先頭部分ではなく、関数の途中で宣言していますが、C99ならこれはエラーになりません。
{ int i; int total = 0; for (i = 0; i < 10; ++i) { total += i; } int x = total; }
C言語のforループでもカウンタ変数をインラインで宣言可能になった
C言語では、forループを書く場合は、forで利用するカウンタ変数を事前に宣言するのが一般的でした。
uint32_t i; for (i = 0; i < 10; ++i) { // doit }
C99でも、仕様が変更され、どこでも変数が宣言可能になりました。 つまり、以下のコードで OK です。
for (uint32_t i = 0; i < 10; ++i) { ; }
詳細については、C99のforループはインラインでカウンタの変数を宣言できるをご参照ください。
まとめ
C99 では、従来まで不自由だった部分の改善が行われています。