Pourquoi ne pas PRIu64 travail dans ce code?

Comme par cette réponse, j'ai essayé de l'impression d'un uint64_t, mais il me donne une erreur:

erreur: expected `)' avant 'PRIu64'

Suivant est le minimum de code montrant ce que je suis en train de faire:

#define __STDC_FORMAT_MACROS
#include <inttypes.h>
#include <cstdio>

class X {
  X() {
    uint64_t foo = 0;
    printf("%07" PRIu64 ": ", foo);
  }
};

int main() {}

Ce code minimal compile, mais mon code ne fonctionne pas. Cependant, j'ai essayé avec les 2 lignes à l'intérieur de X::X() exactement la même chose dans mon code, et qui ne fonctionne pas.

Que dois-je regarder pour déboguer cette plus loin? Mon code aussi #includes d'autres en-têtes. Peut-être l'origine du problème? N'afin d'inclure les en-têtes de la matière?

Modifier
PRIu64 est définie comme suit sur ma machine:

# if __WORDSIZE == 64
#  define __PRI64_PREFIX    "l"
#  define __PRIPTR_PREFIX   "l"
# else
#  define __PRI64_PREFIX    "ll"
#  define __PRIPTR_PREFIX
# endif

# define PRIu64     __PRI64_PREFIX "u"
  • Pourquoi êtes-vous à l'aide de printf en C++? En outre, nous ne pouvons pas le code de débogage, nous ne pouvons pas voir... les erreurs Communes sont manquantes ; ou ).
  • Pouvez-vous vérifier ce qu'est exactement PRIu64 est défini comme?
  • Je ne sais cout. 🙂 Il est plus lent que printf sur mon système, donc je préfère utiliser que dans les cas où printf n'est pas assez bon. Je sais que vous ne pouvez pas le code de débogage, vous ne pouvez pas voir. Je suis l'espoir d'obtenir quelques idées sur ce qui pourrait être mauvais, de sorte que j'ai pu essayer le débogage plus loin.
  • Ajouter la ligne qui vous donne l'erreur, car votre exemple minimal compile.
  • Édité question. Cela me donne quelques idées sur la façon de déboguer plus loin. Merci.
  • Dans mon code, j'ai essayé avec exactement les mêmes 2 lignes. Malheureusement, je ne peux pas partager le code.
  • Collin réponse devrait être accepté: il très bien correspondre à la réalité que votre exemple minimal fonctionne, mais pas votre code.
  • vous avez raison, je n'ai que maintenant. J'ai quitté ce job il y a quelques années, donc n'oubliez pas non plus que le problème d'origine a été, mais néanmoins, la réponse décrit clairement le problème.

InformationsquelleAutor Masked Man | 2013-01-26