这是一些提供的 (CS50) 代码片段,它在嵌套循环内一遍又一遍地声明相同的 STRUCT“三元组”。为什么这样可以?在我看来,在嵌套循环的范围之上声明 STRUCT“三元组”并在每次迭代中更改值会更有效。
typedef struct
{
BYTE rgbtBlue;
BYTE rgbtGreen;
BYTE rgbtRed;
} __attribute__((__packed__))
RGBTRIPLE;
.
for (int i = 0, biHeight = abs(bi.biHeight); i < biHeight; i++)
{
// iterate over pixels in scanline
for (int j = 0; j < bi.biWidth; j++)
{
// temporary storage
RGBTRIPLE triple;
// read RGB triple from infile
fread(&triple, sizeof(RGBTRIPLE), 1, inptr);
// write RGB triple to outfile
fwrite(&triple, sizeof(RGBTRIPLE), 1, outptr);
}
最佳答案
在大多数情况下,此级别的效率是编译器关心的问题。编译器很可能会为每个 RGBTRIPLE 重用相同的堆栈空间! (虽然它不必。)
将 RGBTRIPLE 放在需要它的最小括号对(作用域)内可以防止您意外地、错误地访问该作用域外的变量,此时变量的内容可能无效。
关于c - 为什么可以在嵌套循环中声明一个 STRUCT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57938555/