アプリ版:「スタンプのみでお礼する」機能のリリースについて

言語:c

ソース内の行末に\(エンマーク)があるのは
どのような意味なのでしょうか。

A 回答 (4件)

マクロ定義のところか?


ならば、改行をエスケープしているのでしょう。

この回答への補足

確かマクロ定義だったと思います。

補足日時:2007/06/02 10:32
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2007/06/02 18:45

円マークというか逆斜線(バックスラッシュ)が行末にあると、直後の行を連結して論理行を作ります。


具体的には、

foo \
bar

という記述があれば、

foo bar

という論理行を作ります。
ちなみに、論理行に対して最初のfoo \とかbarというのを物理行といいます。

この回答への補足

このバックスラッシュが必要(?)となるのは、
マクロ定義だけでしょうか?

補足日時:2007/06/02 10:31
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2007/06/02 18:46

「論理行で一行に書かなければならない」ものを、


「物理行で複数に書く」際には必要です。

C/C++で「論理行で一行に書かなければならない」ものは、
プリプロセッサ命令(マクロ定義も含むがそれだけではない)ですから、
これらを複数行に渡って書くには必要です。

というわけで、マクロ定義でも「必ず必要」なわけではありませんし、
「マクロ定義だけ」に必要というわけでもありません。
# 現実には、大半がマクロ定義で使われるのですが。

またこれは、あくまで「必要」ということであって、
その他ほぼ全ての場所で改行をエスケープすることは「可能」です。
    • good
    • 2
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2007/06/02 18:46

> このバックスラッシュが必要(?)となるのは、


> マクロ定義だけでしょうか?

ソースファイルのどこででも記述できますが、「必要」という意味では大多数がマクロ定義かと思います。
他に必要になりそうなのは、#if指令で長い式を記述する際に、複数行に分けたくなる場合ぐらいでしょうか?

#if defined L && L != 0 \
 || defined M && 0 < M && M < 10 \
 || defined N && N < 100

のような場合です。

ところで、行末に逆斜線を記述したつもりがないのに、コンパイラがそう解釈してしまっておかしくなることもあります。
例えば、

// 変換表
const int table[] = { ... }

のような記述があり、このソースコードがシフトJISで保存されているような場合です。シフトJISに対応していないコンパイラだと、「表」の2バイト目を逆斜線だと誤認し、2行目のconst int table[]のところまでコメントアウトされてしまいます。
他にも、#error指令の末尾にいわゆるダメ文字があった場合にも、このような現象に遭遇しがちです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2007/06/02 18:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A