Domanda

Questo mi sta guidando dadi.Ho una macro definita sulla riga di comando con l'opzione -D

-DFOO="foobarbaz"
.

e poi voglio fare qualcosa come questo

string s = "FOO" ;
.

per ottenere

string s = "foobarbaz" ;
.

Poiché apparentemente le citazioni dalla riga di comando vengono allungate via, anche quando provo a sfuggirli con \.Ho provato tutto ciò che potevo pensare con la stroniera e le macro aggiuntive e semplicemente non funzionerà.O ottengo un errore dal preprocessore sui segni generatori di # sbagliati, o finisco con

string s = foobarbaz ;
.

che ovviamente non si compilerà.

È stato utile?

Soluzione

Usa questo sulla riga di comando:

-DFOO="\"hello world\""
.

Ad esempio Test.cpp è:

#include <cstdio>
#include <string>
#include <iostream>

std::string test = FOO;

int main()
{
    std::cout << test << std::endl;
    return 0;
}
.

Compilazione e funzionamento dà:

$ g++ -DFOO="\"hello world\"" test.cpp
$ ./a.out 
hello world
.

Modifica Ecco come lo faresti da un MakeFile:

DEFS=-DFOO="\"hello world\""

test: test.cpp
    $(CXX) $(DEFS) -o test test.cpp
.

Altri suggerimenti

I preprocessori C e C ++ sono sintonizzati su C e C ++, sono non preprocessori di byte-byte-byte.Riconoscono le stringhe (come in "foo") e non corrispondono ed espanderanno dentro di loro.Se si desidera espandere una macro, devi farlo al di fuori di una stringa.Ad esempio.,

#define foo "bar"

#include <string>

int main () {
    std::string s = "Hello " foo "! How's it going?";
}
.

sopra la stringa si espanderebbe a

Hello bar! How's it going?
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top