打印不以新行结尾的非格式化字符串的正确方法是什么?

问题描述 投票:0回答:1
printf("foo: "); 

fputs("foo: ", stdout);

正如标题中提到的,该字符串没有格式化,也没有以新行结尾(因此没有 put)。我不确定开销和优化,那么这种情况下的经验法则是什么?

c printf stdout fputs
1个回答
0
投票

如标题所述,字符串没有格式化,不 以新行结束(因此没有 put)。我不确定管理费用和 优化,那么这种情况的经验法则是什么?

  • printf
    是一个比
    fputs
    复杂得多的函数。但通常情况下,使用 I/O 功能时,处理器时间并不是主要瓶颈。

但是如果您使用

fprintf
而不是
printf
,大多数现代编译器会将您的
fprintf
优化为
fwrite

void foo(void)
{
    fprintf(stdout, "Hello World");
}

void bar(void)
{
    printf("Hello World");
}

void zoo(void)
{
    fputs("Hello World ", stdout);
}

以及生成的代码:

.LC0:
        .string "Hello World"
foo:
        mov     edx, 11
        mov     esi, 1
        mov     edi, OFFSET FLAT:.LC0
        mov     rcx, QWORD PTR stdout[rip]
        jmp     fwrite
bar:
        mov     edi, OFFSET FLAT:.LC0
        xor     eax, eax
        jmp     printf
.LC1:
        .string "Hello World "
zoo:
        mov     edx, 12
        mov     esi, 1
        mov     edi, OFFSET FLAT:.LC1
        mov     rcx, QWORD PTR stdout[rip]
        jmp     fwrite

https://godbolt.org/z/Y966crf7T

© www.soinside.com 2019 - 2024. All rights reserved.