2010-02-08 10 views
13

disculpas de antemano si uso terminología deficiente.Cómo obtener advertencias de formato de cadena incorrecto (C++)

cuando compilo un C++ aplicación bajo el BGF y el uso de printf() Me da advertencias impresionantes relacionados con la consistencia de la cadena de formato y los argumentos pasados ​​en

por ejemplo, este código:.

printf("%s %s", "foo"); 

da como resultado un compilador que advierte "muy pocos argumentos para el formato", que es muy útil. también dará advertencias sobre el tipo de cadena de formato frente al tipo de argumento. debe haber inspeccionado la cadena de formato y la ha comparado con los tipos de argumentos proporcionados. - ¿Es este tipo de introspección en tiempo de compilación algo que se puede agregar al código fuente ordinario, o es algo que se debe compilar en gcc?

fwiw esto está bajo gcc 4.2.1 en os x.

Respuesta

9

Usted puede hacer cosas como esta para sus propias funciones printf similar (así como para scanf/strftime/strfmon-como funciones):

#define PRINTF_FORMAT_CHECK(format_index, args_index) __attribute__ ((__format__(printf, format_index, args_index))) 

void my_printf(const char *fmt, ...) PRINTF_FORMAT_CHECK(1, 2); 

Véase el gcc manual para más detalles.

+3

Hay un montón de otras opciones en el manual; sin embargo, no pueden ser suficientes para cubrir el caso general de todas las funciones variadas. –

+2

eh; hábil. gracias Paul. desde la página del manual: "El atributo de formato especifica que una función toma los argumentos de estilo printf, scanf, strftime o strfmon que deben contrastarse con una cadena de formato" , así que parece que tengo mis propias restricciones de nuez (por ejemplo, algo diferente de la familia de funciones printf) esto realmente no funcionaría, pero hay un montón de otros atributos interesantes en la página a la que se vinculó. Gracias ! –

+0

Impresionante. Alguien sabe si el compilador Intel C tiene algo similar? No pude encontrar nada en el manual. – pavon

Cuestiones relacionadas