f99aq8ove's blog

2014年だし、そろそろC99についてまとめておくか#0

tag: C and C99
09 September 2014

このエントリは 2014-09-09 に書かれました。 内容が古くなっていたり、もはや正しくないこともありますので、十分検証を行ってください。

ということで、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

Related Posts