ということで、C99 についてまとめてみます。
ISO/IEC 9899:1999(E) Programming Language–C (Second Edition) 通称 C99 は、C89 が色々拡張されたものです。ということで、C89 からの変更点を連載形式であげていきます。
なお、本記事は Committee Draft に基づいて記載しているので、正式な規格では変わっているものがあるかもしれません。ご了承ください。
第0回は簡単にということで、C99 モードでコンパイルされているかどうかを示す定数の紹介です。
#include <stdio.h>
int main(void) {
#if __STDC_VERSION__ >= 199901L
printf("C99!!!\n");
#else
printf("Not C99...\n");
#endif
return 0;
}
上記を C99, C89 モードでコンパイルすると、それぞれ以下が出力されます。
% cc -Wall -Wextra -std=c99 test.c && ./a.out # C99
C99!!!
% cc -Wall -Wextra -std=c89 test.c && ./a.out # C89
Not C99...
あんまり ifdef で分割はやりたくないですが、C99 に対応していないコンパイラでは、上記を使って処理を切り分けてあげることになります。
ちなみに、今回使用したコンパイラは以下です。
% cc --version
FreeBSD clang version 3.3 (tags/RELEASE_33/final 183502) 20130610
Target: x86_64-unknown-freebsd10.0
Thread model: posix