以下のプログラムで質問がございます。
C言語の構造体であるstructの変数であるtanka_kosuuですが
アンダーバー"_"を付けてあります。
(※struct tanka_kosuu kosuu[10];)
これは、なんでつける必要があるのですか!?
ご教授ができるお方がおられましたらよろしくお願いいたします。
#include <stdio.h>
struct tanka_kosuu {
int tanka;
int kosuu;
int kingaku;
};
int goukei_kingaku(struct tanka_kosuu kosuu[], int nyuuryoku_kosuu);
int main()
{
struct tanka_kosuu kosuu[10];
struct tanka_kosuu kari_nyuuryoku = {-1, 0, 0};
int nyuuryoku_kosuu = 0;
int i;
while(kari_nyuuryoku.tanka != 0){
scanf("%d %d", &kari_nyuuryoku.tanka,
&kari_nyuuryoku.kosuu);
kosuu[nyuuryoku_kosuu] = kari_nyuuryoku;
nyuuryoku_kosuu++;
}
for ( i = 0; i < nyuuryoku_kosuu-1; i++ ){
kosuu[i].kingaku = kosuu[i].tanka * kosuu[i].kosuu;
printf("%d\t%d\t%d\n", kosuu[i].tanka,
kosuu[i].kosuu, kosuu[i].kingaku);
}
printf("goukei=%d\n",goukei_kingaku(kosuu, nyuuryoku_kosuu-1));
return 0;
}
int goukei_kingaku(struct tanka_kosuu kosuu[], int nyuuryoku_kosuu)
{
int i;
int goukei = 0;
for ( i = 0; i < nyuuryoku_kosuu; i++ ){
goukei += kosuu[i].kingaku;
}
return goukei;
}
No.4ベストアンサー
- 回答日時:
変数や型などの識別名は、プログラム言語仕様により使用できる文字が制限されています。
多くの言語で空白文字は認められないので、複数の英単語からなる名前をつづる場合に
tankakosuu
では読みづらいので、以下の様な命名規則で単語間の区切りを表します。
tanka_kosuu // 下線で区切る "スネークケース"
tanka-kosuu // ハイフンで区切る "チェインケース"
tankaKosuu // 単語頭を大文字にする "キャメルケース"
TankaKosuu // 全ての単語頭を大文字にする "パスカルケース"
TANKA_KOSUU // 全て大文字で下線で区切る "アッパーケース"
C言語の構造体の場合ですが、
慣習として スネークケース または キャメルケース あたりが一般的な様です。
というわけで質問の回答としては、
そのプログラムを作った人の命名規則が、構造体名はスネークケースだった。
ちなみに、
言語仕様的に使えないチェインケースを除いて、どの命名規則でもコンパイルエラーになることはありません。
ただし、コンパイラーとは別に静的コード解析をしている場合は、変な命名だと警告されるかもしれません。
以下参考です。
慣習の由来はたぶんこれ
http://www.amazon.co.jp/dp/4320026926
命名規則が パスカルケース または アッパーケース の例
https://msdn.microsoft.com/ja-jp/library/kbt0048 …
言語によっては、この手の命名規則についての公式ガイドラインがあります
http://www.oracle.com/technetwork/java/codeconve …
https://msdn.microsoft.com/ja-jp/library/ms22904 …
ご回答くださいまして誠にありがとうございました。
勉強になります。
構造体名の部分なので、特にプログラムの動作には
関係がないことを後で気づきました。
http://www.amazon.co.jp/dp/4320026926
の本は同サイトで進められまして購入しています^^
今ざっと見たんですが、343ページ、文字がびっしり書いてありますので
直ぐに見つけることはできませんでしたがが、暇暇探してみます。
No.5
- 回答日時:
> tanka_kosuuとtankakosuuが同じ結果になるか?
コンパイラからすると、tanka_kosuu であろうが、tankakosuu であろうが、 A であろうが、foo であろうが、なんでも同じです。
構造体タグ名だからと言うことじゃなくて、変数名でも、関数名でも(mainを除く)、文法的に正しい名前であれば、名前は何でも良いんです。
コンパイルで生成されるコードは同じで、プログラムの動作は同じです。
No.3
- 回答日時:
正確なところは, そのプログラムを作った人に聞いてください.
No.2
- 回答日時:
>tanka_kosuuをtankakosuu に変更しまして
> 検証のためにコンパイルを試みたいのですが!
>「 %comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"" x86 」
>のコンパイラーソフトがうまく動いていないので、検証できません。
tanka_kosuuの時はエラーにならなくて
tankakosuuに変更したらエラーになったということでしょうか?
それは、変更したときに、それ以外の箇所も誤って変更している可能性があります。
エラーになったソースをここへそのまま、コピー&ペーストしていただけますでしょうか。
そうすれば、原因が解明できます。(絶対に手打ちなさらないで下さい。手打ちで転記すると、そこで間違ってしまい、余計なにがなんだかわからなくなることが良くあります)
ご回答くださいましてまことにありがとうございました。
Q?:「tankakosuuに変更したらエラーになったということでしょうか?」
struct tanka_kosuu kosuu[10];
struct tanka_kosuu kari_nyuuryoku = {-1, 0, 0};
を
struct tankakosuu kosuu[10];
struct tankakosuu kari_nyuuryoku = {-1, 0, 0};
に変更しまして、
VS2013 x86 Native Tools コマンド プロンプトで
コンパイル後以下のコマンドで試してみました。
c:\msys\1.0\home\Administrator>CL example10.c
Microsoft(R) C/C++ Optimizing Compiler Version 18.00.30723 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
example10.c
Microsoft (R) Incremental Linker Version 12.00.30723.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:example10.exe
example10.obj
c:\msys\1.0\home\Administrator>example10
100 3
0 0
以上ですが!
最後の
100 3
0 0
参考書の通り入力しました。
参考書の意図するところがよく理解していないのですが!?
たぶん動いていると思われます。
「 >のコンパイラーソフトがうまく動いていないので、検証できません。」
と書き込みましてが、すみません_ _たぶん私しのやり方が間違っていたのかと思います。
まだ基礎的なことを学んでいる過程ですので、試行錯誤状態で
で悪しからずでございます^^
No.1
- 回答日時:
tanka_kosuu のほうが、tankakosuu より見やすい、誤読しにくいと言うことです。
日本語をローマ字で書くときは、分かち書きをするのが普通ですし、英語も、単語の区切りは空白を空けます。
korehanandetsukeruhitsuyougaarunodesuka だと、読みにくいですよね。
kore_ha_nande_tsukeru_hitsuyou_ga_aruno_desuka のほうがずっと読みやすいし、区切りを間違えて誤読することが無い。
ご回答くださいましてありがとうございました。
”読みにくいですよね。”の
ご回答をもとに、すみません この場を借りて
今後のユーザーさんのために
tanka_kosuuをtankakosuu に変更しまして
検証のためにコンパイルを試みたいのですが!
「 %comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"" x86 」
のコンパイラーソフトがうまく動いていないので、検証できません。
つきまして
tanka_kosuuとtankakosuuが同じ結果になるか?
第三者さんのお方は検証されたらいかがでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
C言語 エラーの原因がわからな...
-
C++でvectorにテキストファイル...
-
実数の整数部,小数部の取得
-
C言語
-
PowerShellがうまくいかない
-
int型の変数値をバイト列として...
-
「{ } で囲むだけ」は正しい?
-
if と配列の組み合わせ
-
【C++】関数ポインタの使い方
-
エラー 添字が付けられた値が、...
-
VB.NETからC++のdll連携(double)
-
ColorをRGBで指定する方法
-
[C言語] 関数を利用する計算
-
#define _CRT_SECURE_NO_WARNIN...
-
152+483×769 = 967×384+251 ...
-
ファイルから読みこむ方法
-
構造体にたいして、ビット演算...
-
#include <stdio.h> int main(v...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
AtCoderABC135の問題Cについて
-
C言語 エラーの原因がわからな...
-
複数桁10進数の*桁目だけを抽出...
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
ラップ関数とはどんなものですか?
-
if と配列の組み合わせ
-
return 1L
-
read関数をノンブロッキングで...
-
(int *)の意味
-
std::set<int> で、ある値が何...
-
Win32APIで作るコンボボックス...
-
C++でvectorにテキストファイル...
-
「{ } で囲むだけ」は正しい?
-
足して100になるような乱数のア...
-
Arduinoのプログラムにエラーが...
-
課題でつまってます・・・
おすすめ情報
すみません_ _
[変数であるtanka_kosuuですが]
を
[構造体名であるtanka_kosuuですが]
に変更いたします。