Nous savons que les fonctions peuvent être définies à l'aide de paramètres de longueur variable en langage C. Pour cela, nous devons utiliser des ellipses (…). De même, dans les macros, nous pouvons également utiliser des paramètres de longueur variable. Ici aussi, nous devons inclure les ellipses. '__VA_ARGS__' est utilisé pour gérer les arguments de longueur variable. L'opérateur de concaténation '##' est utilisé pour concaténer des paramètres variadiques.
Dans cet exemple, la macro acceptera des arguments de longueur variable, tout comme les fonctions printf() ou scanf(). Dans cette macro, nous imprimerons le nom du fichier, le numéro de ligne et le message d'erreur. Le premier paramètre est pr. Il est utilisé pour déterminer la priorité, c'est-à-dire s'il s'agit d'une chaîne de message normale ou d'un message d'erreur.
#include <stdio.h> #define INFO 1 #define ERR 2 #define STD_OUT stdout #define STD_ERR stderr #define LOG_MESSAGE(pr, strm, msg, ...) do {\ char *str;\ if (pr == INFO)\ str = "INFORMATION";\ else if (pr == ERR)\ str = "ERROR";\ fprintf(strm, "[%s] : %s : %d : "msg" </p><p>", \ str, __FILE__, __LINE__, ##__VA_ARGS__);\ } while (0) int main(void) { char *s = "Test String"; LOG_MESSAGE(ERR, STD_ERR, "Unable to open the file"); //here normal message will be printed LOG_MESSAGE(INFO, STD_OUT, "%s is passed as argument", s); //pass string argument LOG_MESSAGE(INFO, STD_OUT, "%d + %d = %d", 14, 16, (14 + 16)); //Provide integer }
[ERROR] : D:\text.c : 21 : Unable to open the file [INFORMATION] : D:\text.c : 23 : Test String is passed as argument [INFORMATION] : D:\text.c : 25 : 14 + 16 = 30
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!