

以下のプログラムで
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;
}

No.4ベストアンサー
- 回答日時:
既に#2の方が述べていますが
int main(int argc, char* argv[ ] )の書き方は
main関数特有の決まりごとだと覚えてください。
そして、argc,argvは使っても良いし、使わなくても良いのです。
つまり、定義した変数は、必ず使わないといけないという規則はC言語にはないのです。
(ほかの言語も同様ですが・・・)
普通、変数は、使用するために定義しますが、それを定義だけして使用しなくても良いのです。
これは、例えば、あなたが提示されたプログラムのint heikin;の次の行に、
int i;
と追加し、この変数iを使用しなくても、かまわないということです。
使用しなくても良いという意味は、使用しなくてもエラーには、ならないという意味であり、
それが良いプログラムであるということではありません。
int i;の定義を他の人が見たら、使わないのに何故定義をしているんだという、つっこみが入るかもしれませんで、使わない変数は定義しないほうが、一般的には良いでしょう。
ご回答くださいまして誠にありがとうございました。
int main(int argc, char* argv[ ] )のargcとargvは何のためにあるのか
が最大のこの問題の焦点であります。
argcとargvは「使わない変数定義」であり、使わないのになぜあるのが不自然と私は思ったので質問したわけです。
このプログラムをこの方式で機能させるためには、慣例であるargcとargv使用しのだと存じます。
このプログラムを機能させるためには変数に何らかの文字をいれないと機能しないとの目的でargcとargvと入力したので、何も深い意味がない感じています。
質問したことで、何かまた知識が増えたみたいで良かった^^
No.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[]) と記述することもできます。(自由です、ただし、おススメはしません)
No.5
- 回答日時:
宣言した変数は必ずしも使用しなくても構わない。
コンパイラによってはコンパイル段階で「この変数は宣言されているが一度も使用されてない」と警告を発することもあるが、プログラマーは承知の上であれば無視しても構わない。
前回の回答では書きませんでしたが、お勧めと思う書籍として以下のようなのがあります。
>C言語逆引き大全 500の極意
>http://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E%E9%8 …
分厚いですが、ここのところ質問を繰り返している「コマンドライン」についても説明があります。
内容を確認してみると、35ページ目と36ページ目のたった2ページしか説明が無い。
言い換えるならば拘るほど重要では無い・・・とも言えそうです。
No.2
- 回答日時:
> int main(int argc, char * argv[])
↑これは決まり文句だと思ってください。
これらの変数が使用されていないのは、このプログラムが単にコマンドライン引数を必要としないからです。
逆に言えば、コマンドライン引数を必要とするならこれらの変数を使用することになります。
No.1
- 回答日時:
前回のご質問で回答があったようにargcやargvはコマンドライン引数を取得するためのものです。
ですから今回ご提示のプログラムの様に、コマンドライン引数の情報を使用しない場合は
int main(void)
と書いて、argc,argvを定義しない方法もあります。
ご使用の参考書には、その辺の記述はありませんか?
> 引数の argc argvを定義して同プログラム内で他に使われていないのですが!
> なぜですか
なぜ使用しないのにargv,argcを書いているか、あくまで想像ですが以下のようなことが考えられます。
・ご使用の参考書が初心者向けの為、混乱を避けるために敢えて一種類の書き方をしている。
・参考書の、この後の方でご提示のプログラムをargv,argcを使用するような形に拡張していく為、いまの時点から敢えて書いてある。
・著者は、初心者が今回のご質問のような疑問を感じることを想定して書いていない。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
newで生成したものをdelete[]で...
-
2重定義って??
-
void func( void )について
-
main.c:7:43: warning: implici...
-
呼び出し時のパラメータが足りない
-
C言語のコンパイルエラー
-
プログラムの中で別のmainを呼...
-
C++のfor文について
-
引数で argc argvが使用され...
-
TCP/IPでのgetsockname()の使い...
-
エラー「invalid conversion fr...
-
namespace定義の使い方
-
C言語の<ctype.h>のisspace()に...
-
VB 関数
-
long型の定数の末尾にLを付ける...
-
main()とint main(void)の違い
-
OpenGLで登録したコールバック...
-
typedef enumの使い方を教えて...
-
外部シンボル未解決
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
main.c:7:43: warning: implici...
-
2重定義って??
-
変数の型を定義しなかった場合...
-
C++でboolにintの値を代入する...
-
typedef enumの使い方を教えて...
-
C++のfor文について
-
intとINTの違いは?
-
【#define】 defineで定義した...
-
ハンドルされていない例外が発...
-
void func( void )について
-
C言語のコンパイルエラー
-
enumについて
-
関数の実体定義にヘッダファイ...
-
C言語 宣言した変数になにも代...
-
C++ クラスをメンバにもつクラ...
-
プログラムの中で別のmainを呼...
-
sshdログの意味
おすすめ情報
皆様ご回答くださいまして誠にありがとうございます。
さて、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言語自体をまだ理解していませんのでそう感じています。