Em dom., 19 de abr. de 2020 às 19:00, David Rowley <dgrowle...@gmail.com> escreveu:
> On Mon, 20 Apr 2020 at 09:38, Tom Lane <t...@sss.pgh.pa.us> wrote: > > The cases where Ranier proposes to replace strlen(foo) == 0 > > with a test on foo[0] do seem like wins, though. Asking for > > the full string length to be computed is more computation than > > necessary, and it's less clear that the compiler could be > > expected to save you from that. Anyway there's a coding style > > proposition that we should be doing this consistently, and > > certainly lots of places do do this without using strlen(). > > Looking at https://godbolt.org/z/6XsjbA it seems like GCC is pretty > good at getting rid of the strlen call even at -O0. It takes -O1 for > clang to use it and -O2 for icc. > I tried: https://godbolt.org with: -O2: f1: int main (int argv, char **argc) { return strlen(argc[0]) == 0; } f1: Assembly main: # @main mov rcx, qword ptr [rsi] xor eax, eax cmp byte ptr [rcx], 0 sete al ret f2: int main (int argv, char **argc) { return argc[0] == '\0'; } f2: Assembly main: # @main xor eax, eax cmp qword ptr [rsi], 0 sete al ret For me clearly str [0] == '\ 0', wins. regards, Ranier Vilela