c++ - 不理解一些编程模式

标签 c++ c debugging variables optimization

当我阅读经验丰富的程序员代码时,我意识到一些我不会考虑优化代码的模式。我一直在 Google 上搜索此内容,但没有找到关于该主题的讨论。

在程序开头声明所有变量的原因是什么?例如,为什么有人使用:

GtkWidget *window;

gtk_init(NULL, NULL);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

而不是

gtk_init(NULL, NULL);

GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

或者,例如,为什么要声明一个变量 i对于像这样的循环

int i;
char *a;

(code)

for(i = 0; i < n; i++)

而不是声明 i就在 for 循环之上?

char *a;

(code)

int i;
for(i = 0; i < n; i++)

我认为这样会更容易阅读。这不就是放弃内存吗?因为直到for的时候被调用时,内存中有4个字节未使用。

我不记得我在其他代码中看到的其他模式,但我经常发现这样的事情,我想知道为什么会这样;特别是如果它们没有优化(我猜)。我问过一些人为什么要做这样的事情,但他们要么告诉我他们是这样被教导的,要么他们感到被冒犯,因为我不应该问这个问题。

我真的很想知道为什么程序员要这样构造他们的代码,以便理解和改进我的编码。 如果您对如何构建代码有任何建议或有关良好编程行为的提示,请告诉我。

最佳答案

Isn't that just giving away memory? Because until the time the for is called, there are 4 bytes in memory which are not used.

我不这么认为。在我工作过的常见平台(Linux 和 Windows)中,无论您是在函数顶部声明变量还是在执行过程中声明变量,堆栈帧的大小都是相同的。

在函数顶部声明变量会产生不利影响的唯一情况是对象的构造成本很高。

在大多数情况下,是在函数顶部声明它们还是根据需要声明它们是开发团队的政策决定。

关于c++ - 不理解一些编程模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34880946/

相关文章:

python - 如何修复错误 : command 'x86_64-linux-gnu-gcc' failed with exit status 1

c - ISC-DHCP,在配置脚本中定义新 token

c - 定义一个宏来交换符号

c++ - 如何在 gdb 中列出类方法?

c++ - gcc 6.1 std::result_of 编译错误

c++ - Eclipse CDT 基于文件构建/运行

java - 生产JVM的安全调试

c - 在 Linux 上分配期间如何记录堆栈?

c++ - 我需要帮助来理解如何找到代码段的 Big-Oh

c++ - 将 OpenMP 支持添加到使用 Visual Studio 2010 从 C 文件编译的 mex 文件