应用程序甚至在尝试除以 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);