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 [email protected] https://lists.sourceforge.net/lists/listinfo/openvpn-devel
