Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [C] printf e #define

  1. #1

    [C] printf e #define

    Supponiamo che ho una direttiva

    #define STRINGA XYZ

    richiamando

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


    Ottengo in output STRINGA invece di XYZ.
    Suppongo che il preprocessore non rimpiazzi le stringhe se sono tra "".

    Senza aggiungere ulteriori define, è possibile stampare XYZ invece di STRINGA?

  2. #2
    Hai mezzo la costante STRINGA tra doppi apici, solo le stringhe vanno tra doppi apici, modifica cosi il printf():

    codice:
    printf("%s", STRINGA);
    P.S.: ricorda che se mette una frase all'interno dei doppi apici viene consiterata come stringa e non come altro (costante nel tuo esempio)

  3. #3
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    codice:
    #define STRINGA "XYZ"
    printf("%s", STRINGA);
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  4. #4
    Originariamente inviato da KrOW
    codice:
    #define STRINGA "XYZ"
    printf("%s", STRINGA);
    non posso cambiare il define

  5. #5
    Originariamente inviato da sevenjeak
    Hai mezzo la costante STRINGA tra doppi apici, solo le stringhe vanno tra doppi apici, modifica cosi il printf():

    codice:
    printf("%s", STRINGA);
    P.S.: ricorda che se mette una frase all'interno dei doppi apici viene consiterata come stringa e non come altro (costante nel tuo esempio)
    è stato il primo tentativo (i doppi apici son venuti dopo)
    non compila

    `XYZ' undeclared (first use in this function)

  6. #6
    Originariamente inviato da osvi
    non posso cambiare il define
    Se non puoi cambiare la define, hai poche possibilità

    codice:
    #define STRINGA XYZ
    ...
    	char *XYZ="ciao";
    	printf("%s", STRINGA);
    STRINGA non può che essere usato come alias di un altro identificatore.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  7. #7
    codice:
    #define INT_STRINGIFY(x) #x
    #define STRINGIFY(x)    INT_STRINGIFY(x)
    
    #define STRINGA xyz
    
    #include <stdio.h>
    
    int main()
    {
        printf("%s\n",STRINGIFY(STRINGA));
        return 0;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Originariamente inviato da Samuele_70
    Se non puoi cambiare la define, hai poche possibilità
    purtroppo non posso cambiarla perchè in altri punti serve proprio così come è

    Originariamente inviato da MItaly
    codice:
    #define INT_STRINGIFY(x) #x
    #define STRINGIFY(x)    INT_STRINGIFY(x)
    funziona perfettamente, mille grazie

  9. #9
    Di niente; ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.