Em dom., 19 de abr. de 2020 às 22:00, David Rowley <dgrowle...@gmail.com> escreveu:
> On Mon, 20 Apr 2020 at 11:24, Ranier Vilela <ranier...@gmail.com> wrote: > > 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. > > I think you'd want to use argc[0][0] == '\0' or *argc[0] == '\0'. > Otherwise you appear just to be checking if the first element in the > argc pointer array is set to NULL, which is certainly not the same as > an empty string. > I guess you're right. x86-64 clang (trunk) -O2 f1: int cmp(const char * name) { return strlen(name) == 0; } cmp: # @cmp xor eax, eax cmp byte ptr [rdi], 0 sete al ret f2: int cmp(const char * name) { return name[0] == '\0'; } cmp: # @cmp xor eax, eax cmp byte ptr [rdi], 0 sete al ret Is the same result in assembly. Well, it doesn't matter to me, I will continue to use str[0] == '\0'. Thanks for take part. regards, Ranier VIlela