Ces problèmes sont bien connus et ont déjà été résolus dans C++11 par l’ajout de nullptr et du type nullptr_t. Ces changements ont été reportés dans la spécification du C par la note N3042.
Pour développer un peu.
En C NULL est généralement définit comme ((void *)0)
En C++, comme 0.
(mais ça reste implementation define dans les 2 cas)
La ou ça pose problème, c'est sur les function variadic qui prenne un pointeur qui peuvent/doives étre NULL, comme execl, qui a besoins d'un NULL a la fin.
exemple:
execl("./bin", "arg", NULL); // call bin with arg as argument
qui était généralement un bug en C++, car NULL étant 0, c'est un int (4 byte en 64bits) convertie en pointeur (8 byte en 64bits).
En C, pas un bug soue glibc, ni musl, mais ça reste implementation define.
# nullptr
Posté par uso (site web personnel) . En réponse à la dépêche Nouveautés du langage C dans sa prochaine version C23. Évalué à 3. Dernière modification le 18 janvier 2023 à 10:31.
Pour développer un peu.
En C NULL est généralement définit comme ((void *)0)
En C++, comme 0.
(mais ça reste implementation define dans les 2 cas)
La ou ça pose problème, c'est sur les function variadic qui prenne un pointeur qui peuvent/doives étre NULL, comme execl, qui a besoins d'un NULL a la fin.
exemple:
qui était généralement un bug en C++, car NULL étant 0, c'est un int (4 byte en 64bits) convertie en pointeur (8 byte en 64bits).
En C, pas un bug soue glibc, ni musl, mais ça reste implementation define.
plus d'info ici: https://ewontfix.com/11/