CasePlayer2の「言語設定」で「C99」を選択したとき、解析可能なソース記述を教えてください。
よくある質問(FAQ)
CasePlayer2の「言語設定」で「C99」を選択したとき、解析可能なソース記述を教えてください。
CasePlayer2で解析可能なソース記述は下記の通りです。「ANSI-C」から追加された記述を掲載しています。
※制限事項について
CasePlayer2には、「C99」言語仕様の解析において制限事項があります。詳細については「Windowsメニュー」⇒「GAIO CasePlayer2」⇒「ヘルプ」を辿り、CasePlayer2マニュアルをご覧ください。
■制限事項掲載位置
ー操作方法
ー仕様書生成
ーC仕様書生成
ーC仕様書生成仕様
ー拡張言語モードの制限 (※「C99に対する制限事項」の項目に掲載されています)
① 変数宣言はブロック先頭でなくてもよい
void func()
{
sub_func(123);
int a = 10;
sub_func(456);
for (int i = 0; i < 5; i++)
{
sub_func(123);
}
}
② bool 型
_Bool flag;
③ 64ビット整数
void func()
{
long long ll = 123LL;
unsigned long long ull = 123456ULL;
long long int li = 1234LL;
printf("*** %lld %llu %lld\n", ll, ull, li);
}
④ 指定する添字の配列要素の初期化
int array[] = { 10, [3] = 13, 14 };
⑤ 指定する構造体メンバの初期化
struct Person {
int age;
char *name;
};
struct Person data = { .name = "abcdefg", .age = 49 };
⑥ 動的なサイズ指定による配列宣言
void func()
{
int sz = 10;
char s[sz];
strcpy(s, "abcd");
}
⑦ サイズ0の配列宣言
struct Person {
int size;
char name[];
};
void func()
{
struct Person *p = malloc(sizeof(struct Person) + 10);
strcpy(p->name, "abcdefg");
}
⑧ 複合リテラル 【配列・構造体のリテラル(定数)を表現できる】
struct Person {
int age;
char name[10];
};
struct Person *p;
void func()
{
pp = &(struct Person3){49, "abcdefg"};
int data = (int []){10, 20, 30, 40, 50}[3];
}
⑨ インライン関数
static inline int add(int a, int b)
{
return a + b;
}
void func()
{
int val = add(10, 5);
}
⑩ 空引数のマクロ関数
#define val(val,suffix) val ## suffix
long lm = val(3,L);
int im = val(3,);
⑪ 可変長引数のマクロ関数
#define dbg(fmt, ...) printf(fmt, __VA_ARGS__)
void func()
{
dbg("**** %d %d\n", 10, 20);
}
⑫ 現在の関数を参照するマクロ
//__func__ 現在の関数名
//__LINE__ 現在の行番号
//__FILE__ 現在のソースファイル名
void func()
{
printf("%s %d %s\n", __func__, __LINE__, __FILE__);
}
⑬ enum 宣言での余分なカンマ
enum { a, b, c, };
⑭ restrict ポインタ
void func9(int n, int * restrict p1, int * restrict p2)
{
for (int i = 0; i < n; i++)
p1[i] += p2[i];
}
⑮ 定義済みマクロ名
//__STDC_VERSION__は 「C99」のバージョン(199901L)
long version = __STDC_VERSION__;
⑯ _Pragma
_Pragma("pack(1)") // -> #pragma pack(1)
struct tag {
char a;
int b;
};
⑰ 浮動小数点定数の16進数表記
double d = 0x1.23ap32;
⑱ _Complex, _Imaginary型
float _Complex fl;
double _Imaginary dl;
⑲ インラインアセンブリ記述
void func()
{
asm (" nop ");
}