C言語なら俺に聞け( ..
[2ch|▼Menu]
655:デフォルトの名無しさん
08/06/09 04:11:32
>>653
わかりました
「&」ですよね
あとどうでもいいんですけど二つ目のfor文の条件式はi>=0にしないとなんもならないですね
ありがとうございました!
>>654
マジで気づかなかったです
自分の持ってる教本にも
初心者はscanf使う時に&忘れやすいから気をつけてって書いてたんで
これからは忘れずちゃんと&つけたいと思います
簡単すぎる質問でスレ汚したかもしれないです
すいませんでした

656:デフォルトの名無しさん
08/06/09 04:12:15
>>652
scanf("%d",array[i]); > scanf("%d",&array[i]);
なんだかなぁ。

657:デフォルトの名無しさん
08/06/09 04:16:58
コンパイラによってはそれは忠告してくれるようにできるからしとけば?

658:デフォルトの名無しさん
08/06/09 05:48:39
C(hinko)++

659:デフォルトの名無しさん
08/06/09 07:38:27
無料のVC2005使ってデバッカ使ってみれば?

660:デフォルトの名無しさん
08/06/09 11:39:13
入門書にscanfが記載されているのは何でだろう?

661:デフォルトの名無しさん
08/06/09 11:59:02
たぶんこう

定数同士の計算じゃつまらないので何か入力させてその値に対して計算をさせたい
でもまだ文字列の説明はしていない
→ scanf

662:デフォルトの名無しさん
08/06/09 12:01:15
おまじないでおk
#include とか
scanf printf みたいな可変長引数をとる関数とか
気にしてたら何もできない

663:デフォルトの名無しさん
08/06/09 12:07:58
本の構成を変えればいいのに。。。。

664:デフォルトの名無しさん
08/06/09 13:54:00
>>663
無理だろwww
プリプロセス単体の説明からはじめるのかよwwwww

665:デフォルトの名無しさん
08/06/09 14:04:43
別にscanfから初めてもいいと思う
前置きで、あまり使うべきでない関数だと断った上で

666:デフォルトの名無しさん
08/06/09 15:01:00
#include <stdio.h>

int zel(int y, int m , int d) {
if(m<=2) { y--; m+=12; } // 1,2月は前年の13,14月として扱う
return ( y + (y/4) - (y/100) + (y/400) + ((13*m+8)/5) + d) % 7;
}

int main(void)
{
int year,month,cnt;

for (year=2001,cnt=0; year<=2100; year++) {
for (month=1; month<=12; month++) {
if( zel(year,month,13)==5 ) {
cnt++;
}
}
}
printf("%d回\n",cnt);
return 0;
}

このプログラムをmain関数のみで作ることって出来ますか?
if文とfor文ぐらいしか習ってないんですが…

667:デフォルトの名無しさん
08/06/09 15:07:35
出来ます。

668:デフォルトの名無しさん
08/06/09 15:10:12
>>667
すみませんが、教えてもらえませんか??

669:デフォルトの名無しさん
08/06/09 15:27:04
#include <stdio.h>

int main(void)
{
     int year,month,cnt,zelAns,y,m,d;

     for (year=2001,cnt=0; year<=2100; year++) {
          for (month=1; month<=12; month++) {
               y = year;
               m = month;
               d = 13;
               if(m<=2) { y--; m+=12; } // 1,2月は前年の13,14月として扱う
               zelAns = ( y + (y/4) - (y/100) + (y/400) + ((13*m+8)/5) + d) % 7;
               if (zelAns == 5) {
               //if( zel(year,month,13)==5 ) {
                    cnt++;
               }
          }
     }
     printf("%d回\n",cnt);
     return 0;
}

これでOKかな・・・?間違ってたら指摘にょろ

あと2chでインデント維持のためTAB1個を全角スペースx5に変換してるので
コピーする場合はエディタなどで修正必要?

670:デフォルトの名無しさん
08/06/09 15:29:20
>>668

#include <stdio.h>
int main(void) {
int year,month,cnt, y, m;
for (year=y=2001,cnt=0; year<=2100; year++) {
y = year;
for (month=1; month<=12; month++) {
m = month;
if (m <= 2) {
y--;
m+=12;
}
if (((y + (y/4) - (y/100) + (y/400) + ((13*m+8)/5) + 13) % 7) == 5) {
cnt++;
}
}
}
printf("%d回\n",cnt);
return 0;
}

適当なのであってるかしらんよ。
で、これ宿題?

671:デフォルトの名無しさん
08/06/09 15:41:55
>>669 >>670
ありがとうございます。

これ宿題です。

672:デフォルトの名無しさん
08/06/09 15:45:03
>>671

今度から宿題はここで聞くといいよ。

スレリンク(tech板)



673:デフォルトの名無しさん
08/06/09 16:43:53
リナックスの問題で
1+(1+2)+(1+2+3)+(1+2+3+・・・+n)
二重ループを用いて書いてください。
よろしくお願いします

674:デフォルトの名無しさん
08/06/09 16:47:24
宿題は宿題スレへ

675:デフォルトの名無しさん
08/06/09 16:51:56
for(s=0, i=1; i<=n; i++) for(j=1; j<=i; j++) s+=j;

676:デフォルトの名無しさん
08/06/09 16:59:58
++習ってないw

677:デフォルトの名無しさん
08/06/09 17:07:49
すみません教えてください・・・頭から湯気でた
入力文字を5文字制限に制限をして、あふれたら収まるまで警告を出すプログラム
を考えているんですがめちゃくちゃになってしまいました・・・

#include <stdio.h>
int main(void){
char namae[5];
do{
scanf("%s", namae);
if(namae[5] > sizeof(namae)){
printf("文字数オーバーです。もう一度入力してください。");
}
else if(namae[5] < sizeof(namae)){
break;
}
}
while(namae[5] > sizeof(namae));
printf("%d", sizeof(namae));
}

文字数の比較でsizeof()を使ってます・・・上記のコードでやると、
namaeの中身がリセットされずに延々と増えていってしまいどうしたらいいのかわからなくなりました・・・

スマートなやり方はないでしょうか?どうかご教授ください・・

678:デフォルトの名無しさん
08/06/09 17:09:26
printf("%d", sizeof(namae));
↑これ間違えました・・・・さっき実験してたやつです・・・
printf("%s", namae)でした・・・

679:デフォルトの名無しさん
08/06/09 17:18:52
namae[5] < sizeof(namae))
  ↑
そもそも、これが(namae[5])何を指しているのか、良く考えた方がいい

つstrlen()



680:デフォルトの名無しさん
08/06/09 19:42:17
URLリンク(www.geocities.jp)
こういうプログラムを実行したときに
void型はnode型に変更できませんってなるのはなぜでしょうか

681:デフォルトの名無しさん
08/06/09 19:48:35
なんとなくだけど
voidはmallocで確保した際の戻りアドレスで
nodeは構造体

キャストがうまく出来てない?

682:デフォルトの名無しさん
08/06/09 19:59:05
エラーだそうと思ったらそのままコンパイル通ってしまって確認が出来ん

>>681の通りだと
111行目あたりの
new_node = malloc( sizeof( struct node ) );

new_node = (struct node*)malloc( sizeof( struct node ) );
に変えてみるとかどうだろうか

683:デフォルトの名無しさん
08/06/09 20:02:40
>>680
こういう・・・ということは自前で用意した物ってことか?
うまく行かないソースとエラーになる行番号をせめて書いたほうがいいよ。

684:デフォルトの名無しさん
08/06/09 20:18:57
winapiとかdirectxとかそういうの使わないでGUIって作れるもんなの?

685:デフォルトの名無しさん
08/06/09 20:20:13
そういうのってのがどういうのを指してるのかは知らんが
標準Cだけじゃ無理

686:デフォルトの名無しさん
08/06/09 20:26:36
C言語そのものには画面という概念すらないからねぇ

687:デフォルトの名無しさん
08/06/09 20:29:36
一応バックスペースとかラインフィードとかあるけど、
このあたりは画面というよりむしろプリンタを想定している所が大きいんだよな。

688:デフォルトの名無しさん
08/06/09 20:31:19
windowsのような環境は無理だろうな
DOSとかのようなシングルタスクな環境だと
VRAMのアドレスとかわかれば直接アクセスできたりするんだけど。

689:デフォルトの名無しさん
08/06/09 20:34:23
PC-98はDOS画面に壁紙貼ったりできたなぁ‥‥なつかしい。

690:デフォルトの名無しさん
08/06/09 20:37:05
CでOSから書けばいいじゃん。

691:デフォルトの名無しさん
08/06/09 20:43:40
>>690
一からOS作ってもwindowsのようなGUI形態とる場合は
結局同じようなAPIの道を歩むと思うので無駄。
素直にAPIたたけ。
それがいやなら、DOSでやれってことだな。
でもDOSでやるとなると今度はもっと大変なんだけどな。

692:680
08/06/09 20:49:49
>>681 >>682 >>683

実行時のエラーです、行数は同じです,お願いします

> C:\borland\bcc55\Bin\make.exe -fDebug\test.mak -B TARGET
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -WC -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c C:\MyC\test\test.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
C:\MyC\test\test.cpp:
エラー E2040 C:\MyC\test\test.cpp 15: 宣言が正しく終了していない
エラー E2034 C:\MyC\test\test.cpp 24: 'void *' 型は 'node *' 型に変換できない(関数 main() )
エラー E2158 C:\MyC\test\test.cpp 50: 'delete' のオペランドは非 const ポインタでなければならない(関数 main() )
エラー E2034 C:\MyC\test\test.cpp 111: 'void *' 型は 'node *' 型に変換できない(関数 add(int) )
エラー E2040 C:\MyC\test\test.cpp 124: 宣言が正しく終了していない
*** 5 errors in Compile ***

** error 1 ** deleting Debug\test.obj

Build End !! (Elapsed time 0:00.871)

693:デフォルトの名無しさん
08/06/09 20:54:37
CのコードをC++としてコンパイルして上手くいくわけないだろ。違う言語だぞ。

694:デフォルトの名無しさん
08/06/09 20:55:07
>>689
おっ・・・オサー・・・ん?

695:デフォルトの名無しさん
08/06/09 21:00:10
E:\Test>bcc32 a.cpp
Borland C++ 5.6.4 for Win32 Copyright (c) 1993, 2002 Borland
a.cpp:
エラー E2040 a.cpp 15: 宣言が正しく終了していない
エラー E2034 a.cpp 24: 'void *' 型は 'node *' 型に変換できない(関数 main() )
エラー E2158 a.cpp 50: 'delete' のオペランドは非 const ポインタでなければならない(関数 main() )
エラー E2034 a.cpp 111: 'void *' 型は 'node *' 型に変換できない(関数 add(int) )
エラー E2040 a.cpp 124: 宣言が正しく終了していない
*** 5 errors in Compile ***

E:\Test>ren a.cpp a.c

E:Test>bcc32 a.c
Borland C++ 5.6.4 for Win32 Copyright (c) 1993, 2002 Borland
a.c:
Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland

