clang でマクロの再定義を警告するには、-Wmacro-redefined オプションを指定します。

#define MY_DEFINE   111
#define MY_DEFINE   222

int main(void)
{
    return 0;
}
$ # M1 Mac (Ventura) + Apple clang 14.0.0
$ clang sample.cpp -Wmacro-redefined
sample.cpp:2:9: warning: 'MY_DEFINE' macro redefined [-Wmacro-redefined]
#define MY_DEFINE   222
        ^
sample.cpp:1:9: note: previous definition is here
#define MY_DEFINE   111
        ^
1 warning generated.

-Wmacro-redefinedデフォルトで有効になっている ため、警告は自動的に表示されます。

$ # M1 Mac (Ventura) + Apple clang 14.0.0
$ clang sample.cpp
sample.cpp:2:9: warning: 'MY_DEFINE' macro redefined [-Wmacro-redefined]
#define MY_DEFINE   222
        ^
sample.cpp:1:9: note: previous definition is here
#define MY_DEFINE   111
        ^
1 warning generated.

警告を抑制する

逆に、警告を抑制したい場合は -Wno-macro-redefined を指定します。

$ # M1 Mac (Ventura) + Apple clang 14.0.0
$ clang sample.cpp -Wno-macro-redefined
$

gcc のオプション

-Wmacro-redefined は gcc でも使うことができます。 macOS では gcc は clang のエイリアスのため、gcc-N(N は gcc のバージョン)を使う必要があります。

$ # M1 Mac (Ventura) + gcc 12.2.0
$ gcc-12 sample.cpp
$sample.cpp:2: warning: "MY_DEFINE" redefined
    2 | #define MY_DEFINE   222
      | 
sample.cpp:1: note: this is the location of the previous definition
    1 | #define MY_DEFINE   111
      |

参考資料