C11 proyecto explica el modificador de longitud para ptrdiff_t
en 7.21.6.1 7 "La función fprintf
"
t
Especifica que un siguiente d
, i
, o
, u
, se aplica x
, o X
especificador de conversión a un ptrdiff_t
o el correspondiente argumento de tipo entero sin signo; o que el siguiente especificador de conversión n
se aplica a un puntero a un argumento ptrdiff_t
.
Uso "%td"
como en el siguiente: Crédito: @trojanfoe
ptrdiff_t diff = b - a;
printf("diff = %td", diff);
Si el compilador no admite "%td"
, convertirse a un tipo con signo - cuanto más tiempo, mejor. Luego asegure el formato alternativo y la coincidencia de argumentos.
// Note the cast
printf("diff = %lld", (long long) diff); // or
printf("diff = %ld", (long) diff);
Ref format specifiers
Esa referencia no aparece completa; el carácter 't' es un modificador de longitud del especificador de tipo' d'. También le sugiero que especifique Visual Studio en su pregunta si esa es la plataforma en la que está interesado. – trojanfoe
'% td' es estándar. El compilador C de Visual Studio no cumple con el estándar C actual. –
@AmirSaniyan: el 't' es un especificador de tamaño, no un tipo (el tipo es' d' aquí). [Aparentemente] (http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx) 'I' debe usarse como el especificador de tamaño para' ptrdiff_t' con la implementación de Microsoft (por lo tanto '% Id'), que no es estándar – caf