私はこの簡単なプログラムを持っています:
#include <stdio.h>
struct S
{
int i;
};
void swap(struct S *a, struct S *b)
{
struct S temp;
temp = *a /* Oops, missing a semicolon here... */
*a = *b;
*b = temp;
}
int main(void)
{
struct S a = { 1 };
struct S b = { 2 };
swap(&a, &b);
}
たとえばideone.comで見られるように、これはエラーを出します:
prog.c: In function 'swap': prog.c:12:5: error: invalid operands to binary * (have 'struct S' and 'struct S *') *a = *b; ^
コンパイラーが欠落しているセミコロンを検出しないのはなぜですか?
注:この質問とその回答は、この質問を動機としています。これと同様の質問が他にもありますが、C言語の自由形式の機能について言及しているところは何も見つかりませんでした。これが原因であり、関連するエラーが発生しています。