2017-07-10 7 views
1

オープンソースのソースを閲覧すると、私はC++ヘッダsal.hを遭遇し、と似ていると思われる[source_annotation_attribute(SA(Method))]というコード行が見つかりました。 sal.hにはないので、今C++ source_annotation_attribute

、私はC#であるとして、一般的に、C++でno user defined attributesがあることを知っている、と私の最初の推測では[source_annotation_attribute(SA(Method))]は単なるマクロであるということでしたが、それはsal.h中にも、任意の他のヘッダで定義されていないもされていません#include any。

次は、[source_annotation_attribute]が実際には例えばMSVCのようにMSVCに組み込まれているということです。 [[noreturn]]属性。

コンパイラに組み込まれていない場合、誰かが実際に何かを明らかにして、それと似た独自の属性を宣言できればうれしいです。 あなたの自己を見たい場合、特定のファイルは\Source\externalapis\legacy\vctools\vc12\inc\vc\sal.hであり、属性は(とりわけ)1934で発生します。ここで

sal.hでの使用の例である:

[source_annotation_attribute(SA(Method))] 
struct __M_ 
{ 
#ifdef __cplusplus // [ 
    __M_(); 
#endif // ] 
    int __d_; 
}; 
typedef struct __M_ __M_; 

事前に感謝します。

+0

@VTT使用法の例を追加しましたが、それがC++/Cliかどうかはわかりません。もちろん可能性はありますが、C++/Cliの属性は、 'sal.hの中のものとは違って使われているようです(https://msdn.microsoft.com/en-us/library/yd21828z.aspx) '。 –

+1

このテキストが存在するブロックをチェックする必要があります。それは '_MSC_EXTENSIONS'と' _PFT_VER'を持っているので、明らかに普通のC++ではありません。おそらく特別なコンパイラのパス中に使われることを意図しています。 – VTT

+0

@VTTありがとう、私はこれが答えだと信じています。だから私は第2の推測でより適切でした。それはコンパイラに組み込まれている、あまりにも悪いことです。あなたの努力に感謝。 –

答えて

1

は、source_annotation_attributeが、それは実装の詳細であるため、それはそこに記載されていない場合でも、Microsoft extension C++の一部として出荷されるコンパイラ作り付けの構造、(あるように見え、@VTTはすでに言ったことを結論するにはMicrosoftのSALは、Visual Studioに深く組み込まれているという事実は、これに追加されますどのようなコンパイラスイッチ/Ze

でコンパイルした場合にのみ有効である内部使用のみ)のためにあるもので すなわち

ビルド - >ファイル名を指定して実行コードVisual Studio(明らかに)はMSVCコンパイラを使用しているので、Microsoftがコンパイラでこのような内部構造を構築しないことはあまりありません。