トップページ⇒tech
1001コメント277KB

C言語のことは漏れらに聞け!!<サンキュー>

■ このスレッドは過去ログ倉庫に格納されています
0001前スレ949NGNG
前スレのコピペだモルァ

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/

・前スレ <38>
http://pc3.2ch.net/test/read.cgi/tech/1035729526/

コンパイラ、過去ログなどのリンクは>>2-5 あたり
0002デフォルトの名無しさんNGNG
そし
0003前スレ949NGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html

さらにコピペ
0004デフォルトの名無しさんNGNG
偽>>950の策略にはまりスレを立てる羽目になった>>949が立てたスレはここですか?
0005前スレ949NGNG
そです
0006前スレ955NGNG
1000行くぞゴルァ。
0007デフォルトの名無しさんNGNG
ああ、タイトルとともにまたレベルが下がるのか。
ああ・・
0008デフォルトの名無しさんNGNG
ここはObjective-Cの話題を持ってきてもいいんですか?
0009デフォルトの名無しさんNGNG
>>8
いや、ダメすぎ。
0010955NGNG
マ板の語尾にゴラァ!を付けるスレッドもよろしく
宣伝スマソ
0011デフォルトの名無しさんNGNG
level=level--; /* levelが1下がる */
0012デフォルトの名無しさんNGNG
>>11
無駄の多い処理ですな。
0013デフォルトの名無しさんNGNG
CとC# の違いを教えてください。
0014デフォルトの名無しさんNGNG
>>13
適当なソースコード探してきて比較して見な。全然違う。
001513NGNG
>>14
VC++.NETとVC#.NETのパッケージのソースコードの写真でわかりますた。
ご迷惑かけますた。
0016デフォルトの名無しさんNGNG
最初<サンキュー> って見たとき何を感謝しているんだ?とマジで思った・・・
鬱だ・・・
0017デフォルトの名無しさんNGNG
>>15
今どこにいるんだと小一時間・・・
0018デフォルトの名無しさんNGNG
math.hでa^bという計算をしたいのですがどうすればいいでしょうか?
0019デフォルトの名無しさんNGNG
>>18
a^bはビットごとのXORですが。

べき乗(だっけ?)ならpow()で。
0020デフォルトの名無しさんNGNG
>>18
pow(a,b);
でいいんじゃなかったっけ?
違かったらスマソ。
0021デフォルトの名無しさんNGNG
char s[512];
char *sp;
sp = s;
printf("s = %d\n", sizeof(s));
printf("sp = %d\n", sizeof(sp));
これが同じにならないのは何故ですか?
0022デフォルトの名無しさんNGNG
>>21
何故って…型が違うだろ?
0023デフォルトの名無しさんNGNG
ポインタと配列は違うからデス。
0024デフォルトの名無しさんNGNG
>>21
下はポインタのサイズ(きっと4バイトだろ?)
上は配列のサイズ(512バイト)
0025デフォルトの名無しさんNGNG
var_end(ap);で何かやってる処理系ってありますか?
何もしないのも多いと思いますし、必要ないともおもえるんですが...
0026デフォルトの名無しさんNGNG
CとC++ の違いを教えてください。
002721NGNG
ありがとうございます。>>21の状況で
spからsのサイズを出すことはできないのでしょうか?
0028デフォルトの名無しさんNGNG
>>27
できない。
だから一部の標準関数はサイズを引数として渡す。
002921NGNG
>>28
ありがとうございました。
0030デフォルトの名無しさんNGNG
関数をポインタで使う方法について教えてください。出来れば例をのせていただけると助かるのですが。
お願いいたします。
0031デフォルトの名無しさんNGNG
>>30
夕方あたりにちゃんと書いたのに無視なんですか?
悲しいです。
0032デフォルトの名無しさんNGNG
>>30
本に載っていないのかな・・・

#include <stdio.h>

int main()
{
int (*myputs)(const char *);

myputs=puts;
myputs("putsと同じように使える。");

return 0;
}
003332NGNG
もちろんこのコードにはなんの意味もないから。
実際はqsortライブラリ関数なんかでうまく使われているよ
0034デフォルトの名無しさんNGNG
そもそも関数へのポインタを使わなければならないのはどんな状況かお分かり?
それが分かってれば、前スレの終わりには関数へのポインタを使ったのがいくつかあったと思うが。
0035デフォルトの名無しさんNGNG
>>24
疑問なんだが、なぜ4バイトだと思う??
2バイトじゃないのか?

