我有一个小程序执行零浮点除法,所以我期待SIGFPE.
#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
void signal_handler (int signo) {
if(signo == SIGFPE) {
std::cout << "Caught FPE\n";
}
}
int main (void) {
signal(SIGFPE,(*signal_handler));
double b = 1.0;
double c = 0.0;
double d = b/c;
std::cout << "d = "<< d << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
实际上,我得到了以下输出:
d = inf
Run Code Online (Sandbox Code Playgroud)
gcc版本4.5.2(Ubuntu/Linaro 4.5.2-8ubuntu4)
在这种情况下,我应该怎么做才能抛出SIGFPE?FP操作行为依赖于哪些因素(编译器标志/ CPU类型等)?
谢谢
我写了这段代码:
#include <stdio.h>
int main() {
printf("Works");
int base = 1;
do {
if (base > 1) {
for (int i = 0; i <= base; i++) {
if ((base % i) == 0) {
break;
} else {
printf("%d ", base);
}
}
}
base += 1;
} while (1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它编译完美,但是当我运行它时,终端刚刚关闭,我不知道如何调试它,因为我对用 c 编写程序非常陌生。
编辑:这应该永远生成素数。