MinGW 4.6.2 の場合 (sourceforge では 4.7.x が「最新」ではないため、これをインストールしました)
void test(int *in)
{
*in = 0;
}
int main()
{
int dat;
test(dat);
return dat;
}
おそらくご存知のように、これにより ac プロジェクトで警告が表示されます。
dirpath\fileName.c|8|warning: passing argument 1 of 'test' makes pointer from integer without a cast [enabled by default]
また、C++ プロジェクトで 2 つのエラーが発生しました。
dirpath\fileName.cpp|8|error: invalid conversion from 'int' to 'int*' [-fpermissive]|
dirpath\fileName.cpp|1|error: initializing argument 1 of 'void test(int*)' [-fpermissive]|
私の質問は、次の2つのシナリオで(メモリ内で)正確に何が起こるかです-fpermissive
.acプログラムとして有効またはコンパイルされていると仮定します。
dat
は初期化されておらず、プログラムが続行されます (セグメンテーション違反は発生しません)。dat
は 42 に初期化され、プログラムは続行します (そしてセグ フォールトを行います)。
dat
ケース 2 ではセグ フォールトが発生するのに (おそらくメモリ ロケーションに値を割り当てようとして)、初期化されていないままにしておくとセグ フォールトが発生しないのはなぜですか(おそらく偶然ですか?)。
好奇心:フラグの意味f
は何ですか? -fpermissive
(冗長なようです)