Articles of pré processeur

Erreur de syntaxe lors de l’utilisation de #define lors de l’initialisation d’un tableau et comme arguments d’une fonction dans C?

Utilisation d’une #define lors de l’initialisation d’un tableau #include #define TEST 1; int main(int argc, const char *argv[]) { int array[] = { TEST }; printf(“%d\n”, array[0]); return 0; } le compilateur se plaint: test.c: In function ‘main’: test.c:7: error: expected ‘}’ before ‘;’ token make: *** [test] Error 1 Utiliser un #define comme argument […]

Quand utiliser des macros de type fonction en C

Je lisais du code écrit en C ce soir, et en haut du fichier se trouvait la macro HASH: #define HASH(fp) (((unsigned long)fp)%NHASH) Cela me laissait se demander pourquoi quelqu’un choisirait d’implémenter une fonction de cette manière en utilisant une macro similaire à une fonction au lieu de l’implémenter en tant que fonction C standard […]

# Définir la scope de la bibliothèque?

Disons que j’ai une constante: #define PI 3.14 Disons que j’ai une bibliothèque statique avec plusieurs fichiers d’en-tête et source. Si je déclare cela dans le fichier d’en-tête, sa scope s’appliquera-t-elle à tous les fichiers sources? Ou les fichiers source doivent-ils inclure l’en-tête avec la déclaration de PI ?

offset de compilation

Existe-t-il un moyen de trouver le décalage d’un membre d’une structure au moment de la compilation? Je souhaite créer une constante contenant le décalage d’un membre de la structure. Dans le code suivant, la macro offsetof() fonctionne dans la première instruction printf . Cependant, l’utilisation de la ligne 10 pour déclarer ofs génère l’erreur: “Ne […]

Navigation dans le code compatible avec le préprocesseur dans le projet IDE for C

Contexte Je passe beaucoup de temps à naviguer et à éditer des codes C scientifiques complexes. Ils contiennent généralement des centaines de fonctionnalités optionnelles activées et désactivées avec les directives du préprocesseur. Cela rend presque impossible de dire d’un coup d’œil si le bloc de code actuel est activé ou non dans ma configuration actuelle. […]

ANSI C: définition standard de la taille des chaînes __DATE__ et __TIME__?

Existe-t-il une définition standard de la taille des chaînes __DATE__ et __TIME__ en ANSI C? La motivation derrière cette question est: J’ai deux applications fonctionnant sur deux processeurs différents. Pendant l’exécution, l’application n ° 1 reçoit la date et l’heure (dans le cadre des informations de version) de l’application n ° 2. Bien entendu, l’application […]

Macro pour concaténer deux chaînes en C

J’essaie de définir une macro supposée prendre 2 valeurs de chaîne et les renvoyer concaténées avec un espace entre elles. Il semble que je puisse utiliser n’importe quel caractère que je veux en dehors de l’espace, par exemple: #define conc(str1,str2) #str1 ## #str2 #define space_conc(str1,str2) conc(str1,-) ## #str2 space_conc(idan,oop); space_conc renverrait “idan-oop” Je veux quelque […]

Comportement de __LINE__ dans les fonctions en ligne

J’ai une macro qui passe le numéro de ligne et le nom du fichier à un gestionnaire d’erreurs: #define SYSTEM_FAILURE (error_code, comment) \ System_Failure((error_code), (comment), __LINE__, __FILE__); Comment la __LINE__ sera- __LINE__ elle résolue lorsqu’elle sera utilisée dans une fonction en ligne? file.h: inline int divide(int x, int y) { if (y == 0) { […]

Les définitions de macro vides sont-elles autorisées en C? Comment se comportent-ils?

Supposons la définition de la macro “vide” #define FOO Est-ce la norme C valide? Si oui, qu’est-ce que FOO après cette définition?

Quel est le problème avec le code C suivant?

Dupliquer possible: Confus au sujet de l’expansion des macros C et de l’arithmétique des nombres entiers Une énigme (en C) Le résultat attendu du programme C suivant est d’imprimer les éléments du tableau. Mais quand effectivement couru, il ne le fait pas. #include #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0])) int array[] = {23,34,12,17,204,99,16}; int main() { […]