jestem posiada funkcję, która z grubsza wygląda tak:Czy można całkowicie ignorować argumenty variadyczne dla funkcji C?
typedef struct SomeType {
...
} SomeType;
void TakesArgs(SomeType *t1, ...) {
// iterates through arguments
}
// usage:
TakesArgs(&a, &b, &c);
Czy muszę uruchamiać żadnych dziwnych ryzyka z pamięci (lub w inny sposób), gdybym zmienić TakesArgs
do no-op, a jednocześnie pozostawiając wszystko nazywając kod niezmieniony?
void TakesArgs(SomeType *t1, ...) {
return;
}
// usage unchanged:
TakesArgs(&a, &b, &c);
Innymi słowy, omijając va_list
/va_start
taniec, który został wykonany w oryginalnej implementacji ma żadnych dziwnych efektów ubocznych?
Funkcje varariadic nie są częścią zarządzania pamięcią. – Olaf
To jest całkowicie bezpieczne. Nie czuję się dobrze, zamieniając to w odpowiedź, ponieważ nie mogę rygorystycznie go poprzeć, ale jest to zdecydowanie bezpieczne. – templatetypedef
Nie sądzę, że będą dziwne efekty uboczne, ponieważ kompilator wygeneruje najwięcej kodu, który zarezerwuje trochę miejsca na stosie dla & a, & b, i & c, a następnie wyskakuje po nim, tak jak normalne wywołanie funkcji (niezależnie liczby przekazanych argumentów). Jednak nie jestem do końca tego pewien. – ra1nmaster