J'ai un programme est-il possible d'imprimer le nom de la définition par sa valeur? Comme ceci: p>
8 Réponses :
Non, ce n'est pas possible. Qu'est-ce que cette impression?
un peu ... ou: p>
Pourquoi ne pas choisir d'utiliser une énumération à la place?
enum errors {FILE_NOT_FOUND = -2, FILE_INVALID = -3, INTERNAL_ERROR = -4}; FILE *fp = fopen("file.txt", "r"); if(fp == NULL) { printf("Error\n"); exit(FILE_NOT_FOUND); }
En bref, non. Le moyen le plus simple de faire ce serait quelque chose comme (veuillez noter: cela suppose que vous ne pouvez jamais avoir une erreur attribuée à zéro / null): aime! P> En outre, si vous souhaitez économiser en taper encore plus, vous pouvez utiliser une macro de préprocesseur pour le rendre même nitre: P> #define NEW_ERROR_TYPE(ERR) {ERR, #ERR}
const errorType[] = {
NEW_ERROR_TYPE(FILE_NOT_FOUND),
NEW_ERROR_TYPE(FILE_INVALID),
NEW_ERROR_TYPE(INTERNAL_ERROR),
NEW_ERROR_TYPE(NULL)
};
pas automatiquement. Le nom perd pendant la compilation et seul le nombre constant reste dans le code.
Mais vous pouvez construire quelque chose comme ceci: p> et l'accédez à l'aide de la valeur absolue de la valeur définie comme index. p> p>
Utilisez des initialisateurs désignés de C99 pour cela, mais un peu de soins est nécessaire si vos codes d'erreur sont négatifs.
première une version pour valeurs positive: p>
#define CODE(C) [C] = #C static char const*const codeArray[] = { CODE(EONE), CODE(ETWO), CODE(ETHREE), }; enum { maxCode = (sizeof codeArray/ sizeof codeArray[0]) };
C'est comme ça que je le fais dans c:
MAINTENANT, vous pouvez utiliser la macro de commutation déclarée où que ce soit comme celui-ci: p>
Vous pouvez faire quelque chose comme ça.
J'aime mieux cette version car contrairement aux solutions de tableau, il vous donne une erreur de compilation si vous avez des codes d'erreur ambigu / en double.
Je pense que non, il est possible de faire quelque chose comme dans C. Peut-être dans une langue avec OOP, comme C # et des reflets.
C Préprocesseur remplace les noms. Vous avez besoin de réflexions. Vous pouvez utiliser des réflexions CERN root.cern.ch/how/how-use-reflex a> Stackoverflow.com/Questtions/359237/ ...