2010-06-10 13 views
2

Je voulais utiliser une constante pour l'identifiant de l'application (donc je peux l'utiliser dans printf).Utilisez un #define dans printf?

J'ai eu ceci:

#define _APPID_ "Hello World!" 

Et puis le printf simple, appelant en% de (la chaîne). Il a mis ceci:

simple.cpp:32: error: cannot convert ‘_IO_FILE*’ to ‘const char*’ for argument ‘1’ to ‘int printf(const char*, ...)’

Qu'aurais-je utiliser pour définir l'ID d'application à utiliser dans printf? J'ai essayé:

static const char _APPID_[] = "Hello World"` 

mais cela n'a pas fonctionné, même erreur je pense.

+2

Voulez-vous publier la ligne printf()? Indiquez également quel compilateur vous utilisez. –

+6

même erreur * "vous pensez" *? C'est ou n'est pas. Vous avez compilé le code, pas nous. Si vous ne savez pas quelles erreurs vous avez, comment vous attendez-vous à d'autres? – jalf

+1

'# define' et' printf() '? Etes-vous sûr que c'est une question C++? – MSalters

Répondre

6

Je ne suis pas sûr que je comprends exactement ce que vous avez essayé ... mais cela fonctionne:

#include <stdio.h> 

#define _APPID_ "Hello world" 

int main() 
{ 
    printf("The app id is " _APPID_ "\n"); 
    /* Output: The app id is Hello world */ 
    return 0; 
} 

Lorsqu'on leur a présenté deux chaînes constantes dos à dos (c.-à-"hello " "world"), le compilateur les traite comme un seul chaîne constante concaténée ("hello world").

Cela signifie que dans le cas d'essayer de printf une chaîne constante de compilation, vous n'avez pas besoin d'utiliser printf("%s", _APPID_) (bien que cela devrait fonctionner).

+1

En fait, utilisez 'printf ("% s ", APP_ID)'. Si vous renommez votre application en "boosteur de productivité à 200%", appeler 'printf (APP_ID)' ne fonctionnerait pas très bien. – MSalters

+0

Si vous utilisez PRIuPTR ou d'autres formateurs d'inttypes.h, printf ("texte" PRIuPTR "plus de texte", 4); est le seul moyen d'y aller. http://stackoverflow.com/questions/1403074/printf-with-sizeof-on-32-vs-64-platforms-how-do-i-handle-format-code-in-platfor – portforwardpodcast

2

Selon le message d'erreur, le problème n'est probablement pas causé par la constante de chaîne, mais par des paramètres incorrects donnés à printf().

Si vous souhaitez imprimer dans un fichier, vous devez utiliser fprintf(), et non printf(). Si vous voulez imprimer à l'écran, utilisez printf(), mais ne donnez pas un handle de fichier comme premier paramètre.

0

Dans source.h

#ifndef _SOURCE_H 
#define SOURCE_H 
#ifdef APP_ID 
#define WHOAMI printf("%s\n", APP_ID); 
#endif 
#endif 

Dans votre programme:

#define APP_ID __FILE__ 
#include "source.h" 
int main() 
{ 
    WHOAMI 
    return 0; 
} 

la raison est d'avoir un stadnard fichier inclus - source.h. __FILE__ dans un fichier d'en-tête renvoie le nom du fichier d'en-tête, de sorte que la définition APP_ID est contrainte à vivre dans le fichier C.

Si vous ne définissez pas APP_ID, le code ne sera pas compilé.

-1

_APPID_ est un nom réservé à l'implémentation. Il correspond au motif ^_[A-Z].*

Renommez-le par ex. APP_ID.