7

この回答 によると、関数main()の使用は違法であり(§3.6.1.3)、その名前が潜在的に評価される式(§3.2)に含まれている場合に関数が使用されます。

私がこのコードを持っているとしましょう:

printf( "%p", &main );

関数の名前がmain()式に表示されます&main

上記のコードは違法ですか?

4

3 に答える 3

3

はい。あなたが引用するように、標準はあなたが使用できないと言っています main

関数のアドレスがと一致しないことにも注意してください"%p"。対応する引数の型は;でなければなりません。void*他のタイプ(多分を除くchar*)は違法であり、未定義の動作になります。

于 2013-03-20T14:02:40.240 に答える
0

は「使用」されていない(評価していない)ためmain、指定したリンクに従って合法である必要があります。

于 2013-03-20T14:02:23.377 に答える
-3

main()しかしのポインタまたはアドレスを使用することは通常ありませんmain()

とにかく、すべての関数(および変数などの任意のシンボル)と同様に、独自のアドレスを持っているため、許可されます。また、main()のアドレスが必要になる場合があります。特に、組み込みシステム用のコードを記述し、コードの動的ロードや実行時検査を行う場合はそうです。または、ブートローダーと実際に実行されているファームウェアがあります。

多くの場合main()、動的にロードされるコード(FLASHからRAMなど)へのエントリポイントであるため、ブートローダーで参照されます(直接呼び出されるか、関連するポインターに割り当てられます)。

MicroC-OS/IIまたはVxWorksを参照してください-どちらもmain()このように使用します

于 2013-03-20T14:16:12.860 に答える