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

以下のプログラムで質問がございます。
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;
}

質問者からの補足コメント

  • すみません_ _
    [変数であるtanka_kosuuですが]

    [構造体名であるtanka_kosuuですが]
     に変更いたします。

      補足日時:2015/08/26 08:20

A 回答 (5件)

変数や型などの識別名は、プログラム言語仕様により使用できる文字が制限されています。



多くの言語で空白文字は認められないので、複数の英単語からなる名前をつづる場合に
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 …
    • good
    • 0
この回答へのお礼

ご回答くださいまして誠にありがとうございました。
勉強になります。
 構造体名の部分なので、特にプログラムの動作には
関係がないことを後で気づきました。
 http://www.amazon.co.jp/dp/4320026926
の本は同サイトで進められまして購入しています^^
 今ざっと見たんですが、343ページ、文字がびっしり書いてありますので
直ぐに見つけることはできませんでしたがが、暇暇探してみます。

お礼日時:2015/08/26 18:17

> tanka_kosuuとtankakosuuが同じ結果になるか?



コンパイラからすると、tanka_kosuu であろうが、tankakosuu であろうが、 A であろうが、foo であろうが、なんでも同じです。
構造体タグ名だからと言うことじゃなくて、変数名でも、関数名でも(mainを除く)、文法的に正しい名前であれば、名前は何でも良いんです。
コンパイルで生成されるコードは同じで、プログラムの動作は同じです。
    • good
    • 0
この回答へのお礼

ありがとうございました。
 そうででした。構造体名なので、特に予約語以外であれば
問題がない部分だと後で気づきました。

お礼日時:2015/08/27 19:41

正確なところは, そのプログラムを作った人に聞いてください.

    • good
    • 0
この回答へのお礼

ご回答くださいましてありがとうございました。
特にプログラムの動作には関係ないみたいです。

お礼日時:2015/08/26 18:18

>tanka_kosuuをtankakosuu に変更しまして


> 検証のためにコンパイルを試みたいのですが!
>「 %comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"" x86 」 
>のコンパイラーソフトがうまく動いていないので、検証できません。

tanka_kosuuの時はエラーにならなくて
tankakosuuに変更したらエラーになったということでしょうか?
それは、変更したときに、それ以外の箇所も誤って変更している可能性があります。
エラーになったソースをここへそのまま、コピー&ペーストしていただけますでしょうか。
そうすれば、原因が解明できます。(絶対に手打ちなさらないで下さい。手打ちで転記すると、そこで間違ってしまい、余計なにがなんだかわからなくなることが良くあります)
    • good
    • 0
この回答へのお礼

ご回答くださいましてまことにありがとうございました。
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
参考書の通り入力しました。
参考書の意図するところがよく理解していないのですが!?
たぶん動いていると思われます。
「 >のコンパイラーソフトがうまく動いていないので、検証できません。」
と書き込みましてが、すみません_ _たぶん私しのやり方が間違っていたのかと思います。
 まだ基礎的なことを学んでいる過程ですので、試行錯誤状態で
で悪しからずでございます^^

お礼日時:2015/08/26 19:28

tanka_kosuu のほうが、tankakosuu より見やすい、誤読しにくいと言うことです。


日本語をローマ字で書くときは、分かち書きをするのが普通ですし、英語も、単語の区切りは空白を空けます。

korehanandetsukeruhitsuyougaarunodesuka だと、読みにくいですよね。
kore_ha_nande_tsukeru_hitsuyou_ga_aruno_desuka のほうがずっと読みやすいし、区切りを間違えて誤読することが無い。
    • good
    • 0
この回答へのお礼

ご回答くださいましてありがとうございました。
 ”読みにくいですよね。”の 
ご回答をもとに、すみません この場を借りて
  今後のユーザーさんのために
tanka_kosuuをtankakosuu に変更しまして
 検証のためにコンパイルを試みたいのですが!
「 %comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"" x86 」 
のコンパイラーソフトがうまく動いていないので、検証できません。
 つきまして
 tanka_kosuuとtankakosuuが同じ結果になるか?
 第三者さんのお方は検証されたらいかがでしょうか。

お礼日時:2015/08/26 09:07

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