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

以下のプログラムで
 int main(int argc, char* argv[ ] )
 で質問ですが! 引数の argc argvを定義して
 同プログラム内で他に使われていないのですが!
 なぜですか お叱りを覚悟でご質問いたしました。

 よろしくお願いいたします。 

#include <stdio.h>
#include <string.h>

/*構造体に定義*/
struct TestKekka
{
char shimei[80]; /*氏名*/
int kokugo;
int sugaku;
int eigo;
};

int main(int argc, char* argv[ ] )
{
int heikin;

struct TestKekka sato; /* 佐藤君 */
struct TestKekka tanaka; /* 田中君 */
struct TestKekka suzuki; /* 鈴木君 */

/* 佐藤君んのデータ */
strcpy (sato.shimei, "佐藤一郎");
sato.kokugo = 90;
sato.sugaku = 80;
sato.eigo = 75;

/* 田中君のデータ */
strcpy (tanaka.shimei, "田中次郎");
tanaka.kokugo = 80;
tanaka.sugaku = 70;
tanaka.eigo = 60;

/* 鈴木君データ */
strcpy(suzuki.shimei,"鈴木三郎");
suzuki.kokugo = 70;
suzuki.sugaku = 50;
suzuki.eigo = 100;

/* 学生ごとに3科目の平均点を表示する */
heikin = (sato.kokugo + sato.sugaku + sato.eigo) / 3;
printf("%sの平均点 : %d\n", sato.shimei, heikin);

heikin = (tanaka.kokugo + tanaka.sugaku + tanaka.eigo) / 3;
printf ("%sの平均点 : %d\n", tanaka.shimei, heikin);

heikin = (suzuki.kokugo + suzuki.sugaku + suzuki.eigo) / 3;
printf("%s平均点数 : %d\n", suzuki.shimei, heikin);

return 0;
}

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

  • 皆様ご回答くださいまして誠にありがとうございます。
     さて、int main(int argc, char* argv[ ] )で
    参考書には引数argcは、単純なint型の引数です。引数の名前は自由に決められますので、argcでなくてもかまいません。しかし慣例的に、main関数の引数にはargcとargvが使用されます。
     以上ですが、ならばためしにint main(int akb48, char* nogizaka[ ] )
    としても、コンパイルはできましたので、とくに引数自体を変えてもプログラムには影響はないみていです。しかし このプログラムは構造体とポインタのコラボレーションなのでint main(int argc, char* argv[ ] )がないと、このプログラムは成り立たない。
     謎だらけのプログラムの中の一つであるC言語自体をまだ理解していませんのでそう感じています。

      補足日時:2015/10/08 04:43

A 回答 (6件)

> ならばためしにint main (int akb48, char * nogizaka[])


> しても、コンパイルはできましたので、とくに引数自体を変えてもプログラムには影響はないみていです。
↑当然です。
argcもargvも単なる変数名です。任意の変数名を使用することができます。(もちろん他の変数と重複しないこと)

> このプログラムは構造体とポインタのコラボレーションなので int main (int argc, char * argv[]) がないと、
> このプログラムは成り立たない。
↑「構造体とポインタのコラボレーション」かどうかは別にして「このプログラムは成り立たない」←そんなことはありません。
main関数がないと「このプログラムは成り立たない」という意味に於いてはその通りですが argc、argv変数が必ずしも必要というわけではありません。(コマンドライン引数を使用する必要がなければ) int main (void) と書くこともできます。

> int main (int argc, char * argv[])
↑この書き方は、あくまでC言語が開発されて以来の慣習・習慣です。
試されたように、int main (int akb48, char * nogizaka[]) と記述することもできます。(自由です、ただし、おススメはしません)
    • good
    • 0

宣言した変数は必ずしも使用しなくても構わない。



 コンパイラによってはコンパイル段階で「この変数は宣言されているが一度も使用されてない」と警告を発することもあるが、プログラマーは承知の上であれば無視しても構わない。

 前回の回答では書きませんでしたが、お勧めと思う書籍として以下のようなのがあります。

>C言語逆引き大全 500の極意
http://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E%E9%8 …

 分厚いですが、ここのところ質問を繰り返している「コマンドライン」についても説明があります。

 内容を確認してみると、35ページ目と36ページ目のたった2ページしか説明が無い。
 言い換えるならば拘るほど重要では無い・・・とも言えそうです。
    • good
    • 0

既に#2の方が述べていますが


int main(int argc, char* argv[ ] )の書き方は
main関数特有の決まりごとだと覚えてください。
そして、argc,argvは使っても良いし、使わなくても良いのです。
つまり、定義した変数は、必ず使わないといけないという規則はC言語にはないのです。
(ほかの言語も同様ですが・・・)
普通、変数は、使用するために定義しますが、それを定義だけして使用しなくても良いのです。
これは、例えば、あなたが提示されたプログラムのint heikin;の次の行に、
int i;
と追加し、この変数iを使用しなくても、かまわないということです。
使用しなくても良いという意味は、使用しなくてもエラーには、ならないという意味であり、
それが良いプログラムであるということではありません。
int i;の定義を他の人が見たら、使わないのに何故定義をしているんだという、つっこみが入るかもしれませんで、使わない変数は定義しないほうが、一般的には良いでしょう。
    • good
    • 0
この回答へのお礼

ご回答くださいまして誠にありがとうございました。
int main(int argc, char* argv[ ] )のargcとargvは何のためにあるのか
が最大のこの問題の焦点であります。
 argcとargvは「使わない変数定義」であり、使わないのになぜあるのが不自然と私は思ったので質問したわけです。
 このプログラムをこの方式で機能させるためには、慣例であるargcとargv使用しのだと存じます。
 このプログラムを機能させるためには変数に何らかの文字をいれないと機能しないとの目的でargcとargvと入力したので、何も深い意味がない感じています。
 質問したことで、何かまた知識が増えたみたいで良かった^^

お礼日時:2015/10/10 09:33

プログラムを作った人に聞けばいいのではないでしょうか.

    • good
    • 0

> int main(int argc, char * argv[])


↑これは決まり文句だと思ってください。

これらの変数が使用されていないのは、このプログラムが単にコマンドライン引数を必要としないからです。
逆に言えば、コマンドライン引数を必要とするならこれらの変数を使用することになります。
    • good
    • 0

前回のご質問で回答があったようにargcやargvはコマンドライン引数を取得するためのものです。


ですから今回ご提示のプログラムの様に、コマンドライン引数の情報を使用しない場合は

int main(void)

と書いて、argc,argvを定義しない方法もあります。
ご使用の参考書には、その辺の記述はありませんか?



> 引数の argc argvを定義して同プログラム内で他に使われていないのですが!
> なぜですか


なぜ使用しないのにargv,argcを書いているか、あくまで想像ですが以下のようなことが考えられます。

・ご使用の参考書が初心者向けの為、混乱を避けるために敢えて一種類の書き方をしている。

・参考書の、この後の方でご提示のプログラムをargv,argcを使用するような形に拡張していく為、いまの時点から敢えて書いてある。

・著者は、初心者が今回のご質問のような疑問を感じることを想定して書いていない。
    • good
    • 0

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