的setjmp的(3)文檔(我的系統上)使用的setjmp指出在包裝功能和局部變量在聯機手冊重挫
所有可訪問對象有值作爲時間的longjmp的()函數被調用除了在setjmp()調用和longjmp()調用之間更改的不具有易失性類型且已被更改的自動存儲調用持續時間的對象的值不確定。
這是否僅包括在相同的範圍,因爲在職能範圍內調用setjmp
,或者也可以是任何物體了調用堆棧更高功能的對象?
例如,以下代碼是否正確?
#include <stdio.h>
#include <setjmp.h>
jmp_buf env;
void function_that_longjmps(void)
{
longjmp(env, 1);
}
int setjmp_wrapper(jmp_buf env)
{
if (setjmp(env) == 0)
return 0;
else
return 1;
}
int main()
{
int i = 0;
if (setjmp_wrapper(env) == 0) {
i = 1;
function_that_longjmps();
}
printf("i = %d\n", i);
return 0;
}
局部變量i
獲取setjmp
和longjmp
調用之間修改,但它並沒有在setjmp_wrapper
的範圍存在。在這種情況下,變量是否有可能被破壞?
嘗試'longjmp'到'setjmp_wrapper'已經返回後是未定義的行爲本身。 – user2357112