C99の新機能
C99の新機能の紹介です。
「//」による一行コメント
C言語のコメントは「/* コメント */」だけでしたが、「//」による一行コメントが、正式にC99で採用されました。
// コメント
どの位置でもローカル変数宣言が可能
C99からはどの位置でもローカル変数の宣言が可能になりました。ローカル変数の宣言は、ブロックの先頭でなければならないという制約はなくなりました。
#include <stdint.h> int main (void) { { int32_t num1 = 5; 1 + 1; // どの位置でもローカル変数の宣言が可能 int32_t num2 = 4; } }
for文のループ変数初期化部でローカル変数の宣言が可能に
for文のループ変数初期化部でローカル変数の宣言が可能になりました。
#include <stdint.h> #include <stdio.h> int main(void) { int32_t total = 0; // forのループ変数初期化部で変数宣言を行う for (int32_t i = 0; i < 10; i++) { total += i; } printf("%d\n", total); }
確実な幅を指定できる整数型
確実な幅を指定できる整数型が利用できるようになりました。
- int8_t - 符号あり8bit整数型
- int16_t - 符号あり16bit整数型
- int32_t - 符号あり32bit整数型
- int64_t - 符号あり64bit整数型
- uint8_t - 符号なし8bit整数型
- uint16_t - 符号なし16bit整数型
- uint32_t - 符号なし32bit整数型
- uint64_t - 符号なし64bit整数型
ポインタと相互変換可能な整数型
構造体のメンバ変数名を指定して値を指定
構造体のメンバ変数名を指定して値を指定できるようになりました。
#include <stdint.h> #include <stdio.h> // 書籍情報を表現する構造体の定義 struct myapp_book { int32_t id; const char* name; int32_t price; }; int main(void) { // 構造体変数の宣言と初期化(メンバ変数名を指定して値を指定) struct myapp_book book = {.id = 1, .name = "C99 Book", .price = 2000}; printf("id: %d, name: %s, price: %d\n", book.id, book.name, book.price); }