2010-10-28 2 views
2
#include <stdio.h> 

enum bool 
{ 
    true, false 
}; 

typedef bool 
(*compare_fun) (int, int); 

Je reçois une erreur lorsque j'entre le code ci-dessus. Comment faire un pointeur de fonction qui doit retourner un booléen?Comment renvoyer une énumération dans un typedef de pointeur de fonction?

+4

Etes-vous sûr que vous voulez 'vrai, false' dans cet ordre? Vous obtiendriez 'true = 0, false = 1' qui n'est vraiment pas standard. – Benoit

+1

Une raison pour laquelle vous ne pouvez pas utiliser ['stdbool.h'] (http://en.wikipedia.org/wiki/Stdbool.h), qui fait partie de la norme C (C99)? –

+0

Ne jamais déclarer votre propre type booléen, cela provoque des problèmes. Soit utiliser ce que C99 vous donne, à savoir '_Bool' (et' bool', 'true' et' false' de 'stdbool.h' comme le mentionne Matthieu) ou utiliser l'ancienne version et retourner' int'. –

Répondre

3

il devrait être typedef enum bool (*compare_fun)(int, int); :)

Assurez-vous également que votre mise en œuvre n'a pas prédéfini booltrue et false

Notez que dans C++ lorsque vous définissez un ENUM, de classe ou struct, par exemple avec le nom A , alors vous pouvez déclarer une variable de type a comme

A var; 

ou

class A var; //or struct A var; or enum A var; 

en C, seule la seconde syntaxe est valide. C'est pourquoi ils font généralement un typedef. comme celui-ci

typedef enum {true, false} bool; 

dans ce cas, vous pouvez utiliser votre syntaxe d'origine:

typedef bool (*p) (int, int); 

HTH.

1

Qu'en est-:

typedef enum 
{ 
    true, false 
} bool; 

bool 
(*compare_fun) (int, int); 
+0

Pourquoi typedef l'enum? il a déjà un type. –

+0

@Blank Xavier: Par ce raisonnement, vous n'utilisez jamais 'typedef' n'importe où. 'typedef' crée toujours un alias à un type * existant *. – jamesdlin

+0

True; il y a plus que ça. Le problème est que même lorsque typedefed, * vous devez toujours connaître le type sous-jacent pour l'utiliser *. Donc, la typographie agit et agit uniquement pour rendre la lecture du code plus difficile, car vous devez rechercher et mémoriser le type réel pendant que vous lisez. –

Questions connexes