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. David