問題タブ [sal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 奇妙なSALアノテーション警告
プロジェクトにMicosoftのSALアノテーションを使用しようとしていますが、次の警告が表示され、理由がわかりません。
例として、新しいC ++コンソールアプリケーションを作成し、次のコードを使用します。
Visual Studio 2008を使用してコンパイルすると、次の警告が表示されます。
警告C6540:この関数で属性アノテーションを使用すると、既存の__declspecアノテーションがすべて無効になります
ファイル「c1xxast」内
私は何が間違っているのですか?_Check_return_
またはを削除する__in
と、警告が消えます。
警告C6550への参照が見つかりません。ただし、同じテキストがここにあります:http: //msdn.microsoft.com/en-us/library/dd445322.aspxですが、あまり役に立ちません。
c++ - Microsoft の Source Annotation Language (SAL) -- それを利用する方法はありますか?
この情報を保存する C パーサーなど、Microsoft の SAL を利用する方法はありますか? それとも、Microsoft の内部使用のみを目的として Microsoft によって作成されたものですか?
他の言語用の C ライブラリ バインディングの作成など、多くのタスクに非常に役立ちます。
c++ - SAL (Source Annotation Language) の目的と、SAL 1 と 2 の違いは何ですか?
タイトルで尋ねられたように:
SAL (Source Annotation Language) の目的と、SAL 1 と SAL 2 の違いは何ですか?
使用法の基本を理解しています。これは、関数に渡される各変数の目的と、静的コード分析のための他のさまざまなことを強調するのに役立ちますが、実際にどれだけの違いが生じるか (パラメーター要件の明確化を無視して)プロジェクトの他のプログラマー)?
If I was to have the following prototype:
This is supposed to "tell" the static analyser that the function will return 1 upon it's successful operation, that pTest
is a pointer which must not be nullptr
and that pOptional
is a pointer which may or may not be nullptr
. However, can't the static analyser get this information from the function definition itself? Moreover, what does it do with the information it gets such as the success criteria?
Furthermore, why is there a difference between SAL 1 and SAL 2, why did microsoft decide to change the way they named their macros (i.e. from __out
to _Out_
and __success
to _Success_
?)
I'm sorry if this is described somewhere in detail on the MSDN but I was unable to find it or any other question on StackOverflow with a detailed answer so I thought I'd ask in the hopes of having my curiosity satisfied.
Thanks in advance for your time!
c++ - Microsoft SAL で off-by-one エラーを防ぐ方法
これは、MSDN ( http://msdn.microsoft.com/en-us/library/hh916383.aspx ) で提供されている例で、SAL 注釈が一般的な off-by-one エラーの検出に役立つことを説明しようとしています。
この例がよくわかりません。この例では、関数シグネチャに というパラメーターが含まれているように見えるcount
ため、 を使用In_reads_(count)
して、指しているメモリ空間src
に少なくともそのようなバイト数があることを確認できます。
私の質問は、このような署名付きの関数がある場合はどうなるかです
この場合、署名にはサイズに関する情報は含まれていません。SAL を使用してデバッガーにdest
と同じサイズまたは 1 バイト大きくするように指示できますsrc
か?
c++ - _Deref_ および _Outptr_ sal 注釈
DerefとOutptr SAL アノテーションの違いは何ですか? また、_Outptr_result_buffer_all_ や _Outptr_result_buffer_ などのさまざまな種類のOutptr注釈をいつ使用しますか?
c++ - 呼び出し元 SAL エラーへのポインターの出力
コードにSALを追加しようとしています... msdn に従って作業したところ、msdn の例にバグが見つかりました。対処方法がわかりません。
ここでは、 SAL についての例「呼び出し元へのポインターの出力 (例: Outptr 注釈)」を少し変更しました。
Outptr は、ポインターを返すことを目的としたパラメーターに注釈を付けるために使用されます。パラメータ自体は NULL であってはなりません。呼び出された関数はその中に NULL 以外のポインタを返し、そのポインタは初期化されたデータを指します。
私のコード:
コードalalysysを有効にしてVS2013でコンパイルすると、C6001が発生しました:初期化されていないメモリを使用しています
為に
行。
ここで私の注釈で何が磨耗していますか?どうすれば修正できますか?
c++ - _In_ を const に展開
おそらくすべての Windows C++ 開発者を混乱させるという事実を除けば、
const の正確性を確保するために (まだ存在しない場合)_In_
必須に拡張するのが賢明ではないでしょうか?const
そう
になる
明らかに _[In]Out_ は Nothing に展開する必要があります。
編集:明らかに最初の問題は、これはポインターまたは参照パラメーターの前で展開する場合にのみ意味があるということです。
したがって、simpke マクロ展開では十分ではないかもしれません。強制するという概念をまだ放棄したくありconst
ません。モットーは次のとおりです。SAL
どのパラメーターが何であるかを示す表記法が既にありro
ます。それを使用してみましょう。