Caster ou pas le retour de malloc

Version imprimable

Voir 40 message(s) de cette discussion en une page
Deux fois la même raison -- si on n'a pas le prototype, on peut avoir des
problèmes. La volonté de vouloir détecter ce problème est louable, la
méthode douteuse et peu universelle.

Citation:

Envoyé par souviron34 Voir le message
bah plein de cas, dès que tu as par exemple une
structure d'un certain type, même en la passant comme pointeur, et que tu
passes une structure équivalente, mais d'un autre nom que celui utilisé
dans la déclaration du prototype...

Formellement indéfini...

Citation:

Ou une variable short que tu veux passer à une fonction attendant un
int, etc etc....
Cela n'a jamais été nécessaire (sans prototype, il y a de toute manière
promotion, avec prototype, la conversion est faite).

Citation:

Envoyé par souviron34 Voir le message
peut-être que cela marche pour short <-> int (je n'en suis pas certain cependant, car je travaille sur des codes où c'est casté et si on enlève le cast le compilo gueule), mais en tous cas avec les exemples donnés plus haut, dès qu'il y a structure ou autre, il faut caster...

Tu peux donner l'exemple exact après avoir vérifier que ça gueule? Je ne
vois aucune raison.

Citation:

Envoyé par Médinoc Voir le message
Ou plutôt, on met l'accent sur le fait que ce soient
deux langages différents. Et ainsi, on peut éviter que quelqu'un fasse un
bête copier-coller du code et tente de le compiler sur un compilateur C++
alors qu'il n'est pas fait pour ça...

La probabilité qu'il y a un bug dans le code ou le compilateur est
supérieur à celle qu'un code C qu'en compilateur C++ compile sans problème
a un comportement différent compilé par le compilateur C++ et par le
compilateur C.
  • 06/03/2008, 23h29
    Vincent Rogier
    Pour ma part, au sujet du cast de la valeur de retour de malloc:

    * l'argument "inutile" est cohérent, même si la remarque Jean-Marc.Bourguet sur l'effet 'documentation' est valable

    * l'argument "dangeureux" en cas d'oubli d'inclusion de sdtlib.h n'est pas valable. Un compilo bien réglé ne peux laisser passer ca.

    J'ai du mal à imaginer qu'un développeur sérieux puisse livrer ou mettre en prod des applis compilées avec un compilo si mal réglé.

    Je pense que fondamentalement, la seule raison qui fasse déconseiller le cast de la valeur de retour de malloc en C est de rendre le source incompilable en C++, hormis le fait que le cast est intrinsèquement inutile !
  • 07/03/2008, 00h10
    Garulfo
    Citation:

    Envoyé par souviron34 Voir le message
    Donc je refute ces arguments ;)

    Tu veux dire que jamais personne autour de toi ne fait d'erreurs dues à la fatigue ou à l'inattention temporaire ? Je t'assure que tu es statistiquement une exception très rare alors. La majorité des erreurs sont dues à des inattentions. Et ils sont en général vite corrigé grâce à la compilation. Rien de grave donc.
  • 07/03/2008, 08h02
    Thierry Chappuis
    L'argument de l'effet documentaire du cast est le seul qui me parle (un peu).

    Thierry
  • 07/03/2008, 12h34
    corrector
    Citation:

    Envoyé par Médinoc Voir le message
    Non, l'autre argument est que c'est inutile, et un troisième est que ça a l'avantage de ne pas compiler en C++.

    Tu parles sérieusement?
  • 07/03/2008, 12h52
    Médinoc
    Oui.
    Si je veux qu'un code puisse compiler aussi bien en C qu'en C++, je le conçois exprès pour ça et j'utilise pas mal de macros (notamment pour les casts).
  • 07/03/2008, 13h43
    Médinoc
    Dans ce cas, je ne comprends pas la question. Peux-tu l'expliciter ?
  • 07/03/2008, 13h51
    Jean-Marc.Bourguet
    Citation:

    Envoyé par Médinoc Voir le message
    Dans ce cas, je ne comprends pas la question. Peux-tu l'expliciter ?

    Pourquoi vouloir volontairement que quelque chose ne compile pas en C++?

    (Sur le sujet, je ne caste pas le resultat de malloc en C parce que c'est idiomatique, mais c'est la seule raison et je continue a trouver que la convertion implicite de void* en T* est une horreur.)
  • 07/03/2008, 13h53
    Médinoc
    OK, je comprends la question maintenant. Eh bien, c'est partiellement par idéologie (C et C++ sont des langages différents), et partiellement par paresse (si je décide dès le début que mon prog ne compilera pas en C++, je n'ai pas à me soucier des différences plus subtiles).

    Edit: Et aussi parce que je n'aime pas les casts C-Style et j'essaie de les éviter quand c'est possible. D'où mon emploi, quand je veux du compatible, de macros comme void_cast(type,p), qui donne juste p en C et un static_cast<> en C++...
  • 07/03/2008, 14h13
    souviron34
    oui je dois dire pas mal d'accord avec Jean-Marc et Vicenzo....

    Et je réitère : nous sommes en C. Que viennent faire des considérations sur C++ ici ???
  • Voir 40 message(s) de cette discussion en une page
    Page 2 sur 5 PremièrePremière 12345 DernièreDernière