【发布时间】:2017-10-05 10:04:50
【问题描述】:
只是出于好奇的问题。在 C 中,我们可以直接初始化值,也可以在定义变量后赋值。喜欢
char* pStr = NULL;
或
char* pStr;
pStr = NULL;
在功能方面它们是相似的,但编译后有什么不同。后期或现代编译器是否需要额外的指令周期以进行优化。
N.B:我正在审查一个旧代码库,其中第二种情况被广泛使用。这就是为什么我很好奇,如果我可以通过更改所有地方的代码来获得真正的改变。
【问题讨论】:
-
1.) 没有 C/C++ 语言!您显示的代码发生在两种语言中都有效。 2.) 它们不“在各个方面都相似”。第一个是初始化,第二个是赋值。使用局部变量执行此操作并添加
static存储类修饰符以查看差异。 -
有一个很棒的工具可以帮助回答这些问题。看看编译器在这里为两者输出了什么:godbolt.org
-
您在错误的网站上。您要查找的站点是 godbolt,而不是 stackoverflow。
-
嗯,这里重要的是“定义期间的赋值”不存在。这是初始化,它确实是完全不同的东西。我已经举了一个例子,你可以观察到差异。另一种是尝试分配给一个数组——这是不可能的,尽管你当然可以初始化它。
-
“我正在审查一个旧的代码库......如果我可以通过更改所有地方的代码来获得真正的改变。” -->即使有差异,这肯定是一个微优化 - 一个微小的差异。鉴于它的“旧代码库”可能运行良好,由于错误编辑和代码审查成本等而注入一些功能错误的风险是否值得这个小小的改进?也许是this?
标签: c gcc compiler-optimization