哪些是可执行语句?

哪些是可执行语句?

编译器将C语言转换为机器码,CPU可以执行该代码。通常很容易看出哪些机器码字节对应于C代码中的哪些语句。调试器使用这种对应关系来展示您的C代码运行方式。

所以,“声明不是可执行语句”的意思是没有与声明相对应的机器码。这也意味着:

CPU不会花费任何时间来“运行”声明(但编译器确实需要花费时间来检查它)

在逐步运行程序时,可视化调试器将跳过声明

您可以在在线编译器资源管理器中看到这一点,它是针对C++实现的,但对于C来说也足够接近。它会为每行代码着不同的颜色,以可视化哪些行生成了哪些机器代码。以下是其中一个示例:

输入C/C++代码

int square(int num) // painted in white

{ // painted in teal

int result; // painted in white

result = num * num; // painted in yellow

return result; // painted in gray

} // painted in red

输出汇编代码(代表机器码)

square(int):

push rbp // painted in green

mov rbp, rsp // painted in green

mov DWORD PTR [rbp-20], edi // painted in green

mov eax, DWORD PTR [rbp-20] // painted in yellow

imul eax, DWORD PTR [rbp-20] // painted in yellow

mov DWORD PTR [rbp-4], eax // painted in yellow

mov eax, DWORD PTR [rbp-4] // painted in gray

pop rbp // painted in red

ret // painted in red

你可以看到,用白色绘制的行(声明)“不生成代码”,并且“不是可执行语句”。

“不可执行”的概念并非硬性规定,而只是一项指导方针。以下情况下声明是“可执行”的:

int x = 0; // a trivial calculation, but it will appear in machine code

int y = x * (x + 1); // a non-trivial calculation

int a[rand() % 10 + 1]; // possible without initialization too (suggested by by user AnT)

相关推荐