Tengo un trillón de llamadas de función my_printf() en un programa enorme. Ahora quiero convertirlos todos para que la función tome un nuevo argumento entero (llámalo x) sin tener que editar los trillones de llamadas. Si my_printf medida limitada a exactamente un argumento de cadena entonces yo podría hacer algo como esto:#define y funciones con argumentos de longitud variable
#define my_printf(str) _my_printf(x,str)
void _my_printf(int x,char *str) // changed from my_printf(char *str)
{
// stuff
}
Pero como my_printf toma un número variable de argumentos no estoy seguro de cómo hacerlo. Se puede hacer?
EDIT: para los que se preguntan por qué debería querer hacer una cosa así, aquí hay un ejemplo relacionado:
#if BELT_AND_BRACES_DIAGNOSTIC_MODE
#define function(x) _function(__FILE__,__LINE__,x)
#else // speed critical optimised mode
#define function(x) _function(x)
#endif
#if BELT_AND_BRACES_DIAGNOSTIC_MODE
void _function(char *file,int line,int x)
#else
void _function(int x)
#endif
{
// stuff
#if BELT_AND_BRACES_DIAGNOSTIC_MODE
if (something_went_wrong)
{
printf("Cock up in function when called from %s line %d\n",file,line);
}
#endif
}
1 a morder la bala. Con los editores de hoy con soporte de refactorización, etc., debería estar riendo. Diablos, mi editor de programación hace 15 años podía fácilmente hacer una búsqueda global y reemplazar en archivos especificados por comodín en todo un árbol de directorios, con o sin mi vista previa de los resultados primero. (Y si estás pensando en macro, entonces puedes hacerlo a ciegas.) –
Ver mi edición a la pregunta original – Mick
+1. Míralo como una oportunidad de aprendizaje para realmente entender lo que un editor moderno puede hacer (o si has estado aquí lo suficiente, lo que Vim o Emacs pueden hacer, y pueden hacer cosas que Visual Studio solo está capturando). arriba con ...). – AAT