2017-09-23 10 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"); 
} 

改行/その他の制御シーケンスがstatic_assertで印刷されないのはなぜですか?

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. 

を与える誰もが、これらは、 "エスケープ" している理由を知っていますか?コンパイラ/プラットフォームに依存していますか?標準の一部ですか?

答えて

1

GCCは、あなたが望む改行を与える:https://godbolt.org/g/jS7Sgm

正確なプレゼンテーションでは、コンパイラに依存します。エスケープコードを印刷するかどうかは、「実装品質」の問題として最もよく説明できます。

+0

ガー!さて、11分で受け入れるでしょうx0ありがとう! – sjm324

1

標準は、より多くの何も言いません:

を1が供給されている場合は、結果の診断メッセージ(4.1)(基本ソース文字セットの文字ではないことを除いて、文字列リテラルのテキストを含まなければなりません5.3)を診断メッセージに表示する必要はありません。

改行は基本的なソース文字セットの一部であるため、「表示」する必要があります。正確にははどのように表示されるのですか?標準コントロールの問題ではありません。

関連する問題