应用程序甚至在尝试除以 0 之前就以代码 -8 退出?
Application exit with code -8 before even tries to divide by 0?
我有这样的代码:
#include <stdio.h>
#include <stdint.h>
int main() {
uint8_t result = 0;
uint8_t a = 0;
printf("Trying to divide by %d...\n", a);
result = (1/a != 0);
printf("%d\n", result);
return 0;
}
我已经在在线编译器中试过这个:https://www.mycompiler.io/new/c
这是结果:
[Execution complete with exit code -8]
我希望打印出“Trying to divide by 0...”,然后应用程序应该退出。
但是应用程序在打印任何内容之前就退出了。
这是正常的 C 行为还是在线编译器的一些故障?
我可以在这里看到两种可能的解释
首先,重要的是要知道未定义的行为可以时光倒流。无法保证程序 运行 在出现问题的那一行之前都能正常运行。这可能会发生,因为编译器可能认为像这样重新排序会更好:
uint8_t a = 0;
uint8_t result = (1/a != 0);
printf("Trying to divide by %d...\n", a);
允许编译器这样做,因为它允许假设永远不会被零除。
其次,可能需要刷新输出。每当您想在执行其他操作之前确保打印输出在屏幕上可见时,请使用 fflush(stdout)
。如果您这样做可能会有所不同:
printf("Trying to divide by %d...\n", a);
fflush(stdout);
result = (1/a != 0);
我有这样的代码:
#include <stdio.h>
#include <stdint.h>
int main() {
uint8_t result = 0;
uint8_t a = 0;
printf("Trying to divide by %d...\n", a);
result = (1/a != 0);
printf("%d\n", result);
return 0;
}
我已经在在线编译器中试过这个:https://www.mycompiler.io/new/c
这是结果:
[Execution complete with exit code -8]
我希望打印出“Trying to divide by 0...”,然后应用程序应该退出。
但是应用程序在打印任何内容之前就退出了。
这是正常的 C 行为还是在线编译器的一些故障?
我可以在这里看到两种可能的解释
首先,重要的是要知道未定义的行为可以时光倒流。无法保证程序 运行 在出现问题的那一行之前都能正常运行。这可能会发生,因为编译器可能认为像这样重新排序会更好:
uint8_t a = 0;
uint8_t result = (1/a != 0);
printf("Trying to divide by %d...\n", a);
允许编译器这样做,因为它允许假设永远不会被零除。
其次,可能需要刷新输出。每当您想在执行其他操作之前确保打印输出在屏幕上可见时,请使用 fflush(stdout)
。如果您这样做可能会有所不同:
printf("Trying to divide by %d...\n", a);
fflush(stdout);
result = (1/a != 0);