我有以下程序。它将宏作为可变参数传递给可选arg。在该函数定义内,我们能否在不扩展的情况下获取该宏。我已将类型用作'char *',并显示了宏扩展字符串。任何获取宏的方法都是如此。
#include <stdio.h> #include <stdarg.h> #define CONN_DISALLOW 3201008 #define SYSLOG_CONN_DISALLOW \ "%d: Disallowing new connections. Reason: %s.\n", CONN_DISALLOW void cp_syslog(int syslogid, ...); void cp_syslog(int syslogid, ...) { char *syslog_disallow; va_list ap; va_start(ap, syslogid); syslog_disallow = va_arg(ap, char *); printf("String is %s", syslog_disallow); printf("Macro is %s", SYSLOG_CONN_DISALLOW); va_end(ap); } int main() { int id = 2; cp_syslog(id, SYSLOG_CONN_DISALLOW); return 0; }
现在得到的输出为:
String is %d: Disallowing new connections. Reason: %s. Macro is %d: Disallowing new connections. Reason: %s.
期望为:
String is SYSLOG_CONN_DISALLOW
我的期望是,如果将不同的宏作为可选参数传递给相同的可变参数,则如何处理特定的宏。
如下所示:
cp_syslog(id, SYSLOG_CONN_DISALLOW);
cp_syslog(id, SYSLOG_CONN_ALLOW);
cp_syslog(id, SYSLOG_ICMP_DISALLOW);
我有以下程序。它将宏作为可变参数传递给可选arg。在该函数定义内,我们能否在不扩展的情况下获取该宏。我已将类型用作'char *'和...
第一种可能就是做