Dans le code source ci-dessous, quelqu'un pourrait expliquer le rationnel (pourquoi est-il bonne pratique de programmation à typedef
la structure _lwm2m_object_t
avec le nouveau nom lwm2m_object_t
? Tout ce qu'il fait est de supprimer le trait de soulignement? Pourquoi un trait de soulignement utilisé dans la première instance?pourquoi utiliser un trait de soulignement pour une structure dans c?
typedef struct _lwm2m_object_t lwm2m_object_t;
typedef uint8_t (*lwm2m_read_callback_t) (lwm2m_uri_t * uriP, char ** bufferP, int * lengthP, lwm2m_object_t * objectP);
typedef uint8_t (*lwm2m_write_callback_t) (lwm2m_uri_t * uriP, char * buffer, int length, lwm2m_object_t * objectP);
typedef uint8_t (*lwm2m_execute_callback_t) (lwm2m_uri_t * uriP, char * buffer, int length, lwm2m_object_t * objectP);
typedef uint8_t (*lwm2m_create_callback_t) (lwm2m_uri_t * uriP, char * buffer, int length, lwm2m_object_t * objectP);
typedef uint8_t (*lwm2m_delete_callback_t) (uint16_t id, lwm2m_object_t * objectP);
typedef void (*lwm2m_close_callback_t) (lwm2m_object_t * objectP);
struct _lwm2m_object_t
{
uint16_t objID;
lwm2m_list_t * instanceList;
lwm2m_read_callback_t readFunc;
lwm2m_write_callback_t writeFunc;
lwm2m_execute_callback_t executeFunc;
lwm2m_create_callback_t createFunc;
lwm2m_delete_callback_t deleteFunc;
lwm2m_close_callback_t closeFunc;
void * userData;
};
Cela supprime le besoin d'utiliser 'struct' partout où le type est utilisé. Le trait de soulignement est pour éviter les conflits de noms entre le nom non typé et le nom typé – Toby
Je ne pense pas que ce soit une bonne idée. A) c'est une violation standard. Tous les identifiants dans les espaces de noms de balises et de balises commençant par un trait de soulignement sont réservés, B) ils inutilement encombrent votre espace de noms global. Inutilement, car vous pouvez utiliser le même nom pour votre balise struct et pour votre typedef ('typedef struct foo foo;') - une convention que C++ a même intégrée dans le langage. – PSkocik
"Tous les identifiants dans la portée de fichier et les espaces de noms de tags commençant par un trait de soulignement sont réservés" - U wot? Pas assez. – Bathsheba