1

関数定義が利用できず、関数プロトタイプのみがヘッダー ファイルに外部化されている場合、g++ コンパイラはエラーを返しません。ただし、リンク中に、g++ リンカーはエラーを識別し、対応する fn への「未定義の参照」と表示します。私は abt fn 定義を気にしません。私はバイナリイメージを取得したいだけで、そのイメージから対応する fn が呼び出されるたびに、その時だけクラッシュしたいと思っています。この「未定義参照」リンカー エラーを抑制するためのリンカー フラグを教えてください。VC++ には、/FORCE というオプションがあります。同様のフラグはありますか?

4

1 に答える 1

2

完全に未定義の動作ですが、クラッシュが必要な場合は...

関数などの未定義のシンボルがある場合void h()、そのマングルされた名前は になります_Z1hv。したがって、その名前と外部リンケージをシンボルに定義すると、タイプが間違っていても検出されます。

int _Z1hv = 0;
void h();

int main()
{
  h();
}

これはリンクしますが、実行時にクラッシュします。これは、への呼び出しがh()整数変数のアドレスで関数を「実行」しようとするためです。

これを行うことは間違っており、嫌で、子猫を殺します。

于 2012-08-23T13:04:10.533 に答える