2017-09-23 1 views
0
int main(int argc, char **argv) { 
    static_assert(false, R"error(This is an error message. You need to 

1. Pick up the phone. 
2. Call GhostBusters. 
3. Run and hide. 

)error"); 
} 

gibtWarum werden keine Zeilenumbrüche/andere Kontrollsequenzen mit static_assert gedruckt?

error: static_assert failed "This is an error message. You need to\n\n1. Pick up the phone.\n2. Call GhostBusters.\n3. Run and hide.\n\n" 
    static_assert(false, err); 
    ^   ~~~~~ 
1 error generated. 

Kennt jemand den Grund dieser "unescaped" sind? Ist es abhängig von Compiler/Plattform? Teil des Standards?

Antwort

1

GCC gibt Ihnen die Zeilenumbrüche Sie wollen: https://godbolt.org/g/jS7Sgm

Die genaue Darstellung hängt vom Compiler. Das Drucken von Escape-Codes kann am besten als "Qualität der Implementierung" beschrieben werden.

+0

Gah! Ok, werde in 11 Minuten annehmen x0 Danke! – sjm324

1

Der Standard sagt nichts anderes als:

die resultierende Diagnosemeldung (4.1) wird den Wortlaut des strang wörtlichen umfassen, wenn man zugeführt wird, mit der Ausnahme, dass Zeichen nicht in dem Grunde Quelle Zeichensatz (5.3) müssen nicht in der Diagnosemeldung erscheinen.

Newlines sind Teil des grundlegenden Quellzeichensatzes, daher müssen sie "erscheinen". Genau wie sie erscheinen, ist keine Frage der Standard-Kontrollen.

Verwandte Themen