もちろんint
、 とlong
が同じ型であるとは限りませんが、Windows などのプラットフォームで 32 ビット モードでコンパイルすると同じサイズになる場合、コンパイラはそれらを同じ型と見なすことができますか?
コンパイラが 2 つの型を同じと見なすかどうかを決定的にテストする方法がわかりませんが、ヒューリスティック テストを試してみましたがint *a; long *b = a;
、Microsoft コンパイラはこれを問題なく受け入れますが、GCC は警告を出します。コンパイラが不適切に動作しているのでしょうか、それとも実装に依存して、2 つの異なる型を指定するのか 1 つだけを指定するのでしょうか?