[Dnsmasq-discuss] [PATCH] Remove NULL check for intname.
Roy Marples
roy at marples.name
Fri Oct 6 11:04:29 BST 2017
On 05/10/2017 23:14, Kevin Lyda wrote:
> That's not actually correct in practice.
And top posting is?
> If you'd like to see that I'm
> correct take the following two programs:
>
> foo.c:
> #include <string.h>
> #include <stdio.h>
>
> int main(int argc, char *argv[]) {
> if (strlen(argv[0]) == 0) {
> printf("Command empty");
> } else {
> printf("Command not empty");
> }
> }
> bar.c:
> #include <string.h>
> #include <stdio.h>
>
> int main(int argc, char *argv[]) {
> if (*argv[0] == '\0') {
> printf("Command empty");
> } else {
> printf("Command not empty");
> }
> }
>
> Next compile them to assembly like so:
>
> for f in {foo,bar}.c; do gcc -O2 -S $f; done
Interesting that you assume I use bash and gcc.
This is more portable.
for f in foo bar; do cc -S $f.c; done
> And then compare them:
>
> diff {foo,bar}.s
>
> They should be the same (possibly different by a ".file" line). And if
> you inspect the resulting code, there won't be a call to strlen or to
> any function at all (well, except printf).
netbsd$ diff foo.s bar.s
2c2
< .file "foo.c"
---
> .file "bar.c"
22,24c22,24
< movq (%rsi), %rdi
< callq strlen
< cmpq $0, %rax
---
> movq (%rsi), %rsi
> movsbl (%rsi), %edi
> cmpl $0, %edi
Now, if I do apply -O2 then clang (my system compiler) does indeed
optimise it away.
What is worring is that even with -O0 or no -O gcc *always* optimises it
away. What if I want to call the function to be called regardless?
> The reason is that gcc, like most C compilers since the 90s, optimises a
> number of common functions in the standard C library. Which means that
> developers can stick with writing code that will be well-optimised *and*
> highly readable.
Spoken like a man who has never dealt with compiler issues!
if (strlen(foo) != 0)
if the function to calculate the length of the string is not zero
if (*foo != '\0')
if the first character of the string is not NUL
I'm having a hard time beliving that the former is more readable AND
just as performant.
It has more text for the brain to digest and a man page to read per
platform.
Or are you going to assume that gcc is the only compiler ever used anywhere?
Roy
More information about the Dnsmasq-discuss
mailing list