Pergunta

Isso está me deixando louco.Eu tenho uma macro definida na linha de comando com o -D opção

-DFOO="foobarbaz"

E eu quero fazer algo parecido com isso

string s = "FOO" ;

Para obter

string s = "foobarbaz" ;

Porque, aparentemente, as aspas na linha de comando são removidos para longe, mesmo quando eu tento escapar-los com \.Já tentei de tudo que eu poderia pensar com stringification e macros adicionais e ele simplesmente não funcionam.Ou eu recebo um erro do pré-processamento sobre extraviado # sinais, ou eu acabo com

string s = foobarbaz ;

o que, obviamente, não vai compilar.

Foi útil?

Solução

Usar a linha de comando:

-DFOO="\"hello world\""

Por exemplo test.cpp é:

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

std::string test = FOO;

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

Compilando e executando dá:

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

EDITAR Esta é a forma como você o faria a partir de um Makefile:

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

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

Outras dicas

C e C++ preprocessadores são afinadas em C e C++, eles são não matérias, byte por byte preprocessadores.Eles reconhecem seqüências de caracteres (como no "foo") e não coincidem e expandir dentro deles.Se você deseja expandir uma macro, você deve fazê-lo fora de uma seqüência de caracteres.E. g.,

#define foo "bar"

#include <string>

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

Seqüência de caracteres acima iria expandir-se para

Hello bar! How's it going?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top