在C代码中
printf("%s", message);
Run Code Online (Sandbox Code Playgroud)
我想知道我是否应该使用
fputs(message, stdout);
Run Code Online (Sandbox Code Playgroud)
前面的代码更清晰但速度更慢?或者使用更多内存?我更喜欢更清晰的代码,但当它看起来像浪费时间和内存时更糟糕.
我很想知道编译器检测到这种情况,并且在运行时没有完成必要的格式解析和解释.毕竟,gcc对printf("")这些编译器的抱怨可能会"理解"格式并对其进行预处理.
PS:前者的风格更清晰,写作时更明显format("name=%s\n",unameData.nodename);而不是
fputs(stdout,"name=");fputs(stdout,unameData.nodename);putchar('\n');.这是具有格式的所有目的.
取决于实现,一个或另一个可以更有效.
通过适当的优化标志,体面的编译器应该能够在printf("%s\n", message)没有程序员知识的情况下将效率较低的表单更改为另一个(假设).
$ cat print.c
#include <stdio.h>
int main()
{
printf("%s\n", "Hello world");
return 0;
}
$ gcc -S -O2 print.c
$ cat print.s
.file "print.c"
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "Hello world"
...
movl $.LC0, (%esp)
call puts
xorl %eax, %eax
leave
...
Run Code Online (Sandbox Code Playgroud)
... 表示为简洁而省略的代码