C 哪个printf()会更快,为什么?

C 哪个printf()会更快,为什么?,c,C,了解到这一点 printf("%*s", 10, ""); 与 printf("%10s", ""); 以下哪一个更快、更高效、更友好 printf("%*s", 10, ""); 这将打印10个空格 printf("%10s", 10, ""); 这是不正确的;你的意思肯定是: printf("%10s", ""); 它还将打印10个空格 printf("%10s", 10, ""); 老实说,我不知道哪一个更快,这可能取决于特定的printf实现。第一个版本必须处理一个附加参数。

了解到这一点

printf("%*s", 10, "");

printf("%10s", "");
以下哪一个更快、更高效、更友好

printf("%*s", 10, "");
这将打印10个空格

printf("%10s", 10, "");
这是不正确的;你的意思肯定是:

printf("%10s", "");
它还将打印10个空格

printf("%10s", 10, "");
老实说,我不知道哪一个更快,这可能取决于特定的
printf
实现。第一个版本必须处理一个附加参数。在第二种情况下,
printf
被赋予一个
int
值,它不必从字符序列
'1'
'0'
中解析该值

但我有理由相信,与将这10个字节的数据写入输出设备的成本相比,性能上的任何差异都可能微不足道,无论是终端窗口(将所选字体中表示空格字符的每个像素呈现在显示器上)还是磁盘上的文件(等待读写磁头移动到位,等待盘片旋转到您想要写入的位置,尽管大部分操作可能是并行完成的),或者等待网络连接(您知道了)

在某些情况下,性能差异非常重要。如果可以调用一次并存储结果,则不要在循环的每次迭代中调用
strlen()
。如果可以使用快速排序,则不要对大型数组使用Bubblesort,或者只调用
qsort()
,这将在其生命周期的一英寸内进行优化

这不是其中之一

相反,请写最清楚表达您意图的内容。如果我知道我想要的正好是10个空格,我可能会写
printf(“%10s”,即“);
;如果在运行时确定了空格的数量,我可能会写
printf(“%*s”,n)”;

如果您编写的代码更简单,那么您将有更好的机会在第一次正确编写代码;想象一下,在修复和重新编译程序时,您将使用多少CPU周期


至于哪一个更“编译器友好”,我不确定你的意思。如果你给它工作,编译器不会生气。

哪一个更快取决于库的实现细节。
“%*s”
variant从堆栈中提取了一个额外的参数……我希望差异是微乎其微的,特别是与终端输出的间接成本相比


如果您需要输出宽度可变,请使用%*s“。如果您不需要,请使用更简单的
“%10s”
,它(IMHO)更清晰。

您始终可以通过编码检查结果

#include<stdio.h>
#include<time.h>

using namespace std;

int main()
{
    double cl = clock();
   for(int i=0;i<100000;i++){
       printf("%*s", 10, "");//3.814
   }
   cl = clock() - cl;
   fprintf( stderr, "%lf\n", cl / CLOCKS_PER_SEC );

 //printf("%10s", "");//3.617
    return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
双cl=时钟();

对于(int i=0;我认为这一性能真的很重要?当宽度不是常数时,第一个更灵活。第二个我想你是指
printf(“%10s”);