Mat*_* H. 13 c variadic-functions
我有一个大致如此的功能:
typedef struct SomeType {
...
} SomeType;
void TakesArgs(SomeType *t1, ...) {
// iterates through arguments
}
// usage:
TakesArgs(&a, &b, &c);
Run Code Online (Sandbox Code Playgroud)
如果我要更改TakesArgs
为无操作,同时仍保持所有调用代码不变,我是否会使用内存(或其他方式)运行任何奇怪的风险?
void TakesArgs(SomeType *t1, ...) {
return;
}
// usage unchanged:
TakesArgs(&a, &b, &c);
Run Code Online (Sandbox Code Playgroud)
换句话说,跳过在原始实现中执行的va_list
/ va_start
dance会有任何奇怪的副作用吗?
是的,这是非常安全的.您不需要阅读所有可变参数只是为了阅读它们.您甚至不需要在内部启动可变参数读取序列TakesArgs
.
在引擎盖下,它通常意味着执行任何参数传递维护任务的负担被赋予调用代码(它们的方式通常被认为是"传统的"C调用约定).被叫者不必做任何事情.