#include<stdio.h>

main()
{
int* a;
long* b;
char* c;
double* d;

puts("int* a");
puts("long* b");
puts("char* c");
puts("double* d");

printf("\n");

printf("sizeof a...%d\n",sizeof a);
printf("sizeof b...%d\n",sizeof b);
printf("sizeof c...%d\n",sizeof c);
printf("sizeof d...%d",sizeof d);
}ちなみに漏れのポインタ変数の確保するサイズは2バイト。
0036デフォルトの名無しさんNGNG
>>35
MS-DOSとか使ってる?
0037デフォルトの名無しさんNGNG
きっとCPUが286なのれす。
0038デフォルトの名無しさんNGNG
ドス窓のことか?
OSはWindowzeだけど。
0039デフォルトの名無しさんNGNG
>>37
どういうことですか?
詳しく聞きたいです。
0040デフォルトの名無しさんNGNG
>>35
「きっと」4バイト、と書いてある。
無論ポインタのサイズなどは処理系によって違う。
今ポピュラーな環境だとポインタサイズは大抵4バイトといっても
強ち間違いじゃないと思う。

ポインタサイズが2バイトの処理系というと、MS-DOSのsmall modelやら、
com (tiny) modelなんだろう。処理系で言うとLSI-C 86あたりか。
LSI-C 86の試食版でもfarポインタは扱えたと思うんで、
ポインタをfar修飾すればサイズは4バイトになる。
重ねて言うが、処理系によってこの辺は違う。
0041デフォルトの名無しさんNGNG
>>39
CPUがどんな感じにメモリを管理しているかの問題。
0042デフォルトの名無しさんNGNG
>>40
>>41
ありがとうございました。
>>40
かなりの知識の持ち主ですね。
前橋のポインタ完全制覇とか余裕そうです。

ちなみに、LSI-C(試食版)を使っております。
0043デフォルトの名無しさんNGNG
>>42
ここにいる奴の半分以上は余裕だと思われ。
複雑なようでわかれば簡単と。
0044デフォルトの名無しさんNGNG
>42

仕事にするなら完全制覇した上で就くのが当然。
それもやらんとゴミプログラマ雇ってる奴らが(以下略)
勉強がんばり〜。
0045デフォルトの名無しさんNGNG
>>43
もっと勉強します。

あと多少マルチスレッドになるんですが、
#include<stdio.h>

