ここから本文です

c言語 関数名 命名規則について

goo********さん

2013/4/1522:24:41

c言語 関数名 命名規則について

なぜ一文字目に数字を入力することができないのでしょうか?

また、なぜ 半角アルファベット、半角数字、半角_だけなのでしょうか?

予約語(?)とはなんでしょうか?

一つだけでもいいのお答えください。

閲覧数:
5,683
回答数:
5
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

jos********さん

編集あり2013/4/1600:54:00

決まりだからです。。。といえば、それまでなんですけど。そうなんです。(*´艸`*)

コンパイラーが数リテラルと変数名・関数名を区別しやすい仕様にしてるんだと思います。それに、人間にとっても見た目で読みやすいですよねぇ~。


変数名にどんな文字が使えるかについては、言語によっていろいろですね。

Tcl 言語では変数名にはどんな文字でも使えます。スペースを含む変数名もできます。数字だけの変数名もできます。だから、正気とは思えないこんなこともできます。

set 123 456 # 変数 123 に 値 456 を代入。
puts ${123} # 「456」と出力される。

Java 言語では漢字、仮名文字、ヘブライ文字、グジャラーティ文字、ベンガル文字、ギリシャ文字、ハングル などなど、いろんな文字を変数名・関数名に使うことができます。こんなこともできます。

double 消費税率 = 0.05 ;

Scheme 言語では、半角のアスタリスク「*」、スラッシュ「/」、ハイフン「-」、プラス「+」、ドル記号「$」、イコール「=」、大なり「<」、小なり「>」なんかの文字を使うことができます。こんなこともできます。

(define *consumption-tax-rate* 0.05)

C言語は ASCII 文字集合に限定して、かつ、変数名の最初の文字を英字・下線に限定することで、コンパイラーの処理が簡単になるような仕様にしてるんだと思います。


C言語の予約語には、

volatile, enum, extern, auto, goto, continue, inline, static, const, void, char, return, break, int, if, while

などなどがあります。予約語になってる単語を変数名として使うことはできません。
ただ、「avoid」とか「charade」みたいに部分に予約語とかぶる名前だったり、「Enum」みたいに一文字でも大文字小文字が違うなら名前なら変数名として使えます。

ちなみに、

#define, #ifdef, #ifndef, #else, #undef

などは、C言語の予約語ではありません。(プリプロセッサ・マクロというものです。)


☆言語の要素で、数字で始まるものといえば、、、、、

蛇足ですけど、FORTRAN という言語には文字列リテラルを表現するための 「H 形編集記述子」 というのがあって、文字列の長さを表す数字列で始まる書き方があります。C言語でいうところの「"Good Morning"」を FORTRAN の H 形編集記述子を使えば、「Good Morning」 は12文字なので「12HGood Morning」と書くんですよぉ。数字で始まるけど数値以外のものの例です。

だから、言語仕様がそうなっているなら、数字で始まる変数名があったとしても、コンパイラーはそのように扱えるわけです。C言語がそういう仕様になっていないだけです。(ってか、ぼくが知ってるコンピューター言語のなかで、数字で始まる要素なのに数値以外を表すものは H 形編集記述子 と FORTRAN とか BASIC とかの 行番号 を除いて他にはないけど。。。)

joseph_joey_tribbiani

この質問は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜4件/4件中

並び替え:回答日時の
新しい順
|古い順

dia********さん

2013/4/1606:10:59

>なぜ一文字目に数字を入力することができないのでしょうか?

それだと、0x31('1')が数値ではなく、変数名になってしまう。

khu********さん

編集あり2013/4/1610:19:10

■なぜ一文字目に数字を入力することができないのでしょうか?

それが C における文法(決まり)だからです。C を作った人達が、そう決めたのです。
日本語の文章が 」 から始まらないのと同じように、それは「そういう決め事」です。

なぜそんな決め事を作ったか…と言えば、その方が、コンパイラを作りやすかったからだろうと思います。
C が生まれたのは今から40年も前の事で、その頃のコンピュータの処理能力は、今とは比べものにならないほど低いものでした。
自由な文法を採用するより、人間にとって不自由であってもガチガチな文法のほうが、貧弱なコンピュータには処理がしやすいのです。

また、 C が「現場から生まれた言語」である事も、おそらく要因の1つです。
とにかく早く、使い物になる言語が欲しい、という現場の要請から、C は生まれました(※1)。そのためには、より簡単に処理できる文法を採用するほうが、良かったのです。



■なぜ 半角アルファベット、半角数字、半角_だけなのでしょうか?

現在有るようなコンピュータも、C も、米国生まれです。米国の文字文化には、全角文字とか漢字というものはありません。C を作った人達の中にも、それだけ扱えれば良いだろう、という考えが有ったはずです。
(数十年経って、やっと Unicode という考え方が、欧米にも理解されるようになってきましたが…)

また、40年前のコンピュータは、今と違って、そのような文字しか扱う事が出来ませんでした。



■予約語(?)とはなんでしょうか?

C プログラムにおいて、識別名に使う事が出来ない、いくつかの語です。
たとえば if とか for とか while は、識別名に使う事が出来ません。つまり、これらの語は、変数や関数、ラベルの名前に使う事が出来ません。
このような語を、予約語と言います。

なぜ予約語なんてものが有るのかというと、コンパイラを作りやすくするためです。
C は、先述の通り、「とにかく早く、使い物になる言語が欲しい、という現場の要請」から生まれました。
そのため、コンパイラを、簡単に作れる事が重視されたのです。
(この事は、後になって奏功し、今では、かなり単純・貧弱なシステムであっても、ひとまず C コンパイラなら有るよ、という時代になりました)

ちなみに予約語の無いプログラミング言語もあります。
文法を厳密に解釈すれば、予約語という考え方を使わなくても、ソースコードを処理する事は出来るからです。
たとえば PL/I では、
do = a + b;
end: if then < else then declare = do;
というプログラムだって書く事が出来ますが、これは PL/I が予約語を持たず、文法を厳密に解釈するからです(※2)。

もっとも、こんな読みにくいプログラムをわざわざ書く事は、実際上、ほとんど無いでしょう。
予約語が無い、というのは、悪く言えば「言語設計側の自己満足」のようなもので、現在使われているプログラミング言語は、予約語を持つほうが多数派です。



※1
ですから、実のところ、C の文法には変な矛盾や混乱がいくつもあります。
そうした「変なところ」も含めて、それが C の文法であり、決まりなのです。

※2
PL/I には、特殊文字を許容するバージョンと、そうでないバージョンとがあり、前者には予約語がありません。
上述の例は、特殊文字 < を使っているので、「予約語の無いバージョン」の PL/I です。
特殊文字を許容しないバージョンでは、< などの文字が使えず、代わりに LT などの語を使いますが(Less Than の略)、この場合、LT は予約語になります。

不適切な内容が含まれている可能性があるため、非表示になっています。

投稿内容に関する注意

k03********さん

2013/4/1522:31:30

goodfriendtatsuyaさん

無駄なアンケートはやめて、学ぶ。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる