くだらないことですが、ふと気になったので質問させてください.
人様のソースをのぞいていると、
_abcd
_abcd_
abcd_
という変数のつけ方をよく見かけます.
一番上に関しては予約語だったり、昔のシステムコール等についていたということを過去ログを見て知ったのですが、両端や右端につける場合も同じような理由なのでしょうか?
あともうひとつはプログラミングとさほど関係ありませんが。。
ASCIIの半角バックスラッシュ(\)はwindowsの日本語フォントでは殆どの場合 円マーク(\)となりますが、欧州、中国とかだと、これがその国の通貨のマークに変わったりするのでしょうか? 円マークは日本だけですか?
お馬鹿な疑問ですがよろしくお願いします。
No.6ベストアンサー
- 回答日時:
xcrOSgS2wYさんの言われる「普通のものではない」ということから思い出したことがあります。
実は、C++(および一定の条件を満たすC)では、識別子に($)を使うことができます。これは特定のコンパイラの拡張機能ではなく、(概ね)標準の機能です。
というのは、C++では基本ソース文字集合にない文字がソース中に現れると、国際文字名に変換されてコンパイルされます(厳密にいうと、標準に準拠しているなら変換されるはずです)。漢字などは対応する文字コードに強く依存しますが、($)の場合は比較的互換性があります。
国際文字名に完全対応しているコンパイラは実際にはあまりありませんが、($)に限っては、GCCも、VC++も、もともと拡張機能として使用することができます。経緯はどうであれ、現在では、識別子中の($)を国際文字名に変換されるはずの拡張ソース文字集合の中の1文字であると主張してもあながち間違いではなさそうです。
主要な処理系が、国際文字名にまともに対応するようになれば、やむを得ず予約済みの識別子を使ってしまうこともなくなりそうです(なくなって欲しい)。
ちなみにVC++8.0では、識別子に漢字なども普通に使えるようです。
この回答への補足
自分もそれくらいC/C++に詳しくなりたいなぁと憧れの眼差しで見てしまいます(笑
自分にとってちょっと話が難しいですが、英数字_以外の文字が使えるとはびっくりしました。そういえばどこかの誰かがJAVAのクラスに漢字が使えるようなことを言っていたようないってないような。。
それでためしにjavacしてみたらコンパイルできちゃいました(実行はできませんでしたが・・)
VC++ももっていないので、お金に余裕ができたら試してみようと思います。
ありがとうござましたm(_ _)m
No.5
- 回答日時:
なぜ
_abcd
_abcd_
abcd_
のような変数名(ないしシンボル名)を使うのか、という観点からの回答です。
「普通のものではない」「一般的なものではない」ということを見た目上で表現したいとき、何か特別な印を付けるということがよく行われます。日常の文章では「※」を付けたり「†」を付けたりするように、プログラムコード(一般)では【$】を付けたり【_】を付けたりします。
さて、プログラムコード内のシンボル名として使用できる文字種は、それぞれの言語によって決まっています。C/C++では英字で始まり、2文字目以降は英字・数字・アンダーバーを使う1文字以上の文字の連なりが使用できます。(※注:予約語については、ここでは説明を省略します。)
そうすると、この中で「特別な印」として使える文字はおのずと【_】だけに制限されることになります。英字はシンボル名に英単語を使うと26文字とも必要ですし、数字は当然10文字とも必要なので、残るは【_】だけだからです。
次に【\】と【¥】の関係について。
大昔、ASCIIの半角【\】コードの場所に【¢】が入っていた時期があります。おそらく、その頃に日本で【¥】が必要とされ、通貨記号としては既に【$】があるので【¢】は省略してもよいだろうという判断でその場所に日本では【¥】が入れられたのではないかと想像しています。(真偽の程は確認していません。)
ありがとうございます。
>普通のものではないことを表現したいとき
なるほど、、実を言うと自分もそんな感じの使い方をしていました。
例えば、グローバル変数の前には _ をつけてみたりとか・・。PHPだと $_POST $_GET なんて配列変数もありますよね。
決して間違ったことをしていなかったのかなぁとほっとしました。
\の話についてもありがとございました。
その情報をもとにもう少し調べてみます。
No.4
- 回答日時:
韓国のKS系のコードだと半角¥記号のコードが
ウォン記号に割り当てられます。
そういう意味では、英文メール等で金額を表記する場合
¥記号は使わず、yenと表記する法が混乱が無い。
プログラムの出力としても好ましくは無い。
たとえば¥記号の呼び名を知らない人が見た場合
その意味を調べることもできない。
>KS系のコードだと半角¥記号のコードがウォン記号
ちょっと勘があたってうれしいです。
たしかにそうなると、円マークを半角であらわすのはまずいんですね。
そんな落とし穴に気がつきませんでした。
英文メールをうったことは皆無ですが、今後気をつけます。
No.3
- 回答日時:
#2です。
前回(やはり上手く表示されませんでしたね)は、バックスラッシュにしか書いていませんでした。下線(アンダースコア)を両端や右端につける場合についてですが、右端につける場合は何の問題もありません。ただし、C++の場合は、識別子のどこであろうと、二重の下線が含まれていると予約名になるので使えません。
両端の場合ですが、たとえ終端に下線を付けようとも、先端に下線があれば、ファイル有効範囲(C++の場合は大域的名前空間有効範囲)では予約済みになります。
>C++の場合は、識別子のどこであろうと、二重の下線が含まれていると予約名になる
過去にたしかに2重の_はなんなんだ!と思った覚えがあります。
__LINE__ とか、__FILE__ ですよね。
詳しい情報、ありがとうございますm(_ _)m
No.2
- 回答日時:
まず原則から説明すると、標準Cの規格では文字集合だけを規定しており、それがどんな値で表現されるかについては規定されていません。
つまり、本来であれば、日本でも「¥」ではなく「\」を使うべきなのです。半角文字で表現しきれないのであれば、char型を16ビットにして、全角文字を使ってでもそうするのが筋です。あるいは三文字表記を用いて「??/」とするかです。ただ、現実には米国製のコンパイラと互換性を保つために、「¥」になってしまっても同じ文字コードを使用しているわけです。
その文字コードであるISO646は、国ごとに選択可能なコードがいくつかあります。そのひとつが 5C というわけです。そして、 5C が通貨記号かというとそうでもありません。米国の「$」も別のコードですし、英国の「£」は「#」と同じコードになります。ヨーロッパ諸国では「ö」「ø」「ç」などが当てられています。(上手く表示されないかも)
>日本でも「¥」ではなく「\」を使うべきなのです
なるほど・・。
なんでそんなややこしいことになったのかがちょっと不思議ですね。
英国の「£」は「#」というのもはじめて知りました.
ありがとうございます。
No.1
- 回答日時:
OSやプログラミング言語によって_の扱いは様々です。
普通の英数字と同じに扱うもの、予約語に認めるもの、全く認めないものがあります。ASCII(ISOと言った方がいいですが)では、いくつかのの符号は
勝手に定義していいことになっています。
国ごとにあるいは言語によっても違います。
ちなみに、C言語では文字列の最後は「バックスラッシュ」ですが日本では「¥」で表示されます。
書籍にも両方の記載が見られます。
ありがとうございます。
使い方は多種多様なのですね。
Cのライブラリなどを見ていて、なんか意味があるのか??といつも不思議に思っていました。
自分は変数名のスペースの変わりに使うくらいなので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 政治 日本円と中国の人民元が同じ「¥」マークを使うと、損するのは日本人です 2 2023/04/22 19:15
- 政治 どうしたら、日本円と人民元が同じ¥マークなのを利用して、中国人から金をだまし取る事ができますか? 5 2023/04/22 17:17
- 大学受験 進路が決まりません!自分が行ける範囲で、1番いいところはどこでしょうか? 国数英地理の点数を載っける 4 2023/08/23 22:50
- その他(プログラミング・Web制作) VBA 1 2023/01/19 16:19
- その他(お金・保険・資産運用) 超初心者です。レートについて教えて下さい。 5 2023/04/20 10:49
- 数学 数学の質問です。 円に内接する四角形ABCD において, AB=2, BC = 1, CD = 3, 3 2023/04/18 18:28
- 大学受験 私大入試マークミスについて 2 2023/02/02 17:37
- 事件・事故 韓国人について 6 2022/05/15 14:21
- 大学受験 数学が苦手で社会が得意な場合は一橋よりも東大の方が受かりやすい、ということはあり得ますか? 3 2022/04/16 16:46
- ノートパソコン 外付けHDDがDからEに変わってしまいました。元に戻したいです。 2 2022/04/04 14:45
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で全角文字を扱いたいので...
-
VBA シート上にドロップダウン...
-
VisualStudio2022でC言語プログ...
-
shift_jisの文字コードを出力さ...
-
フォームを開くときに、コンボ...
-
エラーの意味は? Lvalue req...
-
C言語 exitの使い方
-
jsp~jspにhiddenを使って変数...
-
Excel-vba 文字列と変数を...
-
VBAでダブルコーテーション入り...
-
Java認定試験3級の問題です。 ...
-
excelの、ある数式内の{}の意...
-
long型のランダムな値を返す方法
-
スピンボタンで小数点
-
COLUMN(1:1)の意味を教え...
-
計算プログラムにおける無限大...
-
GPIBの応答について
-
VBA 1行で複数の代入を行った...
-
EXCEL/VBA 変数の値をクリップ...
-
VB6.0-整数と余りを求める
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VisualStudio2022でC言語プログ...
-
C言語で全角文字を扱いたいので...
-
Accessで文字列のバイト数読み込み
-
HTML5では文中の半角不等号はち...
-
アンダーバーとバックスラッシュ
-
VBA シート上にドロップダウン...
-
VC2008+Qtの文字化け
-
正規表現で英(大小)と数字を必...
-
Ruby 文字コード判別
-
Cpadで文字化け
-
文字列の引き渡し
-
文字数の多い単語だけ抽出(多...
-
セル内の一部文字列を消去のマクロ
-
rubyの正規表現について
-
shift_jisの文字コードを出力さ...
-
ruby 正規表現の日本語とアルフ...
-
Ruby(1.9)で2進表示として文...
-
Kシェルでの桁数取得
-
Ruby言語にて、全角カナ⇔半角カ...
-
C言語 exitの使い方
おすすめ情報