こういうこったな

696:デフォルトの名無しさん
08/06/09 21:09:24
mallocで確保したメモリ領域のサイズの求め方について分からないので
教えてください。下記のコードでは、出力される結果はchar型へのポインタの
サイズだと思いますが、メモリで確保した領域を取得する関数などは在りますか?

処理系はcygwin + gcc です。ウェブで検索するとmalloc.hにてmalloc_usable_size
という関数が紹介されていたのですが、私の環境では関数がない様でした。

int main (void){
  char *str;

  str = malloc(sizeof(char)*10);
  printf("sizeof(str)=%d\n", sizeof(str));

  return 0;
}

また、こういった動的に確保した場合の処理は皆さんはどの様に処理していますか?
やはり、自分でメモリ領域管理変数などを用意するのでしょうか?

697:デフォルトの名無しさん
08/06/09 21:10:29
>>692
C++ コンパイラ使うなら 15行目の delete は使えない(C++ のキーワードだから)

修正は次の通り
delete() → del() とかにする。3箇所
15: int del(int);
50: if( del(data) != 0)
124: int(del int data)


C++ ならキャストをしっかりと。2箇所
24: root = (node*) malloc(...
111: new_node = (node*)malloc(...


>>693
この程度 C ソースなら少し気をつければ C++ で動くで。

698:デフォルトの名無しさん
08/06/09 21:11:02
初心者はSTL

699:デフォルトの名無しさん
08/06/09 21:14:55
sizeof(str)
これだとポインターのサイズじゃねーの?

sizeof(char)*10
これを確保してるんだから
char型は1バイト、それを10個確保してるのが今回のサンプル

でmallocの場合は確保するサイズは自分でわかってないと無理でしょ・・・

int main (void){
  char *str;
unsigned long malloc_size;

malloc_size = sizeof(char)*10;

  str = malloc(malloc_size);
  printf("sizeof(str)=%d\n", sizeof(str));

  return 0;
}

700:デフォルトの名無しさん
08/06/09 21:15:39
  printf("sizeof(str)=%d\n", sizeof(str));

じゃないや

  printf("sizeof(str)=%d\n", malloc_size);

701:デフォルトの名無しさん
08/06/09 21:22:21
>>696
自分が確保するときに指定したサイズを知る方法を教えてくれってw

702:696
08/06/09 21:31:51
>699
レスありがとうございます。


>sizeof(str) これだとポインターのサイズじゃねーの?
 この書き方だとポインタサイズになってしまうが、mallocした領域サイズを
自分でずっと管理するのは面倒だな・・・。もしかして、領域サイズを取得する関数や、
手法がないのかなと思い、サンプル的にそのコードを出しました。
かえって意図が伝わり難くなったようですいません。


>701
やはり、動的取得の場合は無理なのですね。自分で管理することにします。

703:デフォルトの名無しさん
08/06/09 21:31:57
>>696
free(); を忘れないでね

704:680
08/06/09 21:32:06
>>697
ありがとうございます
エラーなく実行できました

705:デフォルトの名無しさん
08/06/09 21:34:25
>>696
sizeof(str) はあくまでも ポインタのサイズ。
ポインタの実態はアドレスの番地が管理されているため
環境にもよるが、アドレスを2^32まで割り当てられる環境では
変数の型がなんであれ、ポインタ自身のサイズは 4byte かと。

706:デフォルトの名無しさん
08/06/09 21:35:50
atoi(change)=="キムタクの頭"

707:デフォルトの名無しさん
08/06/09 21:47:46
すでに分かってる数字を改めて別のところから求めなおすのはムダ以外の何者でもない

708:696
08/06/09 21:59:30
>707
少数の変数を使用して、確保するので有ればその通りだと思います。
しかしながら、確保する領域が処理したいデータによって動的に、しかも多数
管理していく必要が出てきた場合、メモリ管理を自動化できるならば、
(この場合はメモリ確保領域をシステムに任せたいということですが)そうした方が
楽だと思います。また、そういったニーズは出てくるものではないでしょうか?

ここの方ならば、そういったノウハウをもしかして持っているのではないかと思い、
質問した次第です。


それならC以外の言語を使えというのはもっともだと思いますが。



709:デフォルトの名無しさん
08/06/09 22:02:15
うん、そういうことを自分でやるのが嫌ならC以外を使えでイナフ

710:デフォルトの名無しさん
08/06/09 22:02:31
gccの独自拡張とかc99でよければこうすればsiseofできるようになるけどwwww
int main()
{
int x;
x = 10;
char (*y)[x];
y = malloc(x);
printf("%d\n", sizeof(*y));
return 0;
}

711:デフォルトの名無しさん
08/06/09 22:03:35
typedef struct
{
    int length;
    char *str;
}VARCHAR;
みたいにくっつけて扱え

712:デフォルトの名無しさん
08/06/09 22:04:56
>>710
意味ねぇー(笑

713:デフォルトの名無しさん
08/06/09 22:05:06
>>710
変更できねーじゃんw

714:デフォルトの名無しさん
08/06/09 22:05:08
できないこともないけど、取り扱い注意

715:696
08/06/09 22:09:35
>710
ありがとうございます。参考にさせていただきます。


>711
やはり、そのように管理するのがスマートですね。その様に実装していこうと
思います。


みなさん、変な質問に答えてください、ありがとうございました。


716:デフォルトの名無しさん
08/06/10 00:06:55
文系大学生なんですが画像処理のためにC言語を覚えることにしました。
そこで今日書店に指南書を探しにいったのですがいまいちどれもとっつきにくく帰ってきました。
プログラムとはそもそも何かという概念的な事から始まり、揃えるべき環境(ツール)が細かく指定されてる超入門書ってないでしょうか?

717:デフォルトの名無しさん
08/06/10 00:09:20
推薦図書/必読書のためのスレッド 40
スレリンク(tech板)

718:デフォルトの名無しさん
08/06/10 00:09:35
>>716
>>651

719:デフォルトの名無しさん
08/06/10 00:12:31
>>716
本いるか・・・?

ネットで十分だろ。

720:デフォルトの名無しさん
08/06/10 00:13:29
さぁなぁ、それよりもまず 基本 仕組み を理解した方が良い。
いきなりコードを書いて、なんかで(・∀・)キターーじゃ話にならん。
どんな環境、プログラム言語も、動作させるコンピュータの仕組み
内面的な部分に命令を与えているわけだし、0と1の演算処理を
様々な変数、演算子、アルゴリズムで制御しているわけだ。

また、どんなコンピュータでもいえる事が、何かデータ、数値を与えて
与えられたデータを目的に応じて処理した結果を扱っているわけだ。
あとはそれを、人間が解釈できる形、例えば文字、色、画像、音声などで
表現できるコンピュータで都合よく見て理解しているわけだ。
画像だろうと音声データだろうと文字データだろうと、所詮は0と1の
バイナリーで他の塊に過ぎんのさ。

必要に応じて物を用意する。それは他のことでも言えること。
ただ、何があって何が出来るか?それを多少なりと把握しておく必要はある。

さて、何を見れば良いか?それは、他の人に聞いてくれ。

721:デフォルトの名無しさん
08/06/10 00:14:41
すいません既出でしたか、そちらを見てみます。
>ネットで十分だろ。
どうも実体があると落ち着くもので・・・。

722:デフォルトの名無しさん
08/06/10 00:16:39
とっとと消えろカス

723:デフォルトの名無しさん
08/06/10 00:36:59
>>722

724:デフォルトの名無しさん
08/06/10 02:08:41
何でも良いとは言えんが、とりあえずありきたりの内容が載っているものを。
って、何がありきたりか・・・配列、文字列、ポインタ、関数の自作、
素数、最大公約数、ソート、ファイルのダンプなど等、もちろんそれ以外でも
あれこれ挙げたらキリがないが。結局、何が目的か?

725:デフォルトの名無しさん
08/06/10 02:12:17
目的ありきだろ。

韓流スター見たさに、韓国語覚えたおばちゃんを見習え。
何もする予定無いのにC言語覚えても身につくわけない。

726:デフォルトの名無しさん
08/06/10 03:26:19
>>725
>>716をもう一度読むんだ

727:デフォルトの名無しさん
08/06/10 03:42:29
画像処理ったって、結局画像データを構成している実態は
0と1の組み合わせの塊を、必要に応じて展開、処理するわけでしょ?
BMPだと分かりやすいが、SVGはおりはさっぱりでやんす。
一応、XMLで記述されているとのことで、テキストエディタでも可能とかなんとか。
まぁ、それは画像編集であって、そんな編集するプログラムを作れるかは別だが。

728:デフォルトの名無しさん
08/06/10 03:44:05
画像処理ってのがかなり大きなくくりなんだよな・・・
画像処理でもwindows上でUSBカメラからの映像を・・・とか
マイコンで処理・・・とか

でぜんぜん扱いも違うしな。

729:デフォルトの名無しさん
08/06/10 05:10:54
GOTO文を使うなって学校教えられましたが、
実際の会社のプログラムとかでもやはり使わないのですか?

730:デフォルトの名無しさん
08/06/10 05:15:51
>>729
使わないね・・・

使わないように組めるようになるよ。

731:デフォルトの名無しさん
08/06/10 07:39:19
エラー処理と多重ループから抜けるのとで使う。
それ以外では使わない。

732:デフォルトの名無しさん
08/06/10 07:45:30
個人開発なら好きにしてもいいと思うが、仕事じゃ絶対ダメだな
俺は個人でも絶対使わないが

733:デフォルトの名無しさん
08/06/10 08:36:14
GOTO使わないからといってもプログラムがきれいになるわけでもないけどな。

734:デフォルトの名無しさん
08/06/10 09:45:50
なぜ使うなと言われるのかをちゃんと理解した上で
それでもここでは使うべきだ!と思うなら使っていい

735:デフォルトの名無しさん
08/06/10 11:16:09
むしろ仕事では使うが個人では絶対使わない

736:デフォルトの名無しさん
08/06/10 11:19:31
うまく機能分割して関数化していくとreturnで
GOTOの代わりのようにしちゃうこともあるな。

737:デフォルトの名無しさん
08/06/10 13:23:51
>>729
Cやその他の構造化言語を使うほぼ全ての人が、みだりに goto を使うことはよくないと考えている。
構造化プログラミングの恩恵は、コードの総体が構造的であるときに最もよく受けられるものだが、
goto はまったく構造的でないからである。特に複数の人間が長期に渡ってプロジェクトに関わるような
プログラム開発の現場では、保守性を低下させるとの観点から絶対に認めないとする場合も多い。

goto を使いたくなる全ての場面は、goto を使わなくても構造的な手法によって解決することができる。
特に小さいけれど結構ややこしい処理を敢えて関数に分割することで解決することができる。
あるいはちょっと手間をかけてフラグ変数を配備したり、ブロックの構成を工夫することなどがある。

しかし、ある種の処理を行う場合には goto を使うことをためらうことはないと考えている人も少なくはない。
最たるものはエラー処理である。エラーというものはその性質上、予定していた処理を全て切り上げて
制御を呼び出し元に返すことになる場合がほとんどだが、プログラムが複雑なものになってくると、
特にメモリの動的な割り付けを噛ませている場合などは、率直に return する前のちょっとした後片付けが
どうしても必要になってくることが多々ある。もちろんこれは構造的に解決することができるものであるが、
しかし構造が複雑化して却って可読性が低下したり、やたらと細かい関数分割になってしまう場合もある。
そういうことを嫌う人は、関数の末尾にだけジャンプして最低限の後始末だけを行うという限定つきで、
goto を使うことを容認していることがある。

構造化と効率は決してトレードオフの関係ではないが、どんな場合でも構造化を押し通そうとすると、
性能や保守性を低下させてしまうこともある。プログラムは常に構造的に書くことができるけれど、
プログラムで実際に解決しようとしている現実の諸問題、そして人間の思考方式そのものは、
必ずしも構造的でないからである。もちろん大抵は取るに足らない性能差で、コンパイラの最適化や
プロセッサの能力で消されてしまうが、問題となることももちろんある。そのような場面に直面したとき、
ここは goto を使うべきだと信じるなら、そうすればよい。それ以外では思いとどまったほうが無難である。

738:デフォルトの名無しさん
08/06/10 13:37:11
ループが最後まで回ったときだけ実行されるものがあるとgoto使いたくなるな。
実際はフラグにして使わないけど。

739:デフォルトの名無しさん
08/06/10 13:56:51
内容が長くなりすぎて削ってしまったが念のため書いておくと、
switch や break や continue や return も構造的でないジャンプ構文であり、
本質的には goto の同類である。これらの中から特に goto が取り上げられるのは、
そのジャンプする先を知ることが特別に難しいためだ。
だから goto を容認する人は、上の例でもあるように「関数の末尾にだけ飛ぶ」と言うような
処理の追跡を容易にするためのルールを作っていることがほとんどである。

740:デフォルトの名無しさん
08/06/10 14:08:15
ろ、longjmp・・・

741:デフォルトの名無しさん
08/06/10 14:10:10
>>737
>739だけ読んだ。

742:デフォルトの名無しさん
08/06/10 15:48:34
構造化以前のBASIC、77より古いFORTRAN、85より古いCOBOL
みんなGOTOで大きくなった。
そんななかでもGOTOの使い方にはマナーはあったのだ。

743:デフォルトの名無しさん
08/06/10 15:55:16
GOTOで戻ってループを作らないとかそんなんだろ

744:デフォルトの名無しさん
08/06/10 16:44:43
ifとgotoさえあればいいよね。

745:デフォルトの名無しさん
08/06/10 16:53:54
宿題のスレで goto 使ってみるかな。

嫌がらせかな?

746:デフォルトの名無しさん
08/06/10 16:57:14
ECHO OFF
:LOOP
ECHO 続けますか?
PAUSE
GOTO LOOP

747:デフォルトの名無しさん
08/06/10 16:59:22
続行するには何かキーを押してください . . .

748:デフォルトの名無しさん
08/06/10 17:02:34
^C

749:デフォルトの名無しさん
08/06/10 17:08:57
>>745
gotoは習ってないので使わないでお願いします
って言われるのがオチ

750:デフォルトの名無しさん
08/06/10 17:27:21
>>749
今の学校では習わないのかな?


751:デフォルトの名無しさん
08/06/10 17:27:59
おしえなくていいよ

752:デフォルトの名無しさん
08/06/10 17:33:38
だな〜
GOTOはどうしようも無いケースで使う最後の手段と思ってたほうがいいな。


753:デフォルトの名無しさん
08/06/10 17:48:37
ふむ、俺は教えて方が言いとおもうけどな。

まぁ、使うことが「滅多に」無いのは認めるがね。

754:デフォルトの名無しさん
08/06/10 17:58:29
GOTOスレあったけど、もう使い切ってたか。

755:デフォルトの名無しさん
08/06/10 19:02:45
最初に教えると使っちゃうんだよ、決まった場所に飛ぶだけから超初心者には分かりやすいと感じるんだよ
forなんか人によってはなかなかわかってくれないもの

756:デフォルトの名無しさん
08/06/10 19:39:34
goto文がスパゲッティーとよく言われるが、
俺的にはgoto文は適度に使う分には全く問題ない。むしろ見やすい
1関数に1個なら大丈夫だろ

757:デフォルトの名無しさん
08/06/10 19:42:26
>>756
スパゲッティってのは時間をおいて固まってからが本領発揮なんだぜ?

758:デフォルトの名無しさん
08/06/10 19:42:47
自分で書いたソースだからじゃね?

759:デフォルトの名無しさん
08/06/10 19:52:05
そもそもスパゲッティはスパッゲティコードと呼ばれるような絡まり方はしない。

760:デフォルトの名無しさん
08/06/10 20:05:42
スパゲッティーミートクソース

761:デフォルトの名無しさん
08/06/10 20:06:21
ほそい麺でぺペロンつくると案外からまる

762:デフォルトの名無しさん
08/06/10 20:06:46
イヤホンコードが最強

763:デフォルトの名無しさん
08/06/10 21:06:09
最強は素麺でしょ?

764:デフォルトの名無しさん
08/06/10 21:13:23
物置にしまっといたロープ

765:デフォルトの名無しさん
08/06/10 21:28:20

void main(void)と
int main(void)の使い方の違いを教えて下さい

main関数はint型で戻り値が0かどうかで正常かエラーか判断するから
int main(void)の方が使い方としては正しいみたいだけどじゃあなぜ
void main(void)なんて教えたりするんでしょう?
return 0;を省略できるからでしょうか?

766:デフォルトの名無しさん
08/06/10 21:31:34
>>765
void main(void) は常に間違いである。
int main(void) または int main(int argc, char **argv) を使え。)

767:デフォルトの名無しさん
08/06/10 21:32:29
>void main(void)なんて教えたりするんでしょう?
教えてる人間がバカだから

768:デフォルトの名無しさん
08/06/10 21:32:34
最強は釣り糸でしょ?

769:デフォルトの名無しさん
08/06/10 21:36:22
>>766
void main(void) は常に間違いである。は間違いである。

770:デフォルトの名無しさん
08/06/10 21:37:28
11.14:
void main()と宣言してうまくいかないわけがないと思う。なぜならmain()から戻る代わりに、exit()を呼んでいるから。だいたい今使っているOSはプログラムのexit値/戻り値を無視する。

A:

main()から戻ってくるかどうかは関係ないし、そのステータスを見るかどうかも関係ない。問題はmain()の宣言がおかしいと、呼び出し側(実行時のスタートアップのコード)がmain()を正しく呼び出すことすらできないかもしれないことにある。

君が使っているOSは終了時のステータスを無視して、void main()でもうまく動くかもしれない。しかし、このやりかたは移植性が低いし、正しくもない。



771:デフォルトの名無しさん
08/06/10 21:37:47
Cなら、int main(void) か int main(int argc, char** argv) です。
それ以外は、間違いである。

(動くけどね)

772:デフォルトの名無しさん
08/06/10 21:38:33
引数はもっとおおくてもいいんじゃねーの?

773:デフォルトの名無しさん
08/06/10 21:39:51
処理系がもっと引数の多いエントリポイントを認めているなら、もっとおおくてもいい

774:デフォルトの名無しさん
08/06/10 21:42:33
逆に言えば、処理系が文書で認めていればvoid main(void)もありだよ。
良しと書いてあるマニュアルなんて今まで見たことがないけど。

775:デフォルトの名無しさん
08/06/10 21:43:59
取りあえず、void main(void) とか書いてある書籍は買うな。


776:デフォルトの名無しさん
08/06/10 21:45:49
失礼ですが、この意味を教えていただけないでしょうか?
まだC言語などを始めたばかりの初心者です。
エラーメッセージでこのような文章が出てきました。
undefine:n
どなたかよろしくお願いします

777:デフォルトの名無しさん
08/06/10 21:46:31
まず辞書を引けカス
naが定義されてないようです

778:デフォルトの名無しさん
08/06/10 21:50:47
分かりました。
void main(void)は使わないようにします

779:デフォルトの名無しさん
08/06/10 22:32:05
int main()
じゃあかんの?

780:デフォルトの名無しさん
08/06/10 22:33:13
いいよ

781:デフォルトの名無しさん
08/06/10 22:34:39
実験で書いたソース、ことごとくmain()でごめんなさい。

782:デフォルトの名無しさん
08/06/10 22:37:13
Cでは、明示的にvoid を書かないといけなかったはず。

783:デフォルトの名無しさん
08/06/10 22:37:51
じゃあ書かなかったらどうなるの?


784:デフォルトの名無しさん
08/06/10 22:38:23
たまには調べたら

785:デフォルトの名無しさん
08/06/10 22:39:12
皮肉もわかんないんですか?w

786:デフォルトの名無しさん
08/06/10 22:42:25
>>782
嘘をつくな

787:デフォルトの名無しさん
08/06/10 22:42:57
かかないと、古い形の函数定義になる。
C89ではblessed。

788:デフォルトの名無しさん
08/06/10 22:46:15
おまいら、勉強不足だね

789:デフォルトの名無しさん
08/06/10 22:47:04
>>788
煽るだけですか?w

790:デフォルトの名無しさん
08/06/10 22:48:40
>>785

日本語、勉強しておいで

791:デフォルトの名無しさん
08/06/10 22:49:58
お前らいい加減にしろよ!

792:デフォルトの名無しさん
08/06/10 22:50:41
今日は大漁ですな。

793:デフォルトの名無しさん
08/06/10 22:51:06
ここまで俺の自演

794:デフォルトの名無しさん
08/06/10 22:57:50
>>789

お前もだろw


795:デフォルトの名無しさん
08/06/10 23:36:11
int main (int argc, char *argv[], char *envp[])

796:デフォルトの名無しさん
08/06/10 23:47:49
またしょーもないことでのびてんんあ

797:デフォルトの名無しさん
08/06/10 23:52:53
こういう専門スレだと知識がない奴は揚げ足を取るぐらいしかレスできないからな…

798:デフォルトの名無しさん
08/06/11 00:00:45
取りあえず、無視しましょう。

799:デフォルトの名無しさん
08/06/11 00:08:49
#if 0
aori();
#endif

800:デフォルトの名無しさん
08/06/11 00:10:40
11.13:
main関数の3番目の引数envpは。

A:

これは(よく見かけるけれど)標準でない拡張である。標準で用意されているgetenv()関数が提供すること以上に環境の情報が必要ならば、グローバル変数environを使うほうがまだましな手段だろう(これも同 じように標準ではないが)。

References:
ANSI Sec. F.5.1; ISO Sec. G.5.1; H&S Sec. 20.1 pp. 416-7.

801:デフォルトの名無しさん
08/06/11 00:12:41
C99って、広まってるの?

802:デフォルトの名無しさん
08/06/11 00:14:14
いいえ

803:デフォルトの名無しさん
08/06/11 00:19:48
VC++はシカトしてます
C++と互換性のない部分はやる気なし

804:デフォルトの名無しさん
08/06/11 00:21:18
C++と分化しちゃってってなぁ・・・

805:デフォルトの名無しさん
08/06/11 00:29:14
VC++は%aとかintptr_tとかおいしい(?)とこだけかじっている。
ほかには__restrictや__pragmaなども。

806:デフォルトの名無しさん
08/06/11 00:39:37
>>766
ダウト。”常に”も”間違い”でもないよ。環境による。
とりわけ、ISO、ANSI 準拠では main は int 型の変数を返すことになっている。
環境にもよるということで、必ずしもそうとは言えないし、少なくとも 間違い ではない。

807:デフォルトの名無しさん
08/06/11 00:43:16
日本語でおk。

void main(void) は移植性は悪いが
その処理系で定義されているなら
その処理系でしかそのプログラムをコンパイルできない可能性があってもいいのであれば
使っても構わない。

ただ、入門書で使うのはどうかしてるよね。
VC++ しかコンパイラ知らないんじゃないかと。

808:デフォルトの名無しさん
08/06/11 00:43:53
vcでこそ怒られるとおもうがw

809:デフォルトの名無しさん
08/06/11 01:00:43
最近のVCは怒るのか

810:デフォルトの名無しさん
08/06/11 01:02:49
VCは、比較的厳しい方だと思うぞ
gccの方が柔軟なイメージがある

811:デフォルトの名無しさん
08/06/11 01:05:30
void mainにしたところでどれくらい変わるか知らないけど、
わかりやすい説明ができるなら入門書の内容に移植性なんか必要無いと思う

コンパイラとか環境までオマケでついてるような書籍なら。

812:デフォルトの名無しさん
08/06/11 01:08:33
必要ありすぎる。
移植性の無いコードなんて初心者に見せるもんじゃない。

813:デフォルトの名無しさん
08/06/11 01:13:08
なにも知らない初心者のうちからint main(void)で叩き込んどけば
後からの余計な手間がかからないだろ。

814:デフォルトの名無しさん
08/06/11 01:23:27
gccはデフォルトはデレデレ。-Wall -pedantic-errorsでツンツンになるよ。

815:デフォルトの名無しさん
08/06/11 01:25:49
-ansi -pedantic-errors -Wall
-std=c99 -pedantic-errors -Wall

のどちらかは必ず付けるね。

816:デフォルトの名無しさん
08/06/11 01:26:03
-Wもつけないと

817:デフォルトの名無しさん
08/06/11 01:28:28
man gcc にはそんなの載ってないけど、バージョンによるのかな。

818:デフォルトの名無しさん
08/06/11 01:30:31
gccだと、enum定義でカンマの後ろに}を書いてもコンパイル通るんだっけ

819:デフォルトの名無しさん
08/06/11 01:31:30
>>818
c89だとだめで独自拡張でアリでc99だとアリだった気がする

820:795
08/06/11 01:31:51
>>800
>>774
ANSIにも参考情報として載るくらいメジャーな拡張を書いただけだが
わざわざ補足ありがとうね

821:デフォルトの名無しさん
08/06/11 01:32:21
>>773だったorz

822:デフォルトの名無しさん
08/06/11 02:00:15
>>806
「規格には反しているが処理系によっては動く」ということを間違いでないと断定することは、
ありとあらゆる規格に反する書き方が間違いでないことになる可能性があることに気付いているか。
文法が正しいか正しくないかは、プログラムが動くか動かないかとは本質的に別の問題である。
文法は守るべきものであり、仮に文法に反することが容認されるとしても、それは正しいからではない。


823:デフォルトの名無しさん
08/06/11 02:03:26
>>822
> 処理系によっては動く
ダウト。処理系ではなく開発環境。
ちゃんとある標準化に対して準拠する場合と、そうでなくても
問題のない開発環境についてとは話は別。よって、常にでも間違いでもない。
強いていうなら、ちゃんと補足しないと誤解を招くよ。知ったかだと。

824:デフォルトの名無しさん
08/06/11 02:04:50
>>822
では、何で 間違い か、お答え頂こう。標準化機構はあくまでも標準的な
スタイルについての話であって、そのもの自身が 間違い とは定めてはいない。

825:デフォルトの名無しさん
08/06/11 02:09:33
>処理系ではなく開発環境。
(゚д゚)エー

826:デフォルトの名無しさん
08/06/11 02:12:16
処理系と開発環境って事実上同じものじゃないの?
少なくとも実装を問題にする場合の開発環境は。

827:デフォルトの名無しさん
08/06/11 02:13:06
>>822
>ありとあらゆる規格に反する書き方が間違いでないことになる可能性があることに気付いているか。
ありとあらゆる規格に反する書き方が間違いでないことになる可能性はあるのだが。
ただし、文書で示す必要はあるが。

828:デフォルトの名無しさん
08/06/11 02:16:16
おまえら本当にどうでもいいことで言い合うのが好きだな

829:デフォルトの名無しさん
08/06/11 02:18:37
むしろ、int main としておきながら return int型の数値; が無い方が間違いである。
というか、コンパイラで警告が出る。

830:デフォルトの名無しさん
08/06/11 02:20:21
>829
なぜ今そんな当たり前のことを

831:デフォルトの名無しさん
08/06/11 02:22:16
処理系:ソースコードを実際に動かせるようにするもの。
開発環境:プログラムを作るためのツールの集合。処理系を含む。

コードの動作を問題にしてるならふつー同じものだと思いますね

832:デフォルトの名無しさん
08/06/11 02:22:25
>>829
C99 で省略時には末尾に return 0; があるのと同じとされるようになった。

833:デフォルトの名無しさん
08/06/11 02:28:43
まあ void main はないけどな

834:デフォルトの名無しさん
08/06/11 02:29:28
ISO、ANSI準拠だと、プログラムの開始はmain関数としている。
そういう環境ではとりわけ、mainはint型の変数を返すとしている。
が、誰もが必ずしもISO、ANSI準拠の環境を使っているわけではなく
void mainでも間違いとは言えないんで、強いて間違いだの
不適切だの言うなら、条件をしてしないと通じんよ。
今度は、そのスタイルを間違いとしないコンパイラ叩きを始める奴もいるが
そうなると何が問題点か?そもそも議題の根本、要点が何か?
もう支離滅裂になるから困る。

835:デフォルトの名無しさん
08/06/11 02:40:18
それは逆だろう
特に条件を指定しないなら規格に沿った一般論の話で
強いて間違いでないと言うなら条件をつけるべきだろ

836:デフォルトの名無しさん
08/06/11 02:42:41
特に条件を指定しないのに
なんで規格に沿ったとか条件がつくのか理解できない。

837:デフォルトの名無しさん
08/06/11 02:43:46
>835
この人規格の意味とか認めない人だから何言っても無駄よ

838:デフォルトの名無しさん
08/06/11 02:44:37
自演で大変だな・・・

839:デフォルトの名無しさん
08/06/11 02:45:38
>>835
はぁ?特に条件を指定しないで 間違い なんて認められるわけねーじゃん
常に 間違い だよ?残念だが、事実上間違いではないんだよ、知ったか無知君w

840:デフォルトの名無しさん
08/06/11 02:45:42
C言語というものを一方は規格と考えて話してて一方は実装と考えて話してるんだからかみ合うはずがない

841:デフォルトの名無しさん
08/06/11 02:48:39
>>832みたいに、結局固有の環境ではと、自分が知っていることだけで
話を始めようとする奴が出るだろ?だから先に 条件を指定して 話をしろつってんだよ。
だいたい、C99だって結局は固有の条件として挙げられてるじゃんか。
だったら、まずANSI、ISO準拠ではと、とりわけint mainについて
標準スタイルではと補足しておくべきでしょ。標準化機構が示した
環境以外だって普通にあるぞ?とりわけ、標準化スタイルにしておけば
幅広い環境で通用するって話にもなるが、void mainに関しては 間違い にはならない。
むしろ、int mainでint型の数値を返さない方が不適切である。

842:デフォルトの名無しさん
08/06/11 02:48:53
>>839
日本語でおk

843:デフォルトの名無しさん
08/06/11 02:49:02
またいつもの流れか

844:デフォルトの名無しさん
08/06/11 02:50:03
>>841
>>832 は規格の話であって環境の話じゃないだろw

845:デフォルトの名無しさん
08/06/11 02:51:07
処理系じゃなくて開発環境
なんて言っちゃう人にもう何を言っても

846:デフォルトの名無しさん
08/06/11 02:51:11
ANSI、ISO準拠を言わないのであれば、処理系ではなく
開発環境によっては、プログラムの開始でさえ必ずしも
main関数ではなくても良い環境もあれば、結局自作関数で
void hoge(void)といった形式で通用するところから、
hogeをmainに置き換えた屁理屈だって通ってしまう。

847:デフォルトの名無しさん
08/06/11 02:51:44
VC++ はエントリポイントを変更できるよ。

848:デフォルトの名無しさん
08/06/11 02:52:45
>>846
Japanese please.

849:デフォルトの名無しさん
08/06/11 02:53:40
WinMain の出番ですね

850:デフォルトの名無しさん
08/06/11 02:56:30
常識ってなんだろう
そんなことを考える初夏の夜長

851:デフォルトの名無しさん
08/06/11 03:05:30
間違いと否定するから悪い。そして知ったかぶるから余計に
他人を理解させられない。本当の意味で間違いじゃないから。
void mainなんて、かつては普通に使われていたが、今じゃ
標準スタイルに合わせることで、ソースコードをより幅広い
環境で通用するようにと、幅広い環境で通用するスタイルでは
int mainが望ましい。

まぁ、路上で言えば、黄線は越えて対向車線に出てはいけないとだけ覚えて
追い越しではないのに、他の車が黄線を越えて停止中の車、あるいは
障害物を避けたのを見て違反だと騒ぐようなもんだな。そういうのみっともねーってw

852:デフォルトの名無しさん
08/06/11 03:09:56
もう寝ろよ

853:デフォルトの名無しさん
08/06/11 03:11:12
>852
オマエモナー
オレモナー

854:デフォルトの名無しさん
08/06/11 05:32:05
intは6byteを返すから
void main(void)で書き始めるのは間違い。
voidはmainだけにつく引数。
正しくはint main()

855:デフォルトの名無しさん
08/06/11 06:20:13
>>854
??

856:デフォルトの名無しさん
08/06/11 07:11:42
チキガイホイホイだからこの話題は止めようぜ

857:デフォルトの名無しさん
08/06/11 07:13:04
2byteや4byteはよくあるけど、int6byteは初耳だ

858:デフォルトの名無しさん
08/06/11 07:14:10
int 6byte はあり得ないね。

859:デフォルトの名無しさん
08/06/11 08:08:13
2^n以外のバイト数はありえないでしょ

860:デフォルトの名無しさん
08/06/11 08:10:46
上位2バイトは、固定値で埋められているんだよ!

861:デフォルトの名無しさん
08/06/11 08:13:00
UTF-8かよ


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5031日前に更新/203 KB
担当:undef