由于您计划的原因,准确和缩短代码之间的选择是主观的。在维护方面,我们大多数人更喜欢简短的代码。即使是学习者也更喜欢简短的代码,尽管这与他们必须喜欢的相反。
C 被设计为人类可读的,并且尽可能少地编译。它是程序性的,非常不华丽。编码有利于可读性和反对时间消耗的另一个理由。
您在示例中提供的两种方式都生成完全相同的 ASM 代码(注意-O
)。
.Ltext0:
.globl foobar
foobar:
.LFB13:
.cfi_startproc
0000 B8000000 movl $0, %eax
00
0005 C3 ret
.cfi_endproc
.LFE13:
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
0000 666F6F32 .string "foo2 called"
2063616C
6C656400
.text
.globl foo2
foo2:
.LFB14:
.cfi_startproc
0006 4883EC08 subq $8, %rsp
.cfi_def_cfa_offset 16
000a BF000000 movl $.LC0, %edi
00
000f E8000000 call puts
00
.LVL0:
0014 B8000000 movl $0, %eax
00
0019 4883C408 addq $8, %rsp
.cfi_def_cfa_offset 8
001d C3 ret
.cfi_endproc
.LFE14:
.globl foo
foo:
.LFB15:
.cfi_startproc
001e 4883EC08 subq $8, %rsp
.cfi_def_cfa_offset 16
0022 B8000000 movl $0, %eax
00
0027 E8000000 call foo2
00
.LVL1:
002c B8000000 movl $0, %eax
00
0031 4883C408 addq $8, %rsp
.cfi_def_cfa_offset 8
0035 C3 ret
.cfi_endproc
.LFE15:
.globl main
main:
.LFB16:
.cfi_startproc
0036 4883EC08 subq $8, %rsp
.cfi_def_cfa_offset 16
.LBB8:
.LBB9:
003a B8000000 movl $0, %eax
00
003f E8000000 call foo2
00
.LVL2:
.LBE9:
.LBE8:
0044 B8000000 movl $0, %eax
00
0049 4883C408 addq $8, %rsp
.cfi_def_cfa_offset 8
004d C3 ret
.cfi_endproc
.LFE16:
.Letext0:
..响应您的简约,微不足道的简短方式和简洁方式。
考虑到这一点,我可以自由地说,最好只是正确地应用两者。那就是.. 尽可能简洁明了
/* COMMENTED */