2017-06-15 6 views
2

の#pragma起動の#pragma出口の:これらのディレクティブは、プログラムの前に 起動を実行するために必要な機能を指定するために私たちを助け(制御パスの前にmain()へ)、そしてプログラムの直前で 終了(制御がmain()から戻る直前)。ユースケースの#pragma開始および#pragma出口

誰も私にこれらのプリプロセッサディレクティブの使用例を教えてもらえますか?

これらは、オブジェクト指向プログラミングでは非常に限られたユースケースしかないかもしれません。誰もそれがプロジェクトで使用されていることを発見しましたか?

+1

私は同意します。また、オブジェクトの静的インスタンスを作成することもできます。コンストラクタは、メインに戻る前に呼び出され、デストラクタはmainから返された後に呼び出されます。 –

+1

私はcrtの(時には長い)活動を待つことができないことをするときに、(Cとアセンブラ)コードがmain(そして実際には/ crtの前に)の前に実行されているのを見ました。しかし、 "そこにドラゴンがいる"。 – Yunnosch

+0

これはKarthik Byggariのブログから取られたようです。私は彼を無視するだろう。彼がまだ20世紀の「Turbo C」コンパイラについて話しているという事実は、これが現在どれほどの関連性を持っているかを示しています。 – MSalters

答えて

2

これらのディレクティブの最も重要な部分は、mainの前後に呼び出される関数の優先順位を割り当てる機能です。これは"static initialization order fiasco"を克服するのに便利です。 2番目の質問に対する答え:いいえ、私はこれらの指令が実際のアプリケーションで使用されているのを見ていません。コメントで(でも部分)答えを与えないようにするために

+0

'#pragma start'指示文*は本当にこの問題を解決しますか?それはちょうど通りのさらに下に缶を蹴るだろうように思える。さらに、#pragma startは実際にコードを実行してからグローバルスタティックを初期化する前に疑わしいと思う。しかし、私はこれらをサポートするコンパイラを見つけることができないので、私はそれらのドキュメントを見つけることができません。 –

0

、私はこの観点貢献:

私が見てきた(Cとアセンブラ)リアルタイム・システムのコードを、メイン(実際に前に前に実行されています/ crtの代わりに)、ときにそれは、(時には長い)crtの活動を待つことができないものを行う。しかし、 "そこにドラゴンがいる"。

0

IMHO、これは、この種の決定を指示するコーディングガイドラインです。特定のコンパイラによって提供されるこれらの拡張機能を使用することが許されている場合は、適切に行ってください。しかし、標準コードを書くことに重点を置いている場合は、標準機能を使用する必要があります。

Implementation defined behavior controlは、CPPリファレンスから、標準的なサポートを探すのに適しています。

C++の観点からは、プリプロセッサの使用はまったく適切ではありません(場合によっては避けられませんが)。その使用は最小限に抑えられています。それにもかかわらず、いくつかのプロジェクトがそれを使用し、それが彼らの決定です。

私は個人的な経験から、これらのプロジェクトのどれでも使用したことはありませんでした。

関連する問題