GAIO CLUB
char ***cp; /* ルール違反 */
struct T_ST1 {
char st1_c;
};
struct T_ST2 {
int st2_i;
struct T_ST1 *st2_st1p;
};
struct T_ST3 {
int st3_i;
struct T_ST2 *st3_st2p;
};
struct T_ST3 *st3p; /* ルール違反? */
void test()
{
st3p->st3_st2p->st2_st1p->st1_c = ***cp;
}
char C;
short *SP = (short *)&C; /* SP が奇数になる可能性あり */
unsigned short US;
short *SP = (short *)&US; /* shortサイズどうしなので問題なし(符号違い) */
const int CI = 10;
int *IP = &CI; /* ルール違反 : const を取り除いている */
const int *CIP = &CI; /* const int を指すポインタ */
const int CI1 = 1;
int const CI2 = 2; /* const int と同じ意味 */
volatile int VI;
volatile int *const VICP = &VI; /* volatile int を指すconstポインタ */
volatile int * const * volatile VICPVP = &VICP; /* volatile int を指すconstポインタ を指すvolatileポインタ */
int I,*IP;
short *SP1,*SP2;
IP += 1;
IP -= 1;
IP *= 1; /* エラー : 乗算は使えない */
IP /= 1; /* エラー : 除算は使えない */
IP += 0.5; /* エラー : 浮動小数は使えない */
I = SP1+SP2; /* エラー : ポインタどうしの加算は使えない */
I = SP2-SP1;
I = SP2-IP; /* エラー : ポインタの指す型が異なっている */
int I1,I2;
short S1,S2;
short *SP1=&S1, *SP2=&S2;
long LA[10];
long *LP1=&(LA[0]), *LP2=&(LA[3]), *LP3=&(LA[4]), *LP4=&(LA[8]);
++LP1;
LP2 -= 3;
I1 = LP4 - LP3;
I2 = SP1 - SP2; /* ルール違反:配列を指していないポインタの算術演算 */
浅野 昌尚(あさの まさなお)
ガイオ・テクノロジー株式会社
開発1部 QTXグループ
1980年代から30年以上にわたり汎用構造のCコンパイラ開発に従事し、その間に8ビットマイコンからRISC・VLIW・画像処理プロセッサまで、さまざまなCPU向けのクロスCコンパイラを開発。