■&1[ary]は&ary[1]と同じ
#include <stdio.h>
//負の定数を括弧で括らないといけない理由
//&1[ary]は&ary[1]と同じ
int main(){
int ary[] = {[0]=100,[1]=200,[2]=300};
int *ptr = &ary[1];
#define Godzilla (-1)
printf("%d\n",-Godzilla[ptr]);
#undef Godzilla
#define Godzilla -1
printf("%d\n",-Godzilla[ptr]);
}
■マクロを展開すると
gcc -E f1.c | tail -11
int main(){
int ary[] = {[0]=100,[1]=200,[2]=300};
int *ptr = &ary[1];
printf("%d\n",-(-1)[ptr]);
printf("%d\n",- -1[ptr]);
}
■実行結果
■負の定数を括弧で括った例
grep EOF /usr/include/stdio.h
#define EOF (-1)
■正の定数に括弧は不要
grep SHRT_MAX /usr/include/limits.h
# define SHRT_MAX 32767
# define USHRT_MAX 65535
つまり
define SHRT_MAX (32767)
等の括弧は不要です。