- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
出于某种原因,当我从 SIGFPE 的信号处理程序返回时,变量 i 比我预期的要小一个,以便从我的程序中获得正确的结果(遍历对数组中的所有对)我如果我从信号“catch”返回,则必须检查 sigsetjmp 的返回值并递增 i。为什么是这样?为什么在浮点异常迭代过程中发生的增量会丢失?
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <setjmp.h>
jmp_buf e;
int i;
void float_exception ();
int main ()
{
int pairs[][2] = {
{10, -5}, {10, -3}, {-10, -3}, {-10, -5}, {-10, 3}, {-10, 5}, {-10, 0},
{10, 0}, {0, 10}, {2, 3}, {3, 3}, {5, 10}
};
int npairs;
/* handle sigfpe so /0 doesn't interrupt the rest of the program */
signal (SIGFPE, float_exception);
printf ("Seeing what my C implementation does with negative or 0 modulo"
"\narithmetic.\n");
npairs = sizeof (pairs) / sizeof (int) / 2;
i = 0;
if (sigsetjmp (e, 1) != 0) {
i++; /* without this line, i is one less than I expect it to be */
}
for (; i < npairs - 1; i++) {
printf ("%d: %d %% %d\t= ", i, pairs[i][0], pairs[i][1]);
fflush (stdout);
printf ("%d\n", pairs[i][0] %pairs[i][1]);
fflush (stdout);
}
return 0;
}
void float_exception ()
{
printf ("fpe\n");
fflush (stdout);
longjmp (e, 1);
}
最佳答案
我觉得很合适。 “正常”i++ 发生在 for() 循环的末尾 - 如果您调用 longjmp(e,1) 则跳过它。
关于c - 使用 C 在 Linux 上使用 sigsetjmp 的模糊问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1159172/
我已经使用 sigsetjmp 和 siglongjmp 编写了一个段错误处理程序。一旦它进入信号处理程序,我就会调用 siglongjmp 以便跳过错误指令。 问题是,我再次想引起 SIGSEGV
根据手册页: 如果您想以可移植的方式保存和恢复信号掩码,请使用 sigsetjmp() 和 siglongjmp()。 sigsetjmp() 类似于setjmp()。当且仅当 savesigs 为非
我正在使用 int n; //global var. int main() { if (sigsetjmp(jmpenv,0)) { n++;
我有一个练习,我必须实现一个函数,该函数将单参数函数指针fun作为参数,该指针是指向该指针parameter指向的函数的参数code> 和一个整数句点。如果 fun 指向的以 parameter 作为
我有一本(较旧的)教科书中的程序,旨在说明 POSIX 信号在 UNIX 上的使用。该程序运行一个计算循环,从固定点开始计算完美数。 时间警报信号用于定期打印状态。 中断信号用于按需状态。 退出信号用
这些函数的返回值并不代表它们是否成功。有办法知道吗? 最佳答案 sigsetjmp 不会失败 - 它只是将调用者的上下文存储到提供的缓冲区中。 siglongjmp 不返回,因此无法通过返回值指示失败
我试图理解 sigsetjmp() 和 siglongjmp() 函数。手册页指出 sigsetjmp() 保存上下文,siglongjmp() 恢复上下文。我的问题是,它们是否也会处理堆栈指针和程序
出于某种原因,当我从 SIGFPE 的信号处理程序返回时,变量 i 比我预期的要小一个,以便从我的程序中获得正确的结果(遍历对数组中的所有对)我如果我从信号“catch”返回,则必须检查 sigset
为什么有人会选择在 C 中使用 sigsetjmp 而不是 setjmp? 我在一本书上看到在信号相关的代码中使用setjmp有一些缺点,所以实现了sigsetjmp功能。 谁能举个例子解释一下? 提
我正在编写需要使用指向 setjmp/sigsetjmp 的指针的多平台代码。通常这就像做一样简单 #include void * sigsetjmp_p = sigsetjmp; 但是,ISO 和
我是一名优秀的程序员,十分优秀!