【C言語】
#defineの使い方で負の定数は括弧で括らないといけないのか?

#define括弧いる時 #define SHRT_MIN (-32768) いらん時 #define SHRT_MAX 32767

&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]);
}

実行結果

./a.out
-100
300

負の定数を括弧で括った例

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)
等の括弧は不要です。