- ベストアンサー
関数の引数の書き方。
AとBのどちらの書き方でもよいのですか? 私が読んだ本(やさしいC)には、 Aパターンのみだったような? Aパターン ------------------ void main(int argc,char *argv[]) { int i; ・・・・ } Bパターン ------------------ void main(argc, argv) int argc; char *argv[]; { int i; ・・・・ } http://ash.jp/db/ora_c.htm
- javaeg
- お礼率14% (36/246)
- C・C++・C#
- 回答数5
- ありがとう数4
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
No1の補足でご自身かお書きの通り、ANSIやISOでの標準化前の書式です。 http://ja.wikipedia.org/wiki/C%E8%A8%80%E8%AA%9E#C.E3.81.AE.E8.A6.8F.E6.A0.BC の記述の、「K&R」というのがこの書式です。 ANSI規格化以前は、Cの規格というのが存在しなかったので、「そのときUnixで使われていたCの文法」が事実上の規格でした。世界最初のCについての一般書籍である「The C Programming Language」の著者のカーニハンとリッチの頭文字が K&R で、この本が事実上の規格書でした。第二版はANSI規格のものになっているので、第一版を見る必要があります。訳本だと、 http://www.amazon.co.jp/dp/4320021452
その他の回答 (4)
- wormhole
- ベストアンサー率28% (1621/5657)
>ansi?とかで標準化される前に使っていた書き方でしょうか? ANSI Cで標準化される前というか普及するまでじゃないでしょうか。 今でも使われてることはあるかもしれませんけど。 >ちらほら見かけるので、気持ち悪いです。 過去に書かれたソースやドキュメントもありますし仕方ないかも。
- Tacosan
- ベストアンサー率23% (3656/15482)
「ちょ~昔」 (K&R の初版の時代, 当然 ANSI 標準化以前) は B の書き方しかできませんでしたが, 今では A の書き方をすべきです... というか, B のような書き方をしなければならない事情がないと言っていいでしょう.
お礼
もやもやが、解けました。
- toro-nekomata
- ベストアンサー率45% (24/53)
提示されたURLを見ると,「Pro*C」というプリコンパイラだと出ていますね. そのままC言語と比較してもしょうがないと思います. ちなみに,mainの書き方は,仕様上, 「Aパターンだけ」というわけではないはずです.
補足
ご回答ありがとうございます。 以下のページにもあります。 pro*cではありません。 http://otndnld.oracle.co.jp/document/products/E13161_01/tuxedo/docs10gr3/pgc/pgclt.html 私が、みた本でそう書いて有った様なということです。 仕様上、Aパターンのみとは、思っていません。
- wormhole
- ベストアンサー率28% (1621/5657)
Bパターンはすでに過去のものです。Aパターンで書きましょう。 ついでにmain()関数の型はintですよ。
お礼
もやもやが、解けました。
補足
ごかいとうありがとうございます。 >Bパターンはすでに過去のもの ansi?とかで標準化される前に使っていた書き方でしょうか? ちらほら見かけるので、気持ち悪いです。 検索してもその辺の経緯というか、見つけられません。 気持ち悪いのです。 参考になるページなどあれば、すっきりします。
関連するQ&A
- main の引数には const 付けた方が
C言語での質問です。 引数を取るような main 関数は int main( int argc, char *argv[]){~} とされていますが、argvの指す文字列を変更する、というのはいくら何でもまずいので、 int main( int argc, const char *argv[]){~} あるいは int main( int argc, const char const * const * argv){~} の方がいいのではないでしょうか? 何故、constを付けない形が出回っているのでしょうか?
- ベストアンサー
- C・C++・C#
- 関数へ引数を渡す時・・・(C言語)
Cを始めたばかりです。 レベルの低い質問だと思いますがお願いします。 【ソース】 /* a1.c */ #include <stdio.h> void aaa(char); int main( int argc, char *argv[] ) { char box[] = "test"; aaa(box); return 0; } /* a2.c */ #include <stdio.h> void aaa(char box) { printf( "%s",box ); } 【質問】 変数boxの中身を関数aaaに渡したいだけですが、 上記ソースをコンパイルすると、a1.cの aaa(box) の部分でエラーが出てしまいます。 どうもデータ型(ポインタ?)がまずいようですが、 何が問題なのでしょうか? 御回答宜しくお願い致します。
- ベストアンサー
- C・C++・C#
- コマンドプロンプトを使用してのコマンドライン引数
winXPのコマンドプロンプトを利用して 参考書「独習C」を使い、C言語の学習をしています。 その本の7.4の項目~main()の引数~で main(int argc,char *avgv[])を利用すると コマンドラインから引数をとることができるとありますが 私の学習環境ではうまくいきません。 具体的には #include <stdio.h> int main(int argc, char *argv[]) { int i; for(i=1; i<argc; i++) printf("%s ", argv[i]); return 0; } というプログラムを実行しても何も表示されません。 どうすればコマンドライン引数を利用できますか?
- ベストアンサー
- C・C++・C#
- コマンドライン引数 *argv[]はなぜポインタ?
C言語初心者です。 コマンドライン引数、 int main(int argc, char *argv[]) というのを最近勉強しましたが、引数2番目がポインタになっている理由について、 どなたか教えて下さい。 そういう仕様なんだから、それに従いましょう、ということでしょうか? int main(int argc, char argv[]) では、ダメなのでしょうか? このポインタでの引数渡しについて、 なんらかの納得のいく考え方をご存知の方がいらしたら、教えて下さい。 宜しくお願い致します。
- ベストアンサー
- C・C++・C#
- main(int argc,char **argv[])の意味を教えて下さい
今晩は、Cの初心者です宜しくお願いします。 main関数の引数で、int main(int argc,char **argv[])とint main(int argc,char *argv[])と書かれている場合がありますが、 「**argv」と「*argv」の意味の違いはどのようなもので、どのように使い分けるのでしょうか。 また、必ずポインタ型でとるという決まりでしょうか。 宜しくお願いします。
- 締切済み
- C・C++・C#
- OpenGLで登録したコールバック関数の引数
OpenGLで画面を描画をする際に, 以下のソースのように,glutDisplayFuncに関数を登録しています. main関数で,定義した定数や,そのポインタを display_funcに渡したいと思うのですが, どのような方法があるのでしょうか? 現在,私は,グローバル変数を定義して,それをmain関数とdisplay関数で いじっています. ソースコードの整理,関数化のため,できれば,ポインタや引数を渡したいです. どうぞよろしくお願いします. --------------------------------------------- #include <GL/glut.h> void display_func(void) { 描画内容を記述 } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutCreateWindow(argv[0]); glutDisplayFunc(display_func); glutMainLoop(); return 0; } ---------------------------------------------
- ベストアンサー
- C・C++・C#
- コマンドライン引数argv[]について
C言語初心者です。以下のようなプログラムを書いたのですが、コンパイルで来ません。関数func1, func2を分けずに全てメインに書けば動作するのですが、なぜ関数に分けてしまうとコンパイル出来ないのかがわかりません。エラー内容は、argvが宣言されていない、といった内容です。 #include <stdio.h> void func1(void){ printf("%s\n", argv[1]); } void func2(void){ printf("%s\n", argv[2]); } int main(int argc, char *argv[]){ if(strcmp(argv[1], "abc")==0){ func1(); } else{ func2(); } }
- ベストアンサー
- C・C++・C#
- main関数のとる引数(argc , *argv[])の意味について
今日は、Cの初心者です宜しくお願いします。 main関数(main(int argc , *argv[]))のとる引数、argcのCと*argv[]のVはどのような意味の略なのでしょうか、 なにか意味があるようなきがするのですが。 宜しくお願いします。
- ベストアンサー
- C・C++・C#
- プログラミング(配列と関数の引数)
a : ABCDE a : ABCDEFGH Len : 8 a : FGHIJ a : FGH a : FGH, c : FGH 上記のように表示されるプログラムを作りたいのですが、なかなかできません。下記のようなプログラムを作ったのですがどこが間違っているのかよくわかりません。分かる方、指摘をお願いします。 #include <stdio.h> void my_strcpy(char s[], char t[]); int my_strlen(char s[]); void my_strcat(char s[], char t[]); int main(){ char a[10]; char b[10] = "ABCDE"; char c[] = "FGH"; int len; my_strcpy(a, b); printf("a : %s\n", a); my_strcat(a, c); printf("a : %s\n", a); len = my_strlen(a); printf("Len : %d\n", len); my_strcpy(a, "FGHIJ"); printf("a : %s\n", a); a[3] = '\0'; printf("a : %s\n", a); if(strcmp(a, c) == 0){ printf("a : %s, c : %s\n", a, c); } int i, s, t; my_strcpy(a, b + 2); printf("a : %s\n", a); void my_strcpy(char s[], char t[]){ for (i = 0; t[i] != '\0'; i++){ s[i] = t[i]; } s[i] = '\0'; } int my_strlen(char s[]){ int i; for (i = 0; s[i] != '\0'; i++); return i; } void my_strcat(char s[], char t[]){ int i, j; for (i = 0; s[i] != '\0'; i++); for (j = 0; t[j] != '\0'; i++, j++){ s[i] = t[j]; } s[i] = '\0'; } }
- ベストアンサー
- C・C++・C#
お礼
もやもやが、解けました。