[C] Surcharge

Surcharge [C] - C - Programmation

Marsh Posté le 09-01-2011 à 17:59:40    

Bonsoir,
 
Quelqu'un sait comment est implémenté la surcharge de fonction en C?
 

Code :
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. int open(const char *pathname, int flags);
  5. int open(const char *pathname, int flags, mode_t mode);

Reply

Marsh Posté le 09-01-2011 à 17:59:40   

Reply

Marsh Posté le 09-01-2011 à 18:05:05    

Je ne pense pas que cela puisse fonctionner, car la surcharge en C++ vient du fait que le compilateur différencie 2 fonctions non pas par leurs noms, mais leurs noms + les paramètres ( exclu le paramètre de retour ), ce qui n'est pas le cas d'un compilateur C.
 
Après, un compilateur pourrait l'implémenter mais cela ne fait pas partie du standard C à ma connaissance, ceci provoquerait donc l'écriture d'un code non standard et non portable (je vois bien microsoft faire ça :p ).
 

Reply

Marsh Posté le 09-01-2011 à 18:05:52    

Il n'y a pas de surcharge de fonctions en C.  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 09-01-2011 à 18:22:20    

Les fonctions open dont j'ai donné le manpage, implémentent la surcharge.  
 
Il doit y avoir une astuce  [:figti] .

Message cité 1 fois
Message édité par Anonymouse le 09-01-2011 à 18:22:41
Reply

Marsh Posté le 09-01-2011 à 18:38:40    

Anonymouse a écrit :

Les fonctions open dont j'ai donné le manpage, implémentent la surcharge.  
 
Il doit y avoir une astuce  [:figti] .


va_args ?


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 09-01-2011 à 18:38:45    

Il n'y a pas de surcharge en C, ni d'argument par défaut.  Le vrai prototype de open est

Code :
  1. int open(const char*, int, ...);


mais les manpage donnent les deux cas possibles.  Les flags indiquent dans lequel on se trouve.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 09-01-2011 à 18:39:56    

parce que la manpage présente une API logique, et pas la vraie API :D

 
Code :
  1. extern int open (__const char *__file, int __oflag, ...) __nonnull ((1));
  2. #else
  3. # ifdef __REDIRECT
  4. extern int __REDIRECT (open, (__const char *__file, int __oflag, ...), open64)
  5.      __nonnull ((1));
  6. # else
  7. #  define open open64
  8. # endif
  9. #endif
  10. #ifdef __USE_LARGEFILE64
  11. extern int open64 (__const char *__file, int __oflag, ...) __nonnull ((1));
  12. #endif
 

c'est une varargs, comme printf :D

 

edit : [:benou_grilled]


Message édité par kadreg le 09-01-2011 à 18:40:17

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 09-01-2011 à 18:52:01    

Ok merci à tous


Message édité par Anonymouse le 09-01-2011 à 19:49:08
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed