On 13/08/2019 23:46, Steffan Karger wrote: > Hi, > > On 13-08-19 23:31, Antonio Quartulli wrote: >> On 13/08/2019 23:26, David Sommerseth wrote: >>> wouldn't it be better to >>> do 'if (rgi6->iface[0])' instead? Since the buffer should be NULL >>> terminated >>> and has to be NULL terminted for strlen() to function anyhow. But the >>> compiled code would be a bit more efficient (even though, this isn't >>> necessarily a performance critical code section). >> >> In my opinion strlen() is more readable for the casual developer >> checking this code. Behind iface[0] we may hide other ambiguous >> assumptions (even though this is not the case here, but we won't >> remember in some months from now). > > Antionio's answer is of course the real reason to use strlen(), but you > nerd-sniped me by saying "compiled code would be a bit more efficient". > As you said, that wouldn't matter here, but still: compilers nowadays do > optimize calls to strlen, memset, memcpy, etc. > > The following code > > #include <string.h> > > int test(const char *buf) { > return (strlen(buf) > 0); > } > > for example compiles with -O3 on my GCC 8.3 to > > 0000000000000000 <test>: > 0: 31 c0 xor %eax,%eax > 2: 80 3f 00 cmpb $0x0,(%rdi) > 5: 0f 95 c0 setne %al > 8: c3 retq > > which indeed just compares the first byte of the buffer against zero. > > So, unless there are important performance constraints, let's optimize > code for readability, rather than performance :)
Cool! Thanks! I didn't run such a check, as I really didn't expect the compiler to be _that_ smart ... but I agree with you both, and especially when the end result is optimized for both readability *and* performance ;-) -- kind regards, David Sommerseth OpenVPN Inc
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel