Aujourd'hui j'ai appris qu'on pouvait faire du RAII en C avec cleanup
marche pas en C :
1> error : 'cleanup': identifier not found
1> error : '__attribute__': identifier not found
Testé avec un compilo conforme C.
Tu as manqué la phrase :
if you don’t mind sacrificing portability outside gcc and clang
--> Aujourd'hui tu as appris qu'on pouvait faire du RAII en C non standard de GCC ou Clang avec cleanup.
(et le non standard, c'est moche et peu respectueux de la liberté des gens qui reçoivent votre code de l'utiliser sur le compilateur de son choix, les standards c'est peut-être chiant mais c'est quand même bien pour l'inter-opérabilité, sans parler que vous ne savez pas quel compilo sera le plus utilisé y compris par vous-même sous Linux dans X années)
Je corrigerai bien leur page
"This is probably the best way to fix code like this if you’re not targeting compilers like the Microsoft one."
-->
"This is a quick (but very ugly) way to fix code like this if you’re not targeting compilers not implementing this non standard / non portable C extension."
Un peu trop facile leur attaque gratuite contre Microsoft alors que dans ce cas précis Microsoft respecte le standard C, et ne pas simplement prévenir que c'est complètement non standard et spécifique à leur compilo préféré repris par son concurrent direct.
PS : testé avec GCC 9.3, ça ne compile pas, faut #define autofree __attribute__((cleanup(free))) et il y a quand même un warning + erreur avec valgrind comme si ignoré. Si quelqu'un arrive à ne pas avoir de warning lors de la compilation et avec Valgrind...
[^] # Re: Aujourd'hui j'ai appris
Posté par Zenitram (site web personnel) . En réponse au lien Comprendre la taille de la stack des threads, et comment Alpine Linux diffère des autres systèmes. Évalué à 8.
marche pas en C :
1> error : 'cleanup': identifier not found
1> error : '__attribute__': identifier not found
Testé avec un compilo conforme C.
Tu as manqué la phrase :
if you don’t mind sacrificing portability outside gcc and clang
--> Aujourd'hui tu as appris qu'on pouvait faire du RAII en C non standard de GCC ou Clang avec cleanup.
(et le non standard, c'est moche et peu respectueux de la liberté des gens qui reçoivent votre code de l'utiliser sur le compilateur de son choix, les standards c'est peut-être chiant mais c'est quand même bien pour l'inter-opérabilité, sans parler que vous ne savez pas quel compilo sera le plus utilisé y compris par vous-même sous Linux dans X années)
Je corrigerai bien leur page
"This is probably the best way to fix code like this if you’re not targeting compilers like the Microsoft one."
-->
"This is a quick (but very ugly) way to fix code like this if you’re not targeting compilers not implementing this non standard / non portable C extension."
Un peu trop facile leur attaque gratuite contre Microsoft alors que dans ce cas précis Microsoft respecte le standard C, et ne pas simplement prévenir que c'est complètement non standard et spécifique à leur compilo préféré repris par son concurrent direct.
PS : testé avec GCC 9.3, ça ne compile pas, faut
#define autofree __attribute__((cleanup(free)))et il y a quand même un warning + erreur avec valgrind comme si ignoré. Si quelqu'un arrive à ne pas avoir de warning lors de la compilation et avec Valgrind...