トップページ⇒tech
186コメント45KB

★★ C教本をつくろう ★★

■ このスレッドは過去ログ倉庫に格納されています
0001CモナNGNG
世の中のC教本の悪い部分をされけだし、
的確かつ簡潔に述べたC教本を作っていくスレ。
0002デフォルトの名無しさんNGNG
理想は
箇条書き程度の簡潔な説明をし、
「詳しい説明はP**を参照」としておく。そうすれば
いきなりの詳細説明に読む気がうせる事も無い。

for よりも先に while について教えるべきだ。

if や while の条件文は「条件が正しければ」ではなく、最初から「0か、0以外であるかで処理が分かれる」と教えるべきだ。

if や for のレイで、最初から括弧のないパターンを教えるべきだ。「複数の文を書くときのみ括弧が必要」とすれば
なんの問題もない。
0003デフォルトの名無しさんNGNG
>>2の時点で林晴比古並のクソ本確定。
0004 NGNG
自分に合う本を見つける方が楽そうだ(藁
0005デフォルトの名無しさんNGNG
1は入力ミスにきづかなかっため、
永遠にそのアホさを、されけだすこととなった。
0006 NGNG
「Cは時代遅れ」をネットで言われたときの対処法も記載すべきだ。
0007CはもういいよNGNG
C++本を作れ!
0008デフォルトの名無しさんNGNG
されけだすsage
0009デフォルトの名無しさんNGNG
「されけだす」は伝説の言葉になりそうな予感。。。
0010デフォルトの名無しさんNGNG
真偽値や式値、式中の暗黙の型変換について解説する本が少なすぎ。
コラムで少し難しめなことを書いてるつもりでもザルのように抜け落ちがある本も大杉。

入門書はすべてダメ本。
教科書ならK&Rで十分だろ。

K&Rは難しいとかいうやつに限って1・2章を飛ばして読んでたり
ダメ本で隙間だらけの知識を詰め込んだダメなやつだったりする。
0011デフォルトの名無しさんNGNG
C言語の構造体とはクラスのことである。
ただし、メンバ関数という概念は言語レベルではサポートされていない。
0012   NGNG
>>11
関数ポインタが使えるのだから
メンバ関数も説明できるよね?
0013デフォルトの名無しさんNGNG
>>11
できない。
0014   NGNG
えー、なんでなんで?>>13
0015デフォルトの名無しさんNGNG
>>3
やっぱ林晴比古ってダメかな〜?
オレ彼の本を何冊も買っちゃったんだよな〜(鬱
たしかに基本的な部分はわかりやすいけど、彼の本で勉強してたらポインタがさっぱり分からなくなってしまいましたよ。
なんとなく、説明しづらい部位から逃げてる節があるんですよね。。。
0016デフォルトの名無しさんNGNG
例えば↓には、
C for Java Programmers
http://www.amazon.com/exec/obidos/ASIN/0201702797/
(´-`).。oO(なに書いてあるんだろ?) 年寄りに読ませたい本
Java for the Cobol Programmer
http://www.amazon.com/exec/obidos/ASIN/0521658926/
Java for Cobol Programmers
http://www.amazon.com/exec/obidos/ASIN/1886801843/
Java(tm) for S/390ョ and AS/400ョ COBOL Programmers
0017デフォルトの名無しさんNGNG
>>16
なんか変。


例えば↓には、
C for Java Programmers
http://www.amazon.com/exec/obidos/ASIN/0201702797/
(´-`).。oO(なに書いてあるんだろ?)

C++ for Java Programmers
http://www.amazon.com/exec/obidos/ASIN/0201612461/


年寄りに読ませたい本
Java for the Cobol Programmer
http://www.amazon.com/exec/obidos/ASIN/0521658926/
Java for Cobol Programmers
http://www.amazon.com/exec/obidos/ASIN/1886801843/
Java(tm) for S/390ョ and AS/400ョ COBOL Programmers
http://www.amazon.com/exec/obidos/ASIN/1583470115/
0018デフォルトの名無しさんNGNG
じゃ、まず前書きから完成させよう
0019デフォルトの名無しさんNGNG
>>15
反面教師として学ぶのによい本だが
その前に何が正しいのか、を、きちっと学んでおく必要があると思う
0020デフォルトの名無しさんNGNG
K&Rならすやべて一冊ですむが
林晴彦本やその他の副読本や入門書で入門すると
C言語 ポインタ完全制覇やANSI C言語辞典などによる補完が必須となる。
0021デフォルトの名無しさんNGNG
段階的に難しくなるサンプルソースを用意して、
K&Rを辞書代わりにすれば文法はわかるだろ。
だが大事なのはその後だ。
002215NGNG
>>21
文法の壁を超えてからがプログラマとしての本当の勝負だ、ということですか?
0023デフォルトの名無しさんNGNG
K&Rって、普通の本屋で普通に売ってるんですか?
0024デフォルトの名無しさんNGNG
>>5
入力ミスって?
0025デフォルトの名無しさんNGNG
大きめの本屋で、
「プログラムコーナー」があれば撃ってると思う。
おれは大学の購買で勝ったけど。
0026デフォルトの名無しさんNGNG
結城浩の「C言語プログラミングレッスン」ってあんまり話題にならないけど
みんな知らない?
丁寧な解説で、結構突っ込んだとこまで書いてあるんでお勧めなんだけど。
K&R「プログラミング言語C」の他にあげるなら、俺は迷わずこれだよ。
0027デフォルトの名無しさんNGNG
>>17
姥捨て山ですか?
0028デフォルトの名無しさんNGNG
>>17
年寄りを沈没して行く船に乗せるのですか?
0029デフォルトの名無しさんNGNG
>>26 そーかー?
0030デフォルトの名無しさんNGNG
最初のコードは hello ではなく、数値演算プログラム

#include <stdio.h>
#define index main /* おまじない */

int index(){
 int decimal;

 decimal = read_int();
 write_int( decimal );

 return 0;
}
main を index という名前にしてしまえば、main には
関数呼び出しのみが入って「もくじ」のように読みやすくなるはずだ。
0031HIGE ◆v.gzl91. NGNG
>26
>丁寧な解説で、結構突っ込んだとこまで書いてあるんでお勧めなんだけど。

あれですか。自分の学の無さを「されけ」だしてしまった瞬間ですか?
0032デフォルトの名無しさんNGNG
関数名はすべて1字にしようぜ。

#include <stdio.h>
#define a main /* おまじない */
#define p printf /* おまじない */
#define s scanf /* おまじない */

a()
{
    int hensuu;

    p("数字をインプットしてください :");
    s("%d", &hensuu);
    p("10を足すと %d です。", hensuu + 10);

}
0033デフォルトの名無しさんNGNG
関数名、変数名は全てアンダーバーにしようぜ。

#include <stdio.h>
#define _ main /* おまじない */
#define __ printf /* おまじない */
#define ___ scanf /* おまじない */

_()
{
    int ____;

    __("数字をインプットしてください :");
    ___("%d", &____);
    __("10を足すと %d です。", ____ + 10);

}
0034デフォルトの名無しさんNGNG
>>33
おもろい。感動した!あげ。
0035デフォルトの名無しさんNGNG
みんなK&Rを薦めるね。
うちの研究室の先輩達はなぜ使ってなかったのだろう・・・。

こんど本屋いってみます。
0036デフォルトの名無しさんNGNG
そんな感じの円周率を求めるプログラムなんてあったね>33
0037デフォルトの名無しさんNGNG
もっと
#define _____ {
#define ______ }
#define _______ (
#define ________ )
とかやってくれ。
0038>36NGNG
eだろ
0039デフォルトの名無しさんNGNG
#include "mystd.h"
s(pi)
0040デフォルトの名無しさんNGNG
#incude "mystd.h"
_
0041デフォルトの名無しさんNGNG
#include "_"
_
0042デフォルトの名無しさんNGNG
/* CP/M(8080)用 */
char main = 0xc9;
0043デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
void main(){
 unsigned int s=0,c=0;
 double x,y;
 while (1){
  x=(double)rand()/RAND_MAX;
  y=(double)rand()/RAND_MAX;
  if (x*x+y*y<=1) s++; c++;
  if ((c&0xFFFFF)==0)printf("PI=%.20lf\n",s*4.0/c);
 }
}
0044デフォルトの名無しさんNGNG
>>33
こういうのをlisp系でやると全然おもしろくない。
0045デフォルトの名無しさんNGNG
>>33
ちょとオモシロカタ
0046デフォルトの名無しさんNGNG
まず、C++では#defineを使うのはナンセンスだ。Cで#defineは卒業してもらいたい。
C++の流行はもっぱらconstだ。constを知らなければC++を知らないと言ってもいい。
0047デフォルトの名無しさんNGNG
Cの教本の話しなんだが、なにか?
0048デフォルトの名無しさんNGNG
Cをやる人間は当然C++もやるのであるから、C++へのステップも交えて論議するべきである。
0049デフォルトの名無しさんNGNG
>>46
CはC++と違い流行に踊らされないのだ。
Cをやる人間は当然C++もやる? はぁ??
0050デフォルトの名無しさんNGNG
>49
やらないのか。俺はC++にためにCを学んだからな。Cの知識が足かせになったこともある。
0051デフォルトの名無しさんNGNG
>>46
残念ながら、共通項をまとめる(字面の)テンプレートとして使うことは多々あるぞ。
0052デフォルトの名無しさんNGNG
>>46
ちと決め付けが激しいと思うよ
0053名無しさんNGNG
>>46は誤爆だろ、マジレスしてやんなよ。
0054デフォルトの名無しさんNGNG
>>50はCを本当に理解しているのだろうか?

そして、C++を正しく学べたのか? w
0055デフォルトの名無しさんNGNG
>54
本当の理解とは何か?
0056デフォルトの名無しさんNGNG
Cで定数に名前を付けるときは#defineではなくenumを使おう。
0057デフォルトの名無しさんNGNG
CとC++って、言うほどジャンプっていうか、概念的な違いってないと
思うんだが。Cで不便だった、インスタンス化とか、情報の隠避、とか
考えると自然にC++が出てくると思う。

個人的には、Cは不便で、C++のが作りやすい。でも、C++の仕事って
UNIXではほとんどないのよね。。
0058デフォルトの名無しさんNGNG
>>56
まず、enumが何の略か調べて、それから、その訳語を読んで考えてみると
いいと思う。
0059デフォルトの名無しさんNGNG
K&R にケチ付けてる人がいます。
http://member.nifty.ne.jp/maebashi/programmer/pointer.html
http://www.amy.hi-ho.ne.jp/~lepton/program/mail/19990628.html
ま、参考までに。
0060デフォルトの名無しさんNGNG
で、それに対してどう思うわけよ
0061デフォルトの名無しさんNGNG
↑
つか、この人は単に原著を読まずに、批判しているだけだと思う。
邦訳には誤訳がけっこうある。だから、邦訳のほうをもってして、
K&Rが間違っている、と騒いでいるのは単に恥をさらしているだけ。

K&Rは、シンプル&明瞭&正確無比な名著だよ。
0062デフォルトの名無しさんNGNG
main って、
「一番最初に呼び出される関数」
って意味でしょ。
だったら
first
って名前にしたほうがいいとおもう。
0063デフォルトの名無しさんNGNG
ぶっちゃけた話、Cの初級者である私(林晴比古の本しか持ってない)は
K&R買うべきですか?
0064デフォルトの名無しさんNGNG
>>63
YES

Cからプログラミングに入ったなら、ほかの本を色々読んでみるのが
いいと思う。Cの本3冊くらい、データ構造+アルゴリズムの本を
5冊くらい読んで、実経験つんで、優れたソースコード(オープン
ソースでごろごろ転がってる)のを読んで、また実経験つめば、
3年もすれば一人前に慣れるよ。
0065デフォルトの名無しさんNGNG
>>61
Leptonや前橋のサイトをきちんと読んだ?
0066デフォルトの名無しさんNGNG
>>65
読んでない。
0067デフォルトの名無しさんNGNG
>>57
C++で共同開発なんて最悪だと想うけどね。
0068デフォルトの名無しさんNGNG
>>67
なんでや
0069nanashiNGNG
>>68
他のメンバーか>>67のどちらかが無能だったんじゃない?
0070デフォルトの名無しさんNGNG
>>69
そんなときCよりC++の方が悲惨な状態になるのはわかる気がする。
0071デフォルトの名無しさんNGNG
first
yorimo
start
toka
openning
gaiina
0072デルフォイNGNG
>>63
林晴比古の本なんて、捨てなさい。
いや、マジで。
0073デフォルトの名無しさんNGNG
ほんと、2chって72のような有益な情報ばっかりだな。
0074デフォルトの名無しさんNGNG
林晴彦 …もしかしてCプログラム診断室?それとも
C言語ポインタ制覇?
0075デフォルトの名無しさんNGNG
量スレ上げ
0076デフォルトの名無しさんNGNG
>>66
ちゃんと読むように
0077デフォルトの名無しさんNGNG
>>59
K&R 本じゃなくて C の開発者であるところの K&R にケチ付けてるね。
0078デフォルトの名無しさんNGNG
ハーバート・シルトの本はどうよ?
0079デフォルトの名無しさんNGNG
>>78
くそ
0080デフォルトの名無しさんNGNG
>>62
startupに一票。

もしくは終了時処理関数(終了するときに必ず呼ばれる)も用意して、
initializeとfinalize関数となづける
0081デフォルトの名無しさんNGNG
> K&Rは、シンプル&明瞭&正確無比な名著だよ。

それならこのスレは無意味だね(^o^)
008281NGNG
念のため
> K&Rは、シンプル&明瞭&正確無比な名著だよ。
↑これが間違っていると言っているんじゃないよ。本当に無意味なスレだと思ったから。
0083デフォルトの名無しさんNGNG
>>82
そうおもってるなら 81 の意見は矛盾しているが?
0084デフォルトの名無しさんNGNG
>>83
頭悪いのか?
0085デフォルトの名無しさんNGNG
林晴比古の欠点を語ってくれ。
008683NGNG
>>84
わるいから、矛盾してない理由を教えて。
0087デフォルトの名無しさんNGNG
K&Rは、シンプル&明瞭&正確無比な名著だよ。
これが”本当”ってことか。
0088デフォルトの名無しさんNGNG
>>33
ごめん、ちょっとレスが遅いけど
ゲラゲラ笑いました。
面白いネタをありがとう。
みんなに教えてあげます。
0089デフォルトの名無しさんNGNG
#include<stdio.h>

void main(void)
{
while(1){

printf("      +               +    + \n");
printf(" .  (\_/)(\_/)(\_/)         \n");
printf("    (´∀`∩(´∀`∩( ´∀`)        \n");
printf("  + (つ ノ (つ 丿 (つ   つ ))  +    \n");
printf("    ヽ( ノ( ヽ ノ )  ))          \n");
printf("   + (_)し' し(_)(_)_) \n");

}
}


こんなんできました。
0090デフォルトの名無しさんNGNG
>>58
まず、KernighanとPikeの『プログラミング作法』を買ってきて、
それから、その41ページあたりを読んで考えてみるといいと思う。
0091デフォルトの名無しさんNGNG
学校のやつらがあまりにくだらない質問してくるので
ヘルプファイルをプレゼントしたいです。
C 教本つーか、Ansi C のオンラインヘルプ *.hlp どっかに
落ちてませんか。2次配布自由の。
0092デフォルトの名無しさんNGNG
enumをイーナムって読んでたけどいいの?で、何の略?
0093デフォルトの名無しさんNGNG
enumerate
【動】【他】1 〈…を〉挙げる,列挙する: He 〜d the advantages of air travel. 彼は飛行機旅行の長所を一つ一つ挙げた/The errors are too many to 〜. 間違いが多すぎて列挙することができない.2 〈…を〉数えあげる.
ラテン語「数えあげる」の意;【名】enumeration
009492NGNG
>93
ありがとう。
エニュマレート?では正しい発音はエニュムか。
0095デフォルトの名無しさんNGNG
inju:m∂reit
イニューメレイト かな。
0096デフォルトの名無しさんNGNG
http://www.speech.cs.cmu.edu/cgi-bin/cmudict?in=enumerate
によれば、発音は
IH N UW M ER EY T
だ。
0097デフォルトの名無しさんNGNG
Cを教える前にエクセル等の使い方を教えておくと、
ポインタをイメージしやすいかもしれない。
0098デフォルトの名無しさんNGNG
Cを教える前にN88BASIC等の使い方を教えておくと、
OOをイメージしやすいかもしれない。
0099デフォルトの名無しさんNGNG
>98
違う
0100デフォルトの名無しさんNGNG

OO ←鼻の穴

OQ ←鼻毛
0101デフォルトの名無しさんNGNG
おーさんのおー
きゅーちゃんのきゅー
0102デフォルトの名無しさんNGNG
つーか、switch を教える必要はないだろ。
if と関数化で十分。
0103デフォルトの名無しさんNGNG
男らしく三項演算子だ
0104デフォルトの名無しさんNGNG
男らしくならgotoだろゴトァ
0105デフォルトの名無しさんNGNG
K&Rは著者前書きを読んで良さそうだなと思ったが訳者前書きを読んで頭が痛くなったのでそれ以来読んでない。
0106デフォルトの名無しさんNGNG
ifとgotoだけでオッケー!!
0107デフォルトの名無しさんNGNG
配列を宣言した後は、その配列を配列として使用することは無いと明言するべきだ。
0108デフォルトの名無しさんNGNG
基本的に C 言語のプログラムは if と goto により成り立っています。
つまり、if と goto を覚えればプログラムが書けるということです。
では、さっそく例を見てみましょう。
0109デフォルトの名無しさんNGNG
C 言語には関数というものがあります。
しかし、関数はあまり使わないほうがよしとされていますので
この本では説明しません。
0110デフォルトの名無しさんNGNG
C 言語はポインタが使える言語です。
せっかくポインタが使えるのですから、
これを使わない手はありません。
基本的に、変数はすべてポインタとして宣言するように
心がけましょう。
0111デフォルトの名無しさんNGNG
C 言語にはfor、while、doといったループ構文があります。
しかし、ループは関数と再帰を使ってもかなりのものが表現できますので、
この本ではループ構文の解説は行いません。
---------------------------------------------------
第9章 #define
この章では、C言語でもっともパワフルな構文とも言える「#define」について、実際的な
例を通して学習していきましょう。
0112デフォルトの名無しさんNGNG
>>111
ちょっとまて
再帰でfor文を実現するのはかなり面倒だぞ

とりあえず
for(i=0;i<10;i++) func(i);
という構文を再帰で再現するとどうなる?
0113112NGNG
void forloop(int i, int N)
{
 if(i<N)
 {
  func(i);
  forloop(i+1,N);
 }
}

main()
{
 forloop(0,10);
}

ループ内の見通しが悪いなぁ。
関数も渡した方がいいかな?
0114デフォルトの名無しさんNGNG
void forloop(int i, void (*func)(int))
{
 if (i == 0) return;
func(i);
forloop(i-1, func);
}

main()
{
 forloop(10, func);
}

別に逆順に呼んでもよいだろ。
0115デフォルトの名無しさんNGNG
頭の体操みたいだな…
0116デフォルトの名無しさんNGNG
それだと、渡す関数の引数が違うといちいちforloop関数かきかえなきゃならんなぁ。
0117デフォルトの名無しさんNGNG
関数の引数を構造体にまとめて、ポインタ渡しすればいいだろー。

void forloop(int i, void (*func)(int,void *), void *p)
{
 if (i == 0) return;
 func(i, p);
 forloop(i-1, func, p);
}

main()
{
 struct datatype data;
 forloop(10,func, &data);
}
0118デフォルトの名無しさんNGNG
どうでもいいけど、不毛だ
0119116NGNG
>>117
あー、実はさらに2重ループってのを考えてた。
ちょっと上を発展させてがんばろうとおもったけど、ヤメタめんどい。

つまりこれをどうやるか、

int main()
{
  int x,y;
  int col = 0xff0000;
  for(x=0;x<1024;x++)
    for(y=0;y<768;y++)
      SetPixel(x,y,col);
  return 0;
}
0120デフォルトの名無しさんNGNG
int main()
{
  int x,y;
  int col = 0xff0000;
  for(x=0;x<1024*768;x++)
      SetPixel(x%768,x/768,col);
  return 0;
}
と考えれば普通のループだ。
forloopパターンでいける。
0121デフォルトの名無しさんNGNG
こんな感じでよろしく

int func1(int i, void *pv)
{
 int x = i / 1024;
 int y = i % 1024;
 int *pcol = pv;
 SetPixel(x, y, *pcol);
}

void forloop(int i, void (*func)(int,void *), void *p)
{
 if (i == 0) return;
 func(i, p);
 forloop(i-1, func, p);
}

main()
{
 int col = 0xff0000;
 forloop(1024*768,func1, &col);
}
0122デフォルトの名無しさんNGNG
逆じゃん。

 int x = i % 1024;
 int y = i / 1024;
0123デフォルトの名無しさんNGNG
結論として、再帰を使っても表現可能だけどコストかかるなぁ
スタックに積んで降ろして積んで降ろして積んで降ろして・・・
0124デフォルトの名無しさんNGNG
最初の一文がコレ!

「はっきり申しまして、Cのプログラムを学ぶにはCコンパイラ作ったほうが良く理解できます」
0125デフォルトの名無しさんNGNG
>>124
いやあどうだろ。
単純な数式だって苦労すると思うよ。
x=x+y*z;
とかさ、これってそれなりに勉強しないと面倒じゃん。
0126デフォルトの名無しさんNGNG
何が作れるかだ。理解など2の次。
0127デフォルトの名無しさんNGNG
>>126
まあ、それも大事なんだけど、どちらかというと、何を作るか、でしょ。
何が作れるか、というのも面白いんだけどね。
0128デフォルトの名無しさんNGNG
Q&Aとして

Q.「なんで引数をいんすうと言ったらイカンのじゃ!訓読みと音読み混ざってて気持ち悪い」
に答えるべき!!!!!!はっ!!
0129デフォルトの名無しさんNGNG
>>128
重箱読みってやつだ。勘弁したってや
0130デフォルトの名無しさんNGNG
因数と区別しやすいからでしょ
0131デフォルトの名無しさんNGNG
実際、本の理論だけ知ってても作らないと実力はカス。
0132デフォルトの名無しさんNGNG
>>124
> 最初の一文がコレ!
> 「はっきり申しまして、Cのプログラムを学ぶにはCコンパイラ作ったほうが良く理解できます」
ならばそういう初心者向けの本つくったって。
0133デフォルトの名無しさんNGNG
C言語はポインタがわからないと使えません。
例えば以下のようなものです。
int* (*h(void (*g(void (*f)(int)))(int)))(int (*i)());
0134デフォルトの名無しさんNGNG
[intを受け取り[intを受け取る値を返さない関数へのポインタ]を返す関数へのポインタ]を受け取って、
[intを返す関数へのポインタ]を受け取り[intのポインタを返す関数へのポインタ]を返す関数の宣言だが何か?
0135デフォルトの名無しさんNGNG
>>133
よく使われる有益な使用例キボンヌ。
教本にはサンプルコード大事だよね!
0136デフォルトの名無しさんNGNG
そこまでいくと訳分からんな。
以下で i を int を返す関数(引数:なし)へのポインタとする
以下で f を void を返す関数(引数:int)へのポインタとする
以下で g を void を返す関数(引数:int)へのポインタを返す関数(引数:f)とする
宣言は、h は int へのポインタを返す関数(引数:i)へのポインタを返す関数(引数:g)である

まとめると、h は int へのポインタを返す関数(引数:int を返す関数(引数:なし)へのポインタ)へのポインタを返す
関数(引数:void を返す関数(引数:int)へのポインタを返す関数(引数:void を返す関数(引数:int)へのポインタ))である

であってる?
0137デフォルトの名無しさんNGNG
>>129
重箱の隅をつついて悪いが、
引数は訓音読みだから、重箱ではなく湯桶読みであるナリ。
0138デフォルトの名無しさんNGNG
>>134が正解
>>136まちがってる。

ついでにいうとf, g, iはこの場合宣言として意味を持っていない。
0139デフォルトの名無しさんNGNG
>>138
typedef void (*foo0)(int);
typedef int (*foo1)();
typedef int* (*foo2)(foo1);
foo2 h(foo0 g(foo0 f));
ってことでいいですか?
0140デフォルトの名無しさんNGNG
オタク向けの非実用C教本作るスレか?
0141デフォルトの名無しさんNGNG
>>111
ビット・フィールドにも是非一章を費やさなければ。
0142デフォルトの名無しさんNGNG
Pascal風味
function( function (x:integer):procedure (x:integer) ):function ( function:^Integer ):function:^Integer;
0143デフォルトの名無しさんNGNG
このように、Lispを知っていると括弧の多さに抵抗がありませんので、
まずはLispから始めましょう。
0144デフォルトの名無しさん NGNG
switchのcaseじゃないほうの分岐法を最近知ったのだけど、扱ってる本って少ないの?
えーっと確かリソルト(←スペル忘れた)だっけ?
0145デフォルトの名無しさんNGNG
>>144
なにそれ
0146デフォルトの名無しさんNGNG
まさか
void (*casetbl[])() = {
case0,
case1,
case2,
   :
};

if (casetbl[n] != NULL)
{
 casetbl[n]();
}

とかじゃねーだろうな。
0147デフォルトの名無しさんNGNG
default:のことじゃない?
0148デフォルトの名無しさんNGNG
あってるのはルトだけかよ。
0149144NGNG
知ったのは2chのプログラム版。
もしかしたら勘違いかも...。(汗

>146
それは始めてみたかも。
関数ポインタ群のテーブル?

>147
defaultは知ってます。
複雑なことはあんましないんで、使わないようになって来てますが。
えーっと、たとえばswitch(N)をしたとして、
result N==0:のようなことができるはず。(スペル不明)
0150デフォルトの名無しさんNGNG
result をリソルトとは歯磨き粉みたいだね。
0151デフォルトの名無しさんNGNG
【こ】

コンパイラ

 アレスタやぷよ好きの人間のこと。
0152デフォルトの名無しさんNGNG
【r】

result

 リソルト。
0153デフォルトの名無しさんNGNG
>>149
できねーよ。
そのままコンパイルできるサンプルソース書いてみろ
0154デフォルトの名無しさんNGNG
どうやら参考演算子のことを言っているようだぞ?

result = (N == 0 ? case0_value :
      N == 1 ? case1_value :
      N == 2 ? case2_value : default_value);
0155デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/tech/983191866/l50
ここの最初のほう見れば経緯はわかる。

ただ>>144よこれは3項演算子といってswitchとは別の条件選択方法だぞ。
それにメンテナンス性を考えたら素直にswitchやif〜elseif〜 elseを
使ったほうが断然良いぞ。
あのスレは「いかに素直に書かないか」を競ってるとこだから実用向けで
はない。
0156デフォルトの名無しさんNGNG
>>152
発音的には「リザルト」、だったような気がする。
0157デフォルトの名無しさんNGNG
>>156
(・∀・)ネタニマジレス!!
0158デフォルトの名無しさんNGNG
>>157
(・∀・)ネタニマジレス!!
0159デフォルトの名無しさんNGNG
result = (N == 0 ? case0_value :
      N == 1 ? case1_value :
      N == 2 ? case2_value : default_value);

これは、


if ( N==0 )
 result = case0_value;
else if (N == 1)
 result = case1_value;
else if (N == 2)
 result = case2_value;
else
 result = default_value;

だよね!
0160デフォルトの名無しさんNGNG
>>155
中には実用的なのもあるよ。
あと、インラインアセンブラを使わずにCのコードのみで
最適化を目指すときに役に立つパターンとかもあったりなかったり
0161デフォルトの名無しさんNGNG
スタックの概念をわかりやすくAAにしてみよう
0162デフォルトの名無しさんNGNG
車が悪路にはまって抜け出せないでいるところ
0163デフォルトの名無しさんNGNG
 ∧ ∧
( ´∀`)<順番まちモナ

│
│(,,,゚Д゚)<1番最初だゴルァ
└─────────────┘
    スターク


 ∧ ∧
( ´∀`)<まだまだ順番まちモナ

│
│ミ,,゚Д゚彡<ニバーン
│(,,゚Д゚)<1番最初だゴルァ
└─────────────┘
    スターク


 ∧ ∧
( ´∀`)<もうちょっと待ってくれナ-

│
│(;´Д`)<しかたない…3番だァ
│ミ,,゚Д゚彡<ニバーン
│(,,゚Д゚) <1番最初だゴルァ
└─────────────┘
    スターク
0164デフォルトの名無しさんNGNG
取り出すモナー
 ∧ ∧
( ´∀`)
(    )

 (;´Д`) ? <最後に並んだのに…(・∀・)イイ!

│
│ミ,,゚Д゚彡<ニバーン
│(#,,゚Д゚) <俺が最初に並んだんだゴルァ!!
└───────────────┘
    スターク
0165デフォルトの名無しさんNGNG
>>163-164
(・∀・)イイ!!
0166デフォルトの名無しさんNGNG
モナーの図解入りのデータ構造入門とかも作ってくれ!
0167デフォルトの名無しさんNGNG
書評:私はモナーを使うとここまで分かりやすい説明になるとは思いも寄りませんでした。
    次は二分木の説明だそうですが
0168144NGNG
>155
うわ、3項演算子だったのか...。
言葉は知ってたけど、詳しいとこまでは知らなかった。
言われなかったらと思うと...。
155に感謝。
うんじゃ、逝ってきます。
0169デフォルトの名無しさんNGNG
スタックはForthをやるとわかる。
0170寒ブリNGNG
エスタークはDQ4以降に出てくる
0171デフォルトの名無しさんNGNG
>>169
普通は「スタックが分からないとForthは分かりません」じゃないだろうか?
0172有名な言葉だよNGNG
「Forthと共にあれ!」
0173デフォルトの名無しさんNGNG
May the SOURCE be with you!
ソースとともにあらんことを!

先輩(Cの達人だった)の言葉です。
つーか会社やめるならドキュメント残してけ クソッタレ・・・
0174デフォルトの名無しさんNGNG
Cの達人は日本語のDQNだったりするから、ドキュメントあっても
「わからん、コード読むべ」ってことになったかも。
0175前原しのぶNGNG
C言語 かっこいいですぅーー
0176ミスターアジっ子NGNG
C言語と書かない
0177デフォルトの名無しさんNGNG
余計なアルゴリズムはなるべく教えないほうがいいとおもう。
ポインター、構造体、配列などの基本ルールを叩き込んでからアルゴリズムに移ればよい。
0178デフォルトの名無しさんNGNG
分冊にして、第一分冊はアセンブリ言語教本にすべし(結構マジ)!
第二分冊はそれを受けて、第一分冊の例をCで書いてみせると。
0179デフォルトの名無しさんNGNG
文は逆から読みましょう。

struct 分数
{
int 分子;
int 分母;
};

struct 分数 x;

「使いたいのは x です。」
「x って何? 分数です。」
「分数って何? struct です。」
「分数という struct って何? 分子と分母をメンバに持つ struct です。」
「分子って何? 分母って何? int です。」

インデントされてませんが。
0180デフォルトの名無しさんNGNG
>>179
人は帰納的に考え、プログラムは演繹的に記述されるわけか。
0181179NGNG
>>180
良い事言いますね。素晴しい。

struct 分数 *x;

とかもこれで説明できますね。
「x って何? 参照です。」
「何への参照? 分数です。」
/* 以下同文 */
0182デフォルトの名無しさんNGNG
違います。左から順に読んでください。

int a = 1;

「1をaに代入し、その型はintである」X
「int型の変数aを宣言します、その値を1にします」O
0183新人研修用ならNGNG
イントロダクションは

1.unix shellかDosコマンドプロンプト
2.とりあえず Hello World
3.C言語と標準規格と処理系について

で、60分というところか。
0184179NGNG
>>182
それはおかしいと思います。貴方が友人のジョンに自分の車を
紹介するとき、いきなり

「○○社のエンジンを塔載した車。それはワゴン。買ったよ。」

とは言いませんよね。

「車買ったよ。ワゴンなんだけど。○○社のエンジンを塔載してるんだ。」

と言うのが自然だと思います。
0185デフォルトの名無しさんNGNG
それは日本人だから最初あいまいに指定して、だんだん細かくしぼっていくが、
メリケンははじめ細かいとこからせめていって、ちょっとづつ対象を広げていくんだ。
こちらのほうが理解しやすい。
住所の表記の仕方をみれば一発だ。
人間の名前もな。
0186179NGNG
>>185
で、何が結論なんですか?
■ このスレッドは過去ログ倉庫に格納されています