C'est bon avec le [] normalement. Quel compilateur utilises-tu pour que ça ne compile pas? Ces exemples sont testés avec GCC, évidemment.
Sinon, il y a toujours la bonne vieille méthode:
if (!strcmp("-h", cur_arg) || !strcmp("--help", cur_arg)) {
print_help();
} else if ...
utilisée dans à peu près tous les composants de TIGCC (sauf GCC/Binutils).

(D'ailleurs, j'ai converti certains de
getopt à ça parce que c'est plus portable, sans devoir copier-coller le code de
getopt partout où ce n'est pas dans la libc système.)