C 如何检查变量参数的有效性?

C 如何检查变量参数的有效性?,c,variadic-macros,C,Variadic Macros,我想定义一个宏,比如- #define log(lognumber,...) logreport(lognumber,__VA_ARGS__) 我想检查用户调用log时可以传递的参数的异常情况。请为我提供异常情况 [评论更新:] 我的意思是,我想以这样一种方式编写日志报告,它应该将特定的数字打印到我已经定义的错误中 举个例子,比如我通过了考试 log(NOTE,"%s",str) 然后,在这种情况下,它将打印我在另一个文件中分配的特定ID,如msgid%s、msdstr%s 1022

我想定义一个宏,比如-

#define  log(lognumber,...)  logreport(lognumber,__VA_ARGS__) 
我想检查用户调用log时可以传递的参数的异常情况。请为我提供异常情况

[评论更新:]

我的意思是,我想以这样一种方式编写日志报告,它应该将特定的数字打印到我已经定义的错误中

举个例子,比如我通过了考试

log(NOTE,"%s",str) 
然后,在这种情况下,它将打印我在另一个文件中分配的特定ID,如msgid%s、msdstr%s 10223,但用户使用

log(NOTE,"DIRECT STRING") 
它确实需要[??]来表示该字符串。那个么我如何检查用户是否以这种方式传递参数呢

log(NOTE,"%s",str) 

日志报告功能中的这种方式

那个么,若用户正在传递参数,我该如何检查呢


目前唯一的方法是解析某些转换说明符(如%s)出现的第二个参数。

异常情况是什么意思?您到底想实现/保护什么?只需在logreport函数中编写代码,使用标准的va_start、va_arg和va_end宏对变量args进行检查。至少这是我认为你在问的问题的答案。但是你的问题不是很清楚:如果不解释它的意思,那么“例外情况”这个词就没有意义。如果我读对了,我不确定我是否理解,你可能会像其他人一样感兴趣,不确定你到底想要什么。如果要检查打印格式是否与参数相对应,则不能在函数或宏中执行此操作。但有些编译器可能允许您发出编译时警告,例如,gcc有,您可以在logreport函数中指定。我的意思是,我希望以这样一种方式编写logreport,即它应该将特定的数字打印到我已经定义的错误中,例如,如果我传递logNOTE,%s,str然后,在这种情况下,它会打印我在另一个文件中分配的特定ID,比如msgid%s,msdstr%s 10223,但是用户使用logNOTE,DIRECT STRING,它确实为该字符串使用了,那么我如何检查用户是否以这种方式在logreport函数中传递参数logNOTE,%s,str或logNOTE,DIRECT STRING
log(NOTE,"direct string")