操作がスコープ内で実行される場合、同じスコープで取り消されなければならないという要件があるとします。その例は、クリティカルセクションに入ったり出たりすることです。ペアリングを使用するユーザーを強制するためにマクロで開いている/閉じる中括弧を使ってCでペアを強制する
ん - 操作を取り消し、マクロのペアが定義されて開閉括弧を使用します。
もちろん#define BEGIN \
{ \
do_something();
#define END \
undo_something(); \
}
、その「悪意のある」コーダができる方法があります。 (例えば、中かっこを追加するなどして)これらのマクロをトリックしますが、これは一般にBEGIN
の後にEND
が続かなければならないことを思い出すのに役立ちます。さらに、例えば、既存のBEGIN
がコメントアウトされている場合、コンパイラは、END
も削除する必要があることを示す文句を言います。
私はいくつかの内部プロジェクトを見てきました。私が言ったように、それは100%の保護を提供していませんが、この練習は何らかの形で有害であると証明することができますか?これはよく知られた練習ですか?
FOO({
//your code here
})
-
編集:
のミスさえ量が検出できないことがあります。 –
私が言ったように、エラーが検出されない方法はたくさんありますが、実際に何らかの形でそれが実際に有害なものになるかどうかを尋ねています。 – Kostas
'do_something'と' undo_something'に 'begin()'と 'end()'という名前を使うのはなぜですか?また、大文字と小文字を区別するためには 'Begin()'と 'End()'を使います。 – rici