main()
{
char* color_name[]=
{
"hoge",
"piyo",
"hoge_p"
};

printf("%d\n",color_name); /*?*/
printf("%d\n",color_name+1); /*?+2*/
printf("%d\n",color_name+2); /*?+4*/
/*これは何故2バイトずつ進むのでしょうか?
char配列を指しているので、1バイトずつ進むと思うんですが*/

puts("");

printf("%s","aiueo");
}/*お願いします。*/
0046デフォルトの名無しさんNGNG
>>33
他にもatexitとかな。標準関数じゃないけどsignalとか。
signalのプロトタイプを初めて見たときは頭が真っ白になったよ(w
0047デフォルトの名無しさんNGNG
C FAQによるとsprintfって安全じゃないとのことですが
snprintfが使えない人たちってどうやって回避してるのですか?
やっぱC FAQの例みたいにファイルに書いたりしてるのでしょうか?
0048デフォルトの名無しさんNGNG
>>45
color_nameはcharの配列ではない。charのポインタの配列だ。
配列に入っているのは(char *)だ。
0049デフォルトの名無しさんNGNG
>>44
Arigatou
がんばります。
0050デフォルトの名無しさんNGNG
すみませんが教えてください。
C言語をはじめた3ヶ月、ほぼマスターしました。
ただまだGUIを使ったPGが作れません。何からはじめたらいいでしょうか?
0051デフォルトの名無しさんNGNG
>>50
環境は?
0052デフォルトの名無しさんNGNG
>>46
signalは標準
0053デフォルトの名無しさんNGNG
>>47
堅牢性が最重要のプログラムで、
printfに渡すパラメータが信用できないときは
ファイルに一度書くだろうな。

そうでないときは、えいやってやっちゃうこともある(w
ま、大抵snprintfが使えるのでそっちを使っちゃうけど。
0054デフォルトの名無しさんNGNG
>>48
メモリの中では
color[0]つまり*(color_name) には hogeの先頭アドレスが、
colo [1]つまり*(color_name+2)には piyoの先頭のアドレスが、
color[2]つまり*(color_name+3)には hoge_pの先頭のアドレスが、
入っているんじゃないんでしょうか?

具体的に教えていただけると助かります。
0055デフォルトの名無しさんNGNG
訂正
>>48
メモリの中では
color_name[0]つまりcolor_nameにはhogeの先頭アドレスが、
colo_name[1]つまりcolor_name+2にはpiyoの先頭のアドレスが、
color_name[2]つまりcolor_name+3にはhoge_pの先頭のアドレスが、
入っているんじゃないんでしょうか?

具体的に教えていただけると助かります。
0056デフォルトの名無しさんNGNG
>>55
その通り。で、その先頭アドレスが君のLSI-C試食版だと2バイトなのよ。
0057デフォルトの名無しさんNGNG
マルチスレッドじゃなくてマルチポストだった
0058デフォルトの名無しさんNGNG
>>53
レスありがとうございます。
幸いsnprintfが使えるようですので、これを使います。
0059デフォルトの名無しさんNGNG
>colo_name[1]つまりcolor_name+2
ここ、激しく間違いネ。まだ54の方が間違いが少ないネ
0060デフォルトの名無しさんNGNG
>>57
マルチポストってなんでしょうか?
マルチスレッドとは違うスレッドでも同じことを書き込むことですよね?
006150NGNG
環境はWindows2000です。使用しているコンパイラはBorlandC++です。
何からはじめたらいいでせうか?
0062デフォルトの名無しさんNGNG
>>61
PC窓から投げ捨てる。
0063デフォルトの名無しさんNGNG
>>60
キミセンスアルヨ
0064デフォルトの名無しさんNGNG
>>54
その通り。君の処理系だとポインタサイズは2バイトだったな。
だとすると、こんな感じ。

前橋のポインタ本を持ってるようだから、
(実はおれも持ってる。知り合いなので、ご祝儀に買った(w)
205ページのFig.3-19ポインタの配列を見てくれ。
このようなイメージで格納されている。
配列color_nameの要素はあくまでポインタだ。
配列にはポインタがずらずらと格納されてる。

だから、ポインタのサイズが2のとき、
要素が一つ増えると、アドレスは2増えることになる。

0065デフォルトの名無しさんNGNG
>>61
他の開発環境使った方が楽では?
0066デフォルトの名無しさんNGNG
>>61
こんなところからはじめてみては?

猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/ 
C言語で始めるWindowsプログラミング
http://web.kyoto-inet.or.jp/people/ysskondo/
0067デフォルトの名無しさんNGNG
>>64
知り合いなんですか???
やっぱり前橋さんは凄腕PGなのでしょうか?

0068デフォルトの名無しさんNGNG
いや、知ってるけどたいしたこと無いよ。
006964NGNG
>>67
んなこたあスレ違いだ(w
残念ながら一緒に仕事したことはないが、
おれよりははるかに優秀なプログラマだと思うよ。
007035,39,42,45,49,54,55,60,67==ZettonNGNG
>>68
むしろ自分の方が凄腕だと。(w
007150NGNG
>>66
ありがとうございます。試してみます。
極めたらまたきます。
0072HP電卓、■に何が入るのかが分かんないNGNG
#include<stdio.h>
#include<stdlib.h>
struct list{ int data;
struct list *next;};

void push(int y);
int pop();
void print_stack()
struct list *head=NULL;

void push(int y){ struct list *p; p=head; head=new list; if(head==NULL){ printf("Stack overflow.\n"); exit(1);} head->data=■; head->data=■;}

int pop(){ int y; if(head==NULL){printf("Stack underflow.\n");exit(1);} y=■;head=head->next;return y;}

void print_stack(){ struct list *p; p=head; while(p !=NULL){ printf("%d",■); p=p->■;} printf("\n");}

int main(){ int x,y,z; char s[10],c; while(1){ scanf("%s",s); c=s[0]; switch(c){
case'+':x=pop()+pop(); printf("%d\n",x); push(x); print_stack(); break;
case'-':x=pop(); y=pop(); z=y-x; printf("%d\n",z); push(z); print_stack(); break;
case'*':x=pop()*pop(); printf("%d\n",x); push(x); print_stack(); break;
case'/':x=pop(); y=pop(); z=y/x; printf("%d\n",z); push(z); print_stack(); break;
case'q':case'Q':exit(1);
default:push(atoi(s));
print_stack();}} return 0;}

0073デフォルトの名無しさんNGNG
うう、出掛けててネット触れなかった間に次スレ立ってた・・・。

しかし、1 は何故 「課題丸投げ禁止」 を書いてくれなかったの?
関連リンクは 2 以降にして、1 は諸注意でかためて欲しかった。
0074デフォルトの名無しさんNGNG
前橋の本にあるさ、P104のソースで
va_end();
ってなってて引数ないじゃん?
これいいの?
0075ZettonNGNG
>>74
間違ってると思います。
正誤表はこちら
http://member.nifty.ne.jp/maebashi/seiha/seigo.html
0076デフォルトの名無しさんNGNG
>>74
いいよ
0077デフォルトの名無しさんNGNG
>>74君氏んで良いよ…。
0078デフォルトの名無しさんNGNG
>>72
つかCじゃ無いじゃん…。
0079デフォルトの名無しさんNGNG
>>46

初めて見たとき、シグナルを送るだけなのになんで関数ポインタが必要なんだ?と思ったよ。
シグナルを送るのはraiseだよな(w
0080デフォルトの名無しさんNGNG
>>78
パッと見Cに見えるけど何なの?
0081デフォルトの名無しさんNGNG
>>78
うーん?
Cの範囲で書いていると思うけど?
なんか見落としているかな・・・
0082デフォルトの名無しさんNGNG
C99とかJISでしょうか?
0083もまずにパピコNGNG
>>81
head=new list
008481NGNG
>>83
おお!まじだ!
0085デフォルトの名無しさんNGNG
>>75
サンクス!
それにしてもとんでもなく多かった・・・。
果たしてこの本使えるのか?
っていうかなんか前橋ってむかつくな
0086デフォルトの名無しさんNGNG
>>73
前スレでも似たような事があったな。
0087デフォルトの名無しさんNGNG
>>77
なんで?
0088デフォルトの名無しさんNGNG
>>87
前スレの>>905
0089デフォルトの名無しさんNGNG
ポインターのサイズオフ
ターボシーは2だったよ
0090デフォルトの名無しさんNGNG
>>89
サイズオブ・・・・・どうでもいいけど
0091デフォルトの名無しさんNGNG
>>89
へぇ、俺にTurboC++5.0Jは4バイトだが。
0092デフォルトの名無しさんNGNG
near,far
0093デフォルトの名無しさんNGNG
>>73
遅レスだが、ここは宿題すれじゃないから、
そもそも課題をここに投げちゃいかんと思う。
0094デフォルトの名無しさんNGNG
以降


   あまりに環境依存・コンパイラ依存の話題禁止

 
0095コンパイラNGNG
今度の中間テストはポインタと構造体なんです。
全然わかりません(泣)
0096デフォルトの名無しさんNGNG
>>74
俺その本の第五刷持ってるよ!
23:va_end(ap);に直ってるよ。

>>91
ふ〜ん・・・買って来よ(以下略
0097デフォルトの名無しさんNGNG
つーかプログラミングって学校で学ぶようなものなのか?
0098デフォルトの名無しさんNGNG
>>97
俺は中学生なのですべて独学だ
0099デフォルトの名無しさんNGNG
俺は医学を専攻していたがなぜかプログラマだ。
スーパープログラマーKを目指している。
いつかあの鍛え上げられた肉体を手に入れ、
「なぜプログラマがそんな筋肉を……」の問いに
「必要だからだ!!」と答えるのが夢だ。
……問題は、なぜ必要なのかが分からないことだ……
0100デフォルトの名無しさんNGNG
エネルギーを必要な時に必要なだけ供給できるように
体を鍛えておく必要がある。
とでも言っておけば?
0101デフォルトの名無しさんNGNG
四則演算もわざわざ学校で習うようなことじゃないよな。
■ このスレッドは過去ログ倉庫に格納されています