3

タイトルはそれをすべて言います。を含めた後<csetjmp>longjmpjmp_bufstd名前空間にありますが、そうでsetjmpはありません。MinGW4.5 と MSVC10 でこれを確認しました。ヘッダーを調べたところ<csetjmp>、この選択の理由がわかりませんでした。私は常に、すべてのファイルが名前空間で<cheader>a をラップしていると想定してい<header.h>ました。std

私が間違っている ?setjmp特殊なケースの背後にある理論的根拠は何ですか? 教えてください!

注 : C++ で setjmp/longjmp を誤用する問題を認識しています。

4

1 に答える 1

5

setjmpマクロとして実装できるため、C++ 標準では 17.6.1.2 [ヘッダー] に次のように記載されています。

C でマクロとして定義されている名前は、C が関数としての実装のライセンスを許可している場合でも、C++ 標準ライブラリでマクロとして定義されるものとします。[ 注: C でマクロとして定義されている名前にはassertoffsetofsetjmpva_argva_end、および va_start. —終わりのメモ]

いわばマクロです。

于 2011-10-28T23:42:06.270 に答える