C と Ada でのプラグマの使用法を教えてください。可能であればいくつかの例を挙げてください。
5 に答える
C99には3つの標準プラグマがあります。
#pragma STDC FP_CONTRACT on-off-switch
#pragma STDC FENV_ACCESS on-off-switch
#pragma STDC CX_LIMITED_RANGE on-off-switch
ここで、「on-off-switch」はON、OFF、DEFAULTのいずれかです。
これらはコンパイル時に使用して、コンパイラの動作を難解な方法で変更できます(これらは、C99浮動小数点の動作に関連しています)。標準では、標準プラグマ用にSTDCが予約されています。他の人は好きなものを使うことができます。
Samuel Klatchkoが指摘したように、非標準のプラグマもあります。
基本的に、これらはコンパイラーに準標準的な方法で非標準的なことを実行させる方法です。1つの例は' #pragma pack
'です。これは、メンバーへのアクセスが最適ではないことを意味する場合でも、メンバー間にパディングなしで構造が作成されることを意味します(おそらく、時間よりもスペースの方が重要です)。これは特に良い考えではありません(ただし、これを使用する人はそれに反対します)。しかし、これは一般的に認識されている要件であるため、コンパイラーはそれをサポートすることがよくあります。
私はCでプログラミングをしてきました-ああ、25年と少し余裕があります。一度はプラグマを使う必要はありませんでした。私はそれを数回いじったことがありますが、実際にそれを使用する必要はありませんでした。多分私は幸運です。
Cでは、ほとんどのプラグマはコンパイラ/プラットフォーム固有です(ただし、いくつかのプラグマは#pragma once
広く実装されています)。
これは、 gccプラグマとMicrosoftVCプラグマのページです。
...実用的なプログラマーのために;-)
`#pragma'ディレクティブは、言語自体で伝達される情報以外に、コンパイラに追加情報を提供するためにC標準で指定されているメソッドです。このディレクティブの3つの形式(一般にプラグマとして知られています)は、1999C標準で指定されています。ACコンパイラは、他のプラグマに好きな意味を自由に付けることができます。
http://gcc.gnu.org/onlinedocs/cpp/Pragmas.html
http://msdn.microsoft.com/en-us/library/d9x1s805%28VS.71%29.aspx
基本的に、それらはコンパイラへのコマンドと考えることができます。これらのコマンドは、コンパイル プロセス中に使用されます。
例
#include<windows.h>
#pragma comment("lib","shell32.lib")
wmain(){
......
}
上記の例では、基本的に、プログラムをリンクする際に shell32.lib を自動的にインクルードするようリンカに要求しています。cl.exe のコマンド ラインで shell32.lib を手動で指定する必要があります。
別の例は、コンパイラに最終的な実行可能ファイルの関数を要求できることです...
#pragma auto_inline(on)
int functionToBeInlined()
{
//.....
}
#pragma auto_inline(off)
上記の関数の出現箇所はすべてインライン化されます。
各コンパイラには固有のプラグマがあります