C言語なら、俺に聞け! <14>
■ このスレッドは過去ログ倉庫に格納されています
0001スーパーハイソサエティーハッカー日下部陽一
NGNGいろいろな言語を極めたが、一番手になじむのはCだった。
Cのことなら全てわかるから、疑問な点があったら漏れに聞け。
だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。
・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマならこれを買っとけ。
・プログラミング言語C(K&Rと呼べば通だ)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/yfcbookshelf-22/250-3950205-1475419
K&Rで挫折するようなヤツはこれでも買え。
これでわからない、救いがたいヤツはあきらめろ。
・作ってわかるCプログラミング(アヒル本と呼べば通だ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/qid%3D1005618315/250-3950205-1475419
・前スレ C言語なら、漏れに聞け! <13>
http://pc.2ch.net/test/read.cgi/tech/1013990673/l50
0159デフォルトの名無しさん
NGNG#warn ←こんな感じでメッセージを出力してそのままコンパイルを続けるようなのってないですか?
0160デフォルトの名無しさん
NGNG英語ページは見つけたんですけど…
無ければ無いでそっち使いますけどね。
0161デフォルトの名無しさん
NGNGmenuってなーにー?
0162160
NGNGごめんなさい。
cursesを使ってターミナル画面で
メニューシステムを扱えると言うライブラリです。
(man menuより意訳。大雑把だけど)
0164デフォルトの名無しさん
NGNGそれよりも、printf系関数で数値を2進数字列にする機能がほしかった。
逆ならstrtolでできるんだけどな。
0165デフォルトの名無しさん
NGNGUnixが発祥の地ということで、例のクソファイルシステム関係で
8進数が導入されたんじゃ?
2進がないとは、アセンブラとは違うんじゃヴォケ って意思表示かと。
0166デフォルトの名無しさん
NGNG汎用的な方法はないと思われ。
とりあえずコンパイラのマニュアル見てみたら。
たとえばVCだったら #pragma message ってのでできる。
0167デフォルトの名無しさん
NGNGmalloc関数などで、メモリーを確保しますよね。
メモリーが確保された状態で、ALT+F4を押されて強制終了させられたら、
開放しない事になるのでしょうか(多分なると思いますが)。
もしそうならば、ウィンドウプロシージャの中にWM_DESTROYが送られてくるのでしょうか?
0168デフォルトの名無しさん
NGNG0169名無しさん@Emacs
NGNG0170デフォルトの名無しさん
NGNGしなさいったらしなさい。
0171デフォルトの名無しさん
NGNG普通は解放する。
mallocしたままプロセスが異常終了したとき、
OSにそのメモリを返さないライブラリを作ったり使ったりしても、
標準規格の中から外れているわけじゃないので可。
だが、よく考えてみれば分かることだが、
今時のOSでは、そんな屑ライブラリを使ってる可能性はない。
DOSやCP/Mの時代で、EMSとかDPMIを使ってメモリ確保するライブラリとか
作ってて、たまたまそれをmallocに流用してたとして、
CTRL+Cとかでプログラムが中断されたときにマップしたフレームをきちんと
返さない、という屑ライブラリはあったかもしれんがね。
0172_
NGNGhttp://www.bloodshed.net/ の、DevC++ってやつで事足りますか?
入門用のオススメソフトないですかね・・・
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG> Q. まずはC言語を覚えたいのですが、コンパイラは何を使えば良いでしょうか。
> A. 使っているOSによります。
> UNIX/Linux
> 標準でインストールされているgccを使いましょう。
Linuxでは、今は標準でインストールされねーぞ。
0175デフォルトの名無しさん
NGNGわるいことはいわないから、DigitalmarsかBorlandにしておけ。
0176デフォルトの名無しさん
NGNGWindowsなら cygwinでgccってのもアリかと。
0177デフォルトの名無しさん
NGNGここで突っ込む暇があったら追加・加筆したれよ(藁
0178デフォルトの名無しさん
NGNGおお、これWikiだったか。
0179デフォルトの名無しさん
NGNGウッ!
0180デフォルトの名無しさん
NGNG事足りるっつーか、それって結局コンパイラは gcc だし、何の問題も無し。
Cygwin 入れるのもかったるいだろうし。
0181デフォルトの名無しさん
NGNG0182デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNGせめて
i=1;
と書くのはやめて、
i = 1;
と書いてください。
あと、プログラマは何故 "," と "." の区別が一瞬でつきますか?
0184デフォルトの名無しさん
NGNG文脈でわかるだろ
pi=3,14
foo(a.b.c,d,e.f)
とかね
0185デフォルトの名無しさん
NGNG俺もそう思ったけど、メンバーを参照するときに.を使うね。
0186デフォルトの名無しさん
NGNG区別が付くほど大きな文字サイズにしているから。
0187デフォルトの名無しさん
NGNGpi=3,14; は警告も出ずに動いてしまうと言う罠。
0188デフォルトの名無しさん
NGNGコンマの後ろには必ず空白を。
ピリオドの前後は空白を入れない。
0189デフォルトの名無しさん
NGNGlint機能搭載してるコンパイラなら警告出るはずだが
0190デフォルトの名無しさん
NGNGファイルサイズが増えるから嫌。
0191デフォルトの名無しさん
NGNGアクセス規制された?
電波が届かない、圏外?
0192デフォルトの名無しさん
NGNGいつの時代の人間だよ。
0193デフォルトの名無しさん
NGNG胃潰瘍で入院中です。
From: Kusakabe Youichi <[email protected]>
Newsgroups: japan.food,fj.sci.lang.japanese
Subject: Re: スローフード
Date: Sat, 02 Mar 2002 04:42:57 +0900
Organization: Macintosh User Group PLEIADES
Lines: 14
Message-ID: <02032002044a7c8669%[email protected]>
References: <[email protected]>
NNTP-Posting-Host: 202-238-200-042.ryukyu.ne.jp
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 8bit
NNTP-Posting-Date: 1 Mar 2002 19:42:56 GMT
User-Agent: YA-NewsWatcher/3.1.8
In article <[email protected]>, O.Ogiwara
<[email protected]> wrote:
> スローフード?
私は手術したので、しばらく食べられません。
ヘ_ヘ ____________________________
ミ・・ ミ [email protected]
( ° )〜 日下部陽一
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0194デフォルトの名無しさん
NGNGそれは入院中でも書けるということを意味してるような
0196デフォルトの名無しさん
NGNGある関数に入ってからのアセンブラレベルでの実行ステップ数を計測
したいんだけど現在ではgdbで関数頭でブレークしておいて
その関数を抜けるまで地道にsiを繰り返しています。
でもイマイチ効率が悪いのでもう少しいい方法を模索中です。
0197デフォルトの名無しさん
NGNGあそう。
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNG0200デフォルトの名無しさん
NGNGプロファイルツールを使わないのは何か意味があるのか?
0201デフォルトの名無しさん
NGNGプロファイルツールって何ですか?
0202201
NGNGUnix系(Linuxです)で使える無料のものはないのでしょうか?
0204デフォルトの名無しさん
NGNGふーん、お前のところのLinuxって
man gprof
ってやっても何も出ないのか?
それって本当にLinuxなのか?
0205201
NGNG今はじめてしりました。
なかなか便利そうですね。
LinuxとかUnixとかだと、検索しても 見つからない というか、
単語名(キーワード)をしらないとどうしようもないですからね
機能逆引きページみたいなのも全く無いですし。
困ったものです。
0206デフォルトの名無しさん
NGNG普段からマニュアルに目を通しておけ。
全てを覚えるのではなく,どこにどんなことが
書いてあるかをおおざっぱに把握する程度で良い。
0207デフォルトの名無しさん
NGNG> 機能逆引きページみたいなのも全く無いですし。
man man
と打ち
-k オプションの部分を良く読むこと
0208デフォルトの名無しさん
NGNG0209201
NGNGステップ数を数えるツール をさがしてて、
「プロファイル」 という単語にたどり着かないじゃないですか。
結局>>206氏のとおり普段からマニュアルを読んどくしかないですけど。
man の -k オプションは役立たずです。
0210デフォルトの名無しさん
NGNG「プログラム 実行速度 計測 方法」で検索してみた。
http://www.google.com/search?q=%83v%83%8D%83O%83%89%83%80+%8E%C0%8Ds%91%AC%93x+%8Cv%91%AA+%95%FB%96@&hl=ja&lr=lang_ja
結構簡単にプロファイラにたどり着けそうな気がする。
0211デフォルトの名無しさん
NGNG> ステップ数を数えるツール
確かにそれだと別の物を探してしまうし、
多分それだけのキーワードで質問したら
永遠にgprofは出てこなかっただろう。
検索キーワードの指定方法は結構難しい
私が初心者の頃、一般的なキーワードを指定してしまい、
何千件の一致結果にげんなりしてしまったことがあったり、
自分言葉を検索キーワードにしてしまい全然ヒットしないことがあった
今はの私はキーワードをいろいろ変えながらうまくクズ情報にフィルタをかけたり、
検索エンジンをいろいろ変えたりして何とか
検索エンジンを使いこなしているつもりになっているが、まだまだ先は長い。
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNGLOCAL void hankaku(int resu)
{
return;
};
この場合、プロトタイプ宣言も
LOCAL void hankaku(int resu);
とするのでしょうか?
0215デフォルトの名無しさん
NGNGlocalなんてあったか?
staticとexternなら知っているが。
0216デフォルトの名無しさん
NGNGプロトタイプ宣言なんてする奴はいねーよ!
0217デフォルトの名無しさん
NGNGvoid func1(){ … }
void func2(){ … }
ってなソースで func1 から func2呼び出せませんが 何か?
0218デフォルトの名無しさん
NGNGGLOBALの時だけ、宣言するのですか?
0219デフォルトの名無しさん
NGNGうーん?
でも実際にプロトタイプ宣言していないものがほとんどだよね?
0220デフォルトの名無しさん
NGNGLOCALだとかGLOBALだとか一体なんの話をしているんだ?
0221monosiri
NGNGグローバル関数
0222デフォルトの名無しさん
NGNG他のファイルから見えるか見えないかってことか?
それはstaticとexternだろ?
0223デフォルトの名無しさん
NGNG普通はヘッダファイルでプロトタイプ宣言してるからでしょ。
0224デフォルトの名無しさん
NGNGそのなかにもないし。
標準ライブラリくらいでしかみたことない。
0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNGネタか? マジで入門者レベルなのか?
とりあえず相手にしないほうが良さそうだなぁ…
0227214
NGNGLOCAL Sint16 e1_pl_search_bak = 0;
GLOBAL Sint16 e1_pl_search(Float32 x, Float32 y)
{
・・・・・・・・・・・・・
}
てな感じで、書いてあったんです。
0228デフォルトの名無しさん
NGNGいや、俺はしているんだが・・・・
でもApacheとかゆうめいなソフトのソースを見るとないから迷っている。
俺が見落としているだけ?
0229デフォルトの名無しさん
NGNG> みんなはプロトタイプ宣言をしているの?
1つのファイルのみでプログラムが構成されていて、
main関数を一番最後に書く場合、プロトタイプ宣言はしない。
が、そんなプログラムはあまり書かない。
0230214
NGNG#define GLOBAL // 外部参照
#define LOCAL static // 内部参照
ってなことが書いてありました。
・・・・・・・・
0231デフォルトの名無しさん
NGNGそうか。ありがとう。
じゃあこのままプロトタイプ宣言をし続けていいんですね・・・
正直迷っていたんで助かりました。
0232デフォルトの名無しさん
NGNGプロトタイプ宣言でやってみてエラーになったらやめれば?
0233デフォルトの名無しさん
NGNG#define MAX 5 /* これ以後の MAX を 5 に読み替える命令 */
main()
{
int i;
int point[MAX]; /* MAX 個の要素を持つ配列 point を宣言 */
int total=0, avr; /* ★★★★★*/
for(i=0; i<MAX; i++){ /* MAX 回の繰り返し */
printf("%d人目の点数は? >", i+1);
scanf("%d", &point[i]);
/* 配列の場合でも & を忘れずに付ける */
}
for(i=0; i<MAX; i++){
printf("%d人目 = %d\n", i+1, point[i]);
total += point[i];
}
avr = total / MAX;
printf("平均点 = %d\n", avr);
}
超初心者です。 上の五つ星のところの int total=0 のところの
「 =0 」を消して、実行すると、totalの結果がおかしくなります。
どうしてなんでしょうか? よろしくお願いしますm(__)m
0234近頃物忘れが激しい35歳
NGNG関数その1
void mycopy(char *d,char *s,int n)
{
while((*s !='\0')&&(n > 0)){
*d++ = *s++;
n--;
}
*d = '\0';
}
と書くとsの文字はdにコピーできますね。では
関数その2
void mystradv(char *s,int d)
{
while((*s !='\0')&&(d > 0)){
*s++;
d--;
}
}
のと書くと、何か期待通りに動作しません。
期待っちゆうのは
int main()
{
char x[20+1];
char y[20+1];
memset(x,'\0',sizeof(x));
memset(y,'\0',sizeof(y));
strcpy(x,"0123456789");
mystradv(x,3);//関数その2
mycopy(y,x,10);//関数その1
printf("x=%s y=%s\n",x,y);
return 0;
}
結果 0123456789
期待 3456789
関数の引数に(char *s)を使っているのに何故なんでしょうか?
宜しくお願いします。
0235デフォルトの名無しさん
NGNGコンパイル時に警告がでないか?
0236デフォルトの名無しさん
NGNGローカルで宣言した変数は内容が0に初期化される保証はない
0237近頃物忘れが激しい35歳
NGNGごめんなさい。ちょっと訂正
main()
{
略
× printf("x=%s y=%s\n",x,y);
○ printf("y=%s\n",y);
どうぞ宜しく
0238デフォルトの名無しさん
NGNGstaticなら0に初期化されますがなにか?
0239デフォルトの名無しさん
NGNGvoid mystradv(char**s, intd)
じゃない?
配列を渡すと変なことになるけど
0240デフォルトの名無しさん
NGNGローカルに宣言した自動変数は0に初期化される保証はない。
これでどうだ
0241デフォルトの名無しさん
NGNGOK!
というか普通はコンパイラが警告を出してくれるよな。どんなの使っているんだろうね。
0242近頃物忘れが激しい35歳
NGNG*sをs[2]を指すようにしたいんですがな。
ん−−−
0243デフォルトの名無しさん
NGNGCがいちばん経んかが少ない空な.単に経んかについていけなかっただけでは.LOL!
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNGよく考えてみろよ。
char*s だと、s[0]へのポインタがコピー渡しされるわけだから、
そのポインタを書き換えることは不可能。
ポインタを書き換えたいならポインタへのポインタを渡せ
0246233
NGNGレス速いですね。 みなさん、ありがとうございます。
自動変数って
int total = 0 , avr; (>>233の五つ星のとこ)
の「 avr 」もそうだと思うのですが、とりあえず結果がおかしければ
変数をゼロにしてて、いいのかな? 「 avr=0 」にしても、しなくても
結果は同じでした。
て優香。あまりわかってないので、逝ってきます。
ありがとうございました。
0247デフォルトの名無しさん
NGNGavrは初期化する前に参照していないから。
0248プリオンが溜まりつつある35歳
NGNGお返事ありがとう。でもね・・・
関数その1
void mycopy(char *d,char *s,int n)
{
while((*s !='\0')&&(n > 0)){
*d++ = *s++;
n--;
}
*d = '\0';
}
コピー渡しの*d *sのはずなのに、なんで
コピーできるのだろうかね?
宜しくお願いします。
0250デフォルトの名無しさん
NGNGmycopyでコピーが出来ているのは、
s[0]へのポインタがコピーされているので、
ポインタは別物でも、ポインタが差す先は同じもの
実体と参照について調べてみよう
0251プリオンが溜まりつつある35歳
NGNG>>250さん、どうもありがとう。
勉強してみます。
0252デフォルトの名無しさん
NGNG#define "あぼーん" 1
てな感じで日本語使えたよね?
エラーが出るんだがどう書いたらいいか教えてください。
使用しているコンパイラはVisualC++6.0です。
0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNG日本語はもとより、"←これも使えないぞ。
0256デフォルトの名無しさん
NGNGあのさ、
*s++
ってさ、
*(s++)
ってことだよな。
こういう書き方は混乱するから単に
s++
でいいと思うが。(細かいトコだけど)
0257デフォルトの名無しさん
NGNGイディオムだからいいじゃねーか
0258256
NGNG*d++=*s++;
の方がが一行で済ませられるな。
良く見てなかった。
氏かも256だと言うのに気づかなかった。
頚釣って夷狄益…
■ このスレッドは過去ログ倉庫に格納されています