函数作为参数传递是否比传变量高效?终端打印代码哪种是最佳实践?
将函数作为参数传递是否更高效?两段终端打印代码的最佳实践分析
首先明确:两种写法在效率上没有任何区别。现代C编译器(比如GCC、Clang)会自动进行优化,如果name变量仅在printf中使用一次,编译器会直接消除这个临时变量,生成的机器码和直接传递函数返回值的版本完全一致。不存在“函数作为参数传递更高效”的说法。
关于命名空间:第二段写法确实不会在当前作用域创建额外的name变量,避免了不必要的命名占用,但这只是代码整洁性的细节,并非所谓“正确写法”的核心原因。
接下来分析哪种是最佳实践,核心取决于实际场景:
- 如果你后续还需要复用用户输入的
name值(比如做其他逻辑处理、存储到数组等),那第一段写法是必须的,因为需要保存get_string的返回值; - 如果
name只用这一次,两段写法都合法,但第二段更简洁。不过要注意可读性:如果get_string的参数很长,或者函数本身逻辑复杂,直接嵌套进printf会让代码显得拥挤,这时候分开写(第一段)的可读性更好; - 额外提醒:如果
get_string存在返回NULL的可能(比如输入失败、内存分配出错),两段写法都需要考虑错误处理——第一段可以方便地检查name是否为NULL,第二段直接传值的话,printf遇到NULL可能会打印(null)或者触发未定义行为,这和写法本身无关,属于错误处理的范畴。
简单总结:没有绝对的“正确写法”,选择哪种取决于你是否需要复用返回值,以及代码可读性的需求。面试中有人认为第二段正确,大多是看重它的简洁性,而非效率或命名空间的核心优势。
两段代码的规范格式:
第一段代码:
string name = get_string("What's your name? "); printf("Hello, %s\n", name);
第二段代码:
printf("Hello, %s\n", get_string("What's your name? "));
内容的提问来源于stack exchange,提问作者AdultStoreVHS
相关产品推荐
相关产品推荐

