Em dom., 19 de abr. de 2020 às 22:00, David Rowley <dgrowleyml@gmail.com> escreveu:
On Mon, 20 Apr 2020 at 11:24, Ranier Vilela <ranier.vf@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.