[C言語] Cプログラミングの落とし穴 4.5 外部の型のチェックP68

『Cプログラミングの落とし穴』(A.コーニグ, 1990)
[M1 Mac, Big Sur 11.7.2, clang 13.0.0, NO IDE]

2ヶ月と2週間ぶりに戻ってきました。

別ファイルの型宣言が間違っている場合の検証です。

gccでは警告が出て、clangはスルー、いずれもビルドが通りました。相変わらずclangはゆるいです。

# include "test2.h"

int n;

int main() {
    n = 2147483648; // intの最大値 2147483647の次は-2147483648になる(2の補数形式)
    // n = 9223372036854775807; // longの最大値ではエラーになる
    func(n);

    return 0;
}
#include <stdio.h>

extern long n;

void func(long n) {

    printf("n : %ld\n", n);

    return;
}
n : -2147483648
// clangは警告なし

// gccは警告あり
src/test.c:7:9: warning: implicit conversion from 'long' to 'int' changes value from 2147483648 to -2147483648 [-Wconstant-conversion]
    n = 2147483648;
      ~ ^~~~~~~~~~
1 warning generated.
(lldb) memory read -c32 0x0000000100008010
0x100008010: ff ff ff ff ff ff ff 7f 00 00 00 00 00 00 00 00  ................
0x100008020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................