在调用退出函数后,对 printf 的调用不会出现在反汇编中

Call to printf doesn't show up in disassembly after a call to exit function

#include <stdio.h>
#include <stdlib.h>
int main()
{
     exit(0);
     printf("%s\n", "Nice");
}

我想知道是否有可能禁用任何不会生成调用 printf 的指令的东西,如果它被放置在退出调用之后。 我在用着 gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4) 编译时没有标志。我试过使用-O0,但反汇编没有任何变化。

   0x000000000040052d <+0>:     push   %rbp
   0x000000000040052e <+1>:     mov    %rsp,%rbp
   0x0000000000400531 <+4>:     mov    [=11=]x0,%edi
   0x0000000000400536 <+9>:     callq  0x400430 <exit@plt>

exit()<stdlib.h> 中定义为永不返回其调用者:

_Noreturn void exit(int status);

编译器利用了这一点,不会为从未到达的语句生成代码。如果您通过 -Wall 以获得更多诊断,您将收到有关此的警告。