哪些是可执行语句?

哪些是可执行语句?

编译器将C语言转换成机器代码,CPU可以执行这些代码。通常很容易看出哪些字节的机器代码对应于C代码中的哪些语句。调试器在显示C代码如何运行时使用此对应关系。

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

CPU不会花费任何时间来“运行”声明(但编译器确实会花时间检查它)可视化调试器将在一步一步地运行程序时“跳过”声明。您可以在在线编译器资源管理器中看到这一点,它用于C++,但它与C非常接近。它以不同的颜色绘制每一行代码,以可视化哪一行生成哪一行机器代码。以下是一个例子:

输入C/C++代码

代码语言:javascript运行复制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输出程序集代码(表示机器代码)

代码语言:javascript运行复制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您可以看到用白色(声明)绘制的“不生成代码”和“非可执行语句”的行。

“不可执行”的想法不是一条硬性规则,只是一条准则。在某些情况下,声明是“可执行的”:

代码语言:javascript运行复制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)

相关推荐

敢死队3 普通话版

敢死队3 普通话版

08-10 👁 9232
表示心情的词语(精选500个)
qq飞车变形销魂是高端a吗?一文解答!