Domanda

Esiste un modo per fare qualcosa di simile PHP di

print << END
yadayadayada
END;

in C ++? (Multi-linea,, inserimento flusso escape facile da tagliare e incollare)

È stato utile?

Soluzione

Questa risposta è ormai obsoleto per la moderna C ++ - vedi di SBI risposta per il modo moderno <. / strong>

Questa è la migliore che puoi fare:

std::cout <<
    "This is a\n"
    "multiline\n"
    "string.\n";

Non è così conveniente come una vera e propria heredoc, ma non è terribile.

Altri suggerimenti

C ++ 11 ha grezzo letterali :

// this doesn't have '\n', but '\\' and 'n'
R"(yada"yadayada\n)" 

E se avete bisogno di quei parentesi, si può fare anche quello, utilizzando quello che vuoi per un token di fine:

// the following will be "(yada)(yada)(yada)"
R"END((yada)(yada)(yada))END" 

funziona anche con nuove linee incorporate:

// the following will be "\n(yada)\n(yada)\n(yada)\n"
R"END(
(yada)
(yada)
(yada)
)END" 

In C ++, non è di solito considerato stile di codice a mettere grandi quantità di dati in codice sorgente, quindi non c'è un modo di lingua di fantasia per farlo.

Di solito è più flessibile per mettere il testo in un file esterno (ad esempio un file di testo), quindi non è vincolato nella eseguibile compilato.

Se si desidera il testo ad essere vincolato nell'eseguibile poi (a seconda della piattaforma), spesso è possibile utilizzare una qualche forma di risorse di sostegno, o un assemblatore con una direttiva stile 'incbin' a dare nome ad una zona di dati con il testo che si desidera.

In alternativa, è possibile utilizzare un programma di utilità esterno (come xxd -i) a compilatore un array di stile C di nome da un dato file di input. Il file generato può essere compilato con il resto del codice sorgente.

Sì. http://en.cppreference.com/w/cpp/language/string_literal

const char* s1 = R"foo(
Hello
World
)foo";
//same as
const char* s2 = "\nHello\nWorld\n";

O se non si tratta di best-practice, C ++ 11 fa abbastanza bene esattamente quello che vuoi.

Si può fare in questo modo:

std::cout << "First line\n"
"second line\n"
"third line\n" ;

E questo è il meglio che puoi fare con il C ++.

Non c'è cosa come un heredoc in C ++.

Si può fare

cout << 
"yadayadayada"
"yadayadayada"
<< endl;

Questa è la migliore che si può ottenere. Ma si deve ancora sfuggire caratteri speciali come \ ", '.

Il modo in cui sarebbe includere il testo come un ressource nel eseguibile o caricarlo da un file esterno.

A slash alla fine di una riga indica la riga successiva è una continuazione della stringa. Questo ti porta ad una sintassi alternativa che si può o non può preferire rispetto ad altri suggerimenti:

std::cout << "\
This is a\n\
multiline\n\
string.\
";

I vantaggi: non si dispone di avvolgere ogni linea tra virgolette; durante l'importazione di testo da qualche altra fonte è sufficiente modificare una fine di ogni riga, non entrambe le estremità (più macro friendly); e si può vedere esattamente come la stringa risultante sarà, tra cui spazi iniziali.

Gli svantaggi: è ancora necessario includere esplicitamente \ n per nuove righe, e non mi piace perdere la capacità di rientrare il mio codice bello e abbastanza. sintassi heredoc soffre anche di questa caratteristica, quindi forse non ti disturberà.

Personalmente, questa non è una sintassi che mi piace.

Se ho capito bene, credo che si desidera che questo:

#include <iostream>
...
std::cout << std::endl << "yadayadayada" << std::endl;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top