わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

変数名・関数名・型名・構造体名

プログラムの中に「a」と書かれていて,それを「エー」とだけ読むと,おそらくは変数の名前なのでしょうが,ひょっとしたら関数かもしれないし,もしかすると型の名前かもしれないし,あるいはいやいや,struct xといった構造体宣言をしていたりするのかもしれません.1文字の文字定数,もしくは,1文字だけからなる文字列で,シングルクォートやダブルクォートを抜いたものかもしれません.
そんな曖昧さを回避するために,名前…Cにおいては識別子ですが…の前や後ろに言葉を添えるだけで,うんと伝わりやすくなります.また,レポートや技術文書を書くときにも,そうするのが当たり前になっています.
まず変数名ですが,これは「変数」を前につけて,「変数a」と言い,書きます.
配列であることを明示するなら「配列変数a」.ポインタなら,「ポインタa」でもまあいいけど個人的には「ポインタ変数a」*1とするようにしています.
ここで添える「変数」は,同格の用法と思ってください.
次に関数名ですが,自作関数の名前がaというのは不自然ですので…もしそれまでそういう名前の関数名を書いている人は,Cの関数はグローバルにしか定義できない*2ことに注意して,処理内容にちなんだ名前にするようにしましょう.
ということで,よく使う名前を例に挙げますと…printfに対して,「関数printf」でも「printf関数」でもいいでしょう.個人的に見聞きする限りでは,「関数」を前につけても後ろにつけても,かまいません.
それと,書く場合に限定されますが,「printf()」と,引数なしのカッコ・カッコ閉じを書いてもかまいません.これは,関数であることを強調する表記です.さらに,前後いずれかに「関数」をつけることもあります.
前後どちらでもOK,と言いましたが,例外があります.mainに限っては,「main関数」とします.「関数main」にはなりません.
「型」は,変数と反対で,必ず名前の後ろです.「int型」とか,「signed long型」とか,「char *型」とか,「struct point型」とか.ここの「型」は,接尾辞のようなものです.
さて構造体についてですが…struct point {double x, y;};と宣言したら,「point構造体」と言い,書きます.「struct point構造体」にはなりません.逆に「point構造体」であって「point型」でない点には,構造体型の変数を作るとき,くれぐれも注意を払ってください.
「文字列」を指す名称も,知っておいてください.たとえば,"abc" は,文法的には文字列リテラルですが,これを「文字列"abc"」とか,引用符を取り除いて「文字列abc」と書くことがあります.さらに,文字列を格納する配列変数や,文字列を指し示すポインタについても,「文字列a」だとか「文字列p」だとか,「文字列argv[1]」だとか,表現することがあります.
少し言葉遊びをしてみると,char a[] = "abc";と宣言した配列変数aに対して,「文字列a」は"abc"と等しく,「文字列a+1」は,("abc1"とではなく)"bc"と等しくなります.ここで「a+1」は,&a[1]と一致するポインタ型の値であることに注意してください.

*1:そもそもaという名前のポインタ変数はよくありません.pやqを,また文字列に関するポインタならsやtを使うといいでしょう.

*2:GCCなら,関数の中に関数を定義できますが.