下一步中初始化声明和初始化之间的区别是什么?

时间:2013-07-23 15:42:56

标签: c initialization

我需要初始化变量并测试其值。 最有效的方法是什么?

char *key = get_key(item);
if (key != NULL) { // do something }

OR

char *key; 
if (key = get_key(item)) { // do something }

副作用是否会产生某些优势? 谢谢!

6 个答案:

答案 0 :(得分:3)

啊,好的''最有效的方式'...... 不。不。忘记效率。

即使存在差异,这很可能是过早的优化。但在这种特殊情况下,唯一的区别在于术语(从技术上讲,你的第二个例子不是初始化,而是赋值表达式),你的编译器几乎肯定会从两段代码中生成完全相同的汇编程序。

答案 1 :(得分:2)

在您的简单程序中,要问的问题是:您是否会重复使用该作业?分配的成本将是一个内存存储。如果没有使用,那么我只是不添加商店的成本。无论如何,编译器可能正在这样做,但帮助它并没有伤害:-)

如果您打算重用密钥,那么我个人不希望在if()中不在声明步骤中进行,以提高可读性。所以,我会采取第二种方式,但保持分配不在if()。

答案 2 :(得分:0)

对于您的具体示例,可能没有区别。构建两者并比较生成的代码以进行检查。

答案 3 :(得分:0)

独立声明(char *key;)根本不产生任何代码,因此很可能两个代码片段都会产生相同的生成代码,但可以说第一个片段更容易阅读。

答案 4 :(得分:0)

问问自己效率是否重要。 (回答:极不可能)

寻求可读性。考虑到这一点,在if条件中做一个赋值是有问题的,所以我更倾向于第一个版本。

答案 5 :(得分:0)

两个代码段在行为上都是等效的。

我个人不喜欢第二个,因为if语句的控制表达式中的副作用往往会使代码的可读性降低,特别是当使用赋值进行副作用时。这就是为什么像Python这样的语言禁止在if语句的控制表达式中使用赋值运算符的原因之一(出错的倾向)。

这就是说,我也不喜欢初始化时的副作用(第一个代码片段中声明中的函数调用)。