2009-01-20 9 views
35

Je déclare une variable pour un compteur 64 bits comme:Spécificateur de format pour « long long »

long long call_count; 

Quel est le spécificateur de format que je devrais utiliser dans les déclarations d'impression? J'ai essayé, %l, %ld, %ll. Aucun ne semble être correct. J'utilise le compilateur Diab C pour compiler mon code d'application à exécuter sur le système d'exploitation pSOS.

Répondre

52

Si Diab C n'est pas C99, alors vous devriez regarder les docs de compilateur, que je ne peux pas trouver en ligne avec un googling rapide.

+0

Ceci fonctionne aussi pour 'long long unsigned int'. – mayhewsw

+6

Pour 'long long unsigned int', vous devez utiliser "% llu" –

14

Il est "%lli" (ou équivalente "%lld")

2

Peut-être que% LLD? Je pense que c'est le format pour gcc, je ne sais rien du compilateur C de Diab.

+3

% lld est le spécificateur de conversion standard depuis longtemps, Windows est le seul que je connaisse qui ne supporte pas cela (mais ils ne supportent pas beaucoup de normes). En outre, ceci est spécifique à la bibliothèque c standard utilisée, pas au compilateur. –

9

Microsoft et Watcom utilisent %I64d (œil majuscule), d'autres utilisent %lld (ell ell minuscule). Selon C99, il devrait être "% lld" (voir, par exemple, here)

+0

"utilisez% I64d (capital I)": réessayez? –

+5

Microsoft utilise ll (ell ell) pour longtemps; I64 (œil) pour __int64. http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx –

+0

Clarifié. Merci –

1

Il est% LLD pour llu et signé% pour les non signés

4

Celui-ci et même un peu plus a été décrit ici: cross-platform printing of 64-bit integers with printf

TL; DR: Vous pouvez utiliser macro PRId64 (à partir inttypes. h) pour imprimer des nombres entiers de 64 bits en mode décimal de manière semi-portable. Il y a aussi d'autres macros (comme PRIx64).

0
long long t1;    //signed 
unsigned long long t2; //unsigned 

printf("%lld",t1); 
printf("%llu",t2);