1 :
デフォルトの名無しさん :
04/05/04 15:14
2 :
デフォルトの名無しさん :04/05/04 15:15
2
3 :
デフォルトの名無しさん :04/05/04 15:15
証明まだ?
5 :
デフォルトの名無しさん :04/05/04 15:15
'`,、('∀`) '`,、
6 :
デフォルトの名無しさん :04/05/04 15:18
もっと光を! > 照明まだ?
なんでスレタイ変えたの? バカ?
8 :
デフォルトの名無しさん :04/05/04 15:19
おれじゃないもん
C言語とかかずにCとかくと日下部せんせいが興奮して失禁してしまうからです。
10 :
デフォルトの名無しさん :04/05/04 15:21
11 :
デフォルトの名無しさん :04/05/04 15:22
13 :
デフォルトの名無しさん :04/05/04 15:27
14 :
デフォルトの名無しさん :04/05/04 15:34
やーい > 読めないやつ
もじばけしてますよ
16 :
デフォルトの名無しさん :04/05/04 15:44
化けてないよん。 どんなブラウザーで読んでるの?
17 :
デフォルトの名無しさん :04/05/04 15:51
漢ならlynxだろ! > ブラウザー ...って先生が言ってたぞ。
18 :
デフォルトの名無しさん :04/05/04 15:52
lynxで文字化けしませんよ? Operaでも
19 :
デフォルトの名無しさん :04/05/04 16:06
2重のループから抜け出すにはどうすればいいですか?
20 :
デフォルトの名無しさん :04/05/04 16:06
SLS(ソースレベル・リンク・システム)について語ろうよ! 使ってるんだろ?
21 :
デフォルトの名無しさん :04/05/04 16:07
ファイルと関数の2段階以外にスコープを階層化する方法はないですか?
22 :
デフォルトの名無しさん :04/05/04 16:07
>>19 break2回。
フラグでチェック。
goto。
23 :
デフォルトの名無しさん :04/05/04 16:08
break2回ってのは、 具体的にどう書くのですか?
24 :
デフォルトの名無しさん :04/05/04 16:09
>>23 まず、どういうコードで使いたいかソースを晒せ。
25 :
デフォルトの名無しさん :04/05/04 16:10
>>19 ループ全体を関数に切り出してreturnって手もある
26 :
デフォルトの名無しさん :04/05/04 16:12
while (...) { while (...) { if (...) { break; breal; } } }// tha's joke
27 :
デフォルトの名無しさん :04/05/04 16:12
break 2; とかかければいいのに ;-)
28 :
デフォルトの名無しさん :04/05/04 16:13
30 :
デフォルトの名無しさん :04/05/04 16:13
え? ウケたのにー
31 :
デフォルトの名無しさん :04/05/04 16:14
関数の引数のカンマとカンマ演算子はどうやって区別しますか? foo(a, b, c, (d, e), f);
32 :
デフォルトの名無しさん :04/05/04 16:16
仮引数やプロトタイプで const char *s; と定義されている引数に、 char *sみたいな変数を実引数で渡しても警告はでないですか?
33 :
デフォルトの名無しさん :04/05/04 16:16
while (){ while (){ if (){ flag = 1; break;} } if (flag == 1) break; }
34 :
デフォルトの名無しさん :04/05/04 16:17
関数の末尾やループの末尾(閉じる中括弧の前)にラベルを置けないのはなぜですか? なぜ「;」が必要?
35 :
デフォルトの名無しさん :04/05/04 16:17
>>32 締めつける方向だからok。逆だと、constを理解して適切な警告レベルなら出るだろ。
36 :
デフォルトの名無しさん :04/05/04 16:19
学校の課題の答えで、 cunt +=2; って書いてたら2年生に笑われました。なぜですか?
37 :
デフォルトの名無しさん :04/05/04 16:20
38 :
デフォルトの名無しさん :04/05/04 16:20
>>36 cunt
━━ n. 〔卑〕 女性器; 〔軽蔑〕 女; 〔卑〕 嫌なやつ, ばかなやつ.
40 :
デフォルトの名無しさん :04/05/04 16:21
Javaの >>> 演算子に相当するのはCでは何ですか?
42 :
デフォルトの名無しさん :04/05/04 16:22
double d; int i; i = d; ってやると、dの値が切り捨てられちゃいます。 自然科学式の四捨五入をするにはどうすればいいですか? また、銀行式四捨五入をするにはどうすればいいですか?
43 :
デフォルトの名無しさん :04/05/04 16:23
44 :
デフォルトの名無しさん :04/05/04 16:24
>>42 切り捨てられるかどうかは実装依存。
その自然科学式とか銀行式の定義をまずしろ。
ceil()、floor()使え。
45 :
デフォルトの名無しさん :04/05/04 16:24
main関数は前に書きますか? それとも一番あと?
46 :
デフォルトの名無しさん :04/05/04 16:25
> その自然科学式とか銀行式の定義をまず いわゆる世間一般常識のやつです。
47 :
デフォルトの名無しさん :04/05/04 16:26
49 :
デフォルトの名無しさん :04/05/04 16:26
> 一番後。 なぜですか? > 切り捨てられる環境なら+0.5しとけ。 マイナスのときにうまくいきません。
50 :
デフォルトの名無しさん :04/05/04 16:27
>>45 好き好きだが、
一番最後に書けば、そのファイル中のmainから呼ばれる関数は
定義自身がプロトタイプ宣言を兼ねるため
独立したプロトタイプ宣言をいちいち書かなくても済む。
51 :
デフォルトの名無しさん :04/05/04 16:28
>>49 prototype宣言まんどくさいから。
マイナスの時って…少しは頭つかえよw
実行形式が.comのファイルをつくるには どうしたらいいですか。
>>53 WindowsXPで動きますか?
ちなみにどこでかえますか?
55 :
デフォルトの名無しさん :04/05/04 16:33
>>52 まず、どうしてcomファイルが作りたいのか言え。
>>55 昨日神さまからのお告げがあって、
GWが終わるまでにつくらないと隕石が地球に衝突するそうです。
57 :
デフォルトの名無しさん :04/05/04 16:38
59 :
デフォルトの名無しさん :04/05/04 16:45
>>58 だから、まず、どうしてcomファイルが作りたいのか言え。
Visual CでCを勉強してるのですが、 EOFを示す値は何を入力すればいいのでしょうか? テキストには^Zってありましたが、終了してくれません。
あんのぉ〜、マイナスのときの四捨五入のふるまいって、 いろんな定義があるんじゃないのかと〜。 +0.5して切り捨てたときのふるまいもじゅう〜ぶんに四捨五入だとおもうんだけどぉ〜。
>>59 人が人らしくあるのに理由がひつようなのかい?
>>60 ^Zってのが
Ctrl + z ってのはわかってるだろうな。
66 :
デフォルトの名無しさん :04/05/04 16:57
>>62 だったらcomファイルを作る理由もないだろ。ましてや人に聞く必要もない。
67 :
デフォルトの名無しさん :04/05/04 16:58
>>60 Ctrl+zの後にEnterも必要だ、普通は。
>>62 人らしいっていうのがちょっと曖昧だね・・・
きちんと人らしいって言葉を定義してもらわないと・・・
^Z ← を直接入力してました。 CTRL+Zなのですね。どもですた。
72 :
デフォルトの名無しさん :04/05/04 17:15
なんだこの糞タイトルは
#include <stdio.h> char *str_chr(const char *str, int c) { for ( ; *str; str++){ if (*str == c) return ((char *)str); } return (NULL); } int main(void) { char str[10], *p; char uletter[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; printf("英大文字を入力してください:"); scanf("%s", str); p = str_chr(uletter, str[0]); if (p !=NULL) puts(p); return (0); } 本に載ってた例題で、読み込んだ英大文字以降のアルファベットを表示するというプログラムなんですが 最初の関数を宣言するときint型の引数cを取る理由がわかりません。 char型ではいけないのですか?
74 :
デフォルトの名無しさん :04/05/04 18:01
>>73 文字を扱うだけならcharで問題なし。
ただ文字以外にEOFも表現できるようにするために大きな型であるintになっている
getchar(), getc()やらの結果をそのまま渡せるようにするならintにしたくなるかもな。
76 :
デフォルトの名無しさん :04/05/04 18:02
>>73 標準関数strchrに合わせているのでは?
77 :
デフォルトの名無しさん :04/05/04 18:03
78 :
デフォルトの名無しさん :04/05/04 18:04
先輩にgotoを使うなと怒られたのですが プロジェクトのソースには何度も使われています。 やはり使ってもいいんでしょうかね。
79 :
デフォルトの名無しさん :04/05/04 18:06
先輩がgoto
>>78 gotoは"刃物"だ。
適切な場所が判断できないうちは無条件に使わないほうがいいかもしれんし
逆に使って痛い目にあって学習する手もあるかもしれん
>>78 >gotoを使うなと怒られた
その前後に何か修飾する言葉がついていなかったか?
「おまえは」とか、「こういう処理に」とか、「やたらめったら」とか。
82 :
デフォルトの名無しさん :04/05/04 18:10
gotoってやたらめったら使いたくなるほど便利なものでもないよな。
83 :
デフォルトの名無しさん :04/05/04 18:11
>>78 Cの場合はごくまれにgotoが有効なケースがある。
しかし、初心者は使ってはいけない。
84 :
デフォルトの名無しさん :04/05/04 18:11
>>78 goto嫌いな人のが多いから使わない方がいいよ。
>74-77 ありがとうございました
最近私は、「goto使うなら私を納得させる理由を提示しろ」と言ってます。
最近私は、「goto禁止するなら私を納得させる理由を提示しろ」と言ってます。
どんな理由にせよこんなgoto文だけは絶対に許さないってのはあります? 例えばswitch文の中にラベル貼るとか・・・
#include <stdio.h> int main() { hahaha: printf("ぬるぽ"); goto hahaha; return 0; }
>>88 入れ子の無いforとか、whileとか、switchとか。continueやbreakの代わりとか。
構文が用意されているものをわざわざgotoを使って記述することかな?
フツーに配列をたどっていくのにforでなくwhileを使ったりするのと同じように。
91 :
デフォルトの名無しさん :04/05/04 19:31
>>88 あとはあれだな、switchの中のcaseラベルに飛ぶやつ。
92 :
デフォルトの名無しさん :04/05/04 19:36
>>88 gotoは一般的にご法度だな。アセンブラやN88BASICじゃなければ
switchはラベルあるけどbreak;かreturn;だから問題なし、default:も
書いておけば。
ただ巨大なswitchは可読性下がるけどWinのWindowProc()とか・・・
93 :
Aransk :04/05/04 19:40
★☆★無知無学な文系糞虫祭り★☆★ 絶賛開催中!!!
http://pc5.2ch.net/test/read.cgi/tech/1083624060/ /| | |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
| | | ̄ ̄ ̄ /| ||
| | | / /|TTTTTT TTTTTTTTTT||TTTTT
| /\ | /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
| / / |// / /|
| / / |_|/|/|/|/|
| / / |文|/ // /
|/ /. _.| ̄|/|/|/ Λ_Λ
/|\/ / / |/ / (___) 表示的意味論わからずに
/| / / /ヽ /〔 祭 〕〕つ 意味論騙ろうとはふてぇ奴だ
| | ̄| | |ヽ/l `/二二ヽ みんなでまつっちまえ
| | |/| |__|/ Λ_Λ / /(_)
| |/| |/ ( ´∀`) (_) Λ_Λ
| | |/ // / ^ ̄]゚ (` ) 「構文が表示的意味論」(プッ
| |/ ゚/ ̄ ̄_ヽ ⊂〔〔 祭 〕
| / /_ノ(_) ┌|___|
|/ (__) (_ノ ヽ ヽ
/ (_)
94 :
デフォルトの名無しさん :04/05/04 22:04
折れもgotoは使うなといわれた。使ったら後ろ指差されるって言われた。
>>92 アセンブラやN88BASICじゃなければgotoは一般的にご法度だな。
switchはdefault:も
書いておけば、ラベルあるけどbreak;かreturn;だから問題なし。
ただWinのWindowProc()とか巨大なswitchは可読性下がるけど・・・
こうですか?わかりません!
>gotoは一般的にご法度だな。アセンブラやN88BASICじゃなければ 訳]アセンブラやN88BASICであればともかく、(Cでは)gotoを使う事はほとんど無いですね。 >switchはラベルあるけどbreak;かreturn;だから問題なし、default:も >書いておけば。 訳]ラベルを使うという意味でswitchについてですが、 通常の使い方であれば break か return で処理分岐させるので気にする必要は無いはずです。 default: については記述するだけで自動的に該当しないケースの分岐しますし。 >ただ巨大なswitchは可読性下がるけどWinのWindowProc()とか・・・ 訳]ところで話が変わりますが、Windowsでのプログラミングにおいて WindowProc()とかで良く見かけるブロックが長い switch 、 可読性が下がるので良くないコーディングだと思いませんか?
>>97 機械翻訳ですか?結構うまくできるんですね。
変な話ですが、 Cを勉強をするにあたって ただ闇雲に覚えていくだけじゃつまらないので 何か作りたいと思いますが、 例えば簡単なシューティングゲームだとどのくらいのスキルが必要になりますか? 何ヶ月、何年とか期間じゃなくて、 何時間みたいな総合計、勉強すればよいのでしょうか? (製作時間は含まない)
1000
101 :
デフォルトの名無しさん :04/05/04 23:15
>>99 人による。
だいたいCの前にPascalとかまともな教育を受けていればCを使うのに1日はかからない。
Cを使うのに1日はかからない。
じゃあDel厨はすぐにでもCのプログラムが組めますね。
しかし、アルゴリズムを考えるの時間がかかるyo
オレ未だにまともにC使えないや・・・ 使えるって人に言えるレベルって大体どのくらいですか?
GW sage
>>105 > Pascalとかまともな教育を受けていれば
↓
Delphi≒ObjectPascal
↓
> Cを使うのに1日はかからない。
↓
del厨(゚д゚)ウマー
109 :
デフォルトの名無しさん :04/05/04 23:57
>>108 前提が間違ってるぞ。Del厨でも教育受けてるもの(相当)だぞ?
110 :
デフォルトの名無しさん :04/05/05 00:00
>>108 まぁDelphiの方がよっぽど難しいけどなw
111 :
デフォルトの名無しさん :04/05/05 00:01
(Pascal | まともな教育を受けていれば)
Cを読むのには1日かからないだろうが Cを使うのにはそれなりに時間かかるんじゃないか 細かい差異があるととくに混乱するし。
そういえばpascalならbagin...endが使えるな
114 :
デフォルトの名無しさん :04/05/05 00:07
101は数日前のあいつか
115 :
デフォルトの名無しさん :04/05/05 00:07
118 :
デフォルトの名無しさん :04/05/05 00:20
ごめん。。やっぱり僕、君のことが好きみたいだ。。
120 :
デフォルトの名無しさん :04/05/05 00:27
明後日からの日にちを入力して、その曜日を出力するプログラム。 動かないよー、助けて!! #include<stdio.h> main(){ char *weekp[7] = { "thu","fri","sat",sun","mon","tue","wed" }; int i ,day; scanf("%d",&day); i = day % 7; printf("%s\n", weekp[i]); }
>scanf 釣りですか?
>>120 エラーが出るのか、期待した動きにならないのか位はかけ。
>>120 何がしたいのかわからないよー、助けて!!
>>120 何がしたいのかわからないよー、助けて!!
127 :
デフォルトの名無しさん :04/05/05 00:34
128 :
デフォルトの名無しさん :04/05/05 00:41
14日が木曜日になるのは仕様ですか?
明確なプログラムのバグ
130 :
デフォルトの名無しさん :04/05/05 01:05
>>106 自分で作りたいと思ったものが作れれば。
言語以前に作りたいと思うものをどーしたら作れるかという部分も必要ね。
>>108 別にCが使えてウマーなわけは無いと思うが。誰でも使えるしね。
>>113 Pascalなら、じゃなくてそこが元でそ、大抵の奴は。
>>130 がマジレスかネタか分からない漏れは2chをしない方がいいんだろうか。
>>131 分からんのならそじゃないか?
漏れも分からんがやめようとは思わない。なんでそう思う?
133 :
デフォルトの名無しさん :04/05/05 02:12
選球眼がなくて凡退しまくる打者のようなものだな。
135 :
デフォルトの名無しさん :04/05/05 04:08
> マイナスの時って…少しは頭つかえよw ようするにあなたはわからないのですね?
136 :
デフォルトの名無しさん :04/05/05 04:09
> Ctrl+zの後にEnterも必要だ、普通は。 しかもEnterの直後じゃないとね
137 :
デフォルトの名無しさん :04/05/05 04:11
> for ( ; *str; str++){ なんで「)」と「{」をくっつけるんだよ
138 :
デフォルトの名無しさん :04/05/05 04:12
わtがしの先輩の書いてたソースにもgotoって数十箇所でてきてましたよ。 /* modified by goto */ ってコメント中がほとんどでしたが
139 :
デフォルトの名無しさん :04/05/05 04:14
> 例えばswitch文の中にラベル貼るとか・・・ ラベルのないswitch文なんて、何の役ににも立ちません。 まるでコーヒーをいれないクリープみたいなものです
140 :
デフォルトの名無しさん :04/05/05 04:16
> > gotoは一般的にご法度だな。アセンブラやN88BASICじゃなければ > 訳]アセンブラやN88BASICであればともかく、(Cでは)gotoを使う事はほとんど無いですね。 それは誤訳ですね。 正しい訳は、 「gotoがダメとかいう話はオレでもきいたことはあるぞ。なんでダメなのか、くわしくは しらんが、ちなみに、俺がほかに名前を聞いたことがある言語はアセンブラとN88BASIC ぐらいだ。たしかどっちかにはgotoっていうのもあったはず」 だな。
141 :
デフォルトの名無しさん :04/05/05 06:40
>>140 意味がよくわからん??
goto がダメなのは、forやwhileループから強制離脱したり、何でも出来て
しまうことが出来てしまうから危険と言われてる
そもそもアセンブラには条件分岐を含むジャンプ命令しかない
関係ないがSasserなるウィルスの話題で持ちきり棚
釣りご苦労
143 :
デフォルトの名無しさん :04/05/05 10:30
>>142 いや、
>>140 がただのマヌケにしか見えんw
>>141 マクロアセンブラは強力だ(った)よ。
Cで書くのと同程度の構造化すらできていた。
144 :
大域ジャンプ :04/05/05 11:17
「大丈夫さ、恐れないで」 「そんなことしたら、私が私じゃなくなってしまう気がして...」 「人生にはいつかジャンプしなければならいないときがくるのさ。」 「でも...」 欲望に正直なだけ 満たされてたい Goto Heaven
146 :
デフォルトの名無しさん :04/05/05 12:14
> 動かないよー、助けて!! scanf使うなよぼけ
147 :
デフォルトの名無しさん :04/05/05 12:16
ちなみに「goto」があるアセンブラって聞いたことないですね ;-)
>>147 ガキの喧嘩口上みたいなこというお方ですね
149 :
デフォルトの名無しさん :04/05/05 12:24
っていうか、gotoの話題でアセンブラがでてくる時点でだめすぎ。
150 :
デフォルトの名無しさん :04/05/05 12:27
YES/NO TRUE/FALSE True/False true/false どれを使っています?
どうして?
152 :
デフォルトの名無しさん :04/05/05 12:29
bool/true/false に決まってるだろ。Cなんだから ちなみにC++もbool/true/false DelphiみたいにTrue/Falseとか書かないし、 Javaみたいにboolean/true/falseでもない。
153 :
デフォルトの名無しさん :04/05/05 12:39
Cで func() { printf("ほげ"); int i, j; .... } みたいに、ブロックの先頭以外で変数宣言できるみたいですが、これって何か便利なこと ありますか? (っていうか、できないと不便な場面)
>>149 それは君が機械語やったことないからそう思うだけ。
gotoに限らないが、cのコードに対応する機械語を想像可能かどうかで
cに対する理解度や理解の容易さは違ってくる。
たとえば、アセでも構造化言語的にコードを記述することはある程度可能
なんだが、そういう経験がある人にとってはcでgotoをどんな場合に
使ったほうがいいかの判断は比較的容易だ。
155 :
デフォルトの名無しさん :04/05/05 12:47
> それは君が機械語やったことないからそう思うだけ。 いーや逆だろ。やったことあれば、高級言語のgoto論争にアセンブラもちだしても意味ない ことぐらいわかるだろーに ぼけ
156 :
デフォルトの名無しさん :04/05/05 12:51
gotoを使うのは つまりifやwhileやforやdoやbreakやcontinueで表せないものだけにすべし、って ことにすると、実際、gotoを使わないと表せない場面ってのは、ロジックやフローが 適切じゃない場合がほとんど。なので、初心者のうちは「goto不要論者」にだまされて 「とにかく使ってはいけないものなのだ!」と思い込んでいても、たいした弊害はない。
157 :
デフォルトの名無しさん :04/05/05 12:52
↑gotoの問題については「作ってわかるCプログラミング」にいろいろ書いてありましたよー 読んでください。(いま手元にないのでページ数はわかりませんが)
158 :
デフォルトの名無しさん :04/05/05 12:52
そんな言語はありません > cに対する理解度や
>153 使いたい変数をブロックの先頭で宣言する事しかできないので あらかじめ先頭に書いておく必要があった。 これからはいつでも使いたい所で宣言すればOKって事。
160 :
デフォルトの名無しさん :04/05/05 12:54
で、先頭にまとめずに、使いたい箇所で宣言すると、何かいいことあるんでしょうか?
161 :
デフォルトの名無しさん :04/05/05 12:56
>>153 Cでは宣言はブロックの先頭でしかできない。自由にできるのはC++の機能。
途中で宣言できるとスコープを有効に使える。使ってる場所のすぐそばで型が確認できる。
(コンパイラの都合だが)最適化に有利。
>>154 機械語を直接やらずともアセンブラをやればまぁ十分だな。
>>155 高級言語にgotoは無用。ちなみにCは低級言語の部類だ。
>161 C99では宣言はどこでもできたはず。 ・char *p = strchr( hoge , 'T');みたいに、定義と同時に初期化をかけることで、 変数を不定値のまま扱う事故が少なくなる。宣言と代入を離さねばならないと、 するとchar*p=NULL; .... p = strchr(hoge,'T');みたくしないとドツボになるが面倒。 ・必要なときに定義するので、変数のスコープが明確になる。 という利点があるな。
>153 "できないと不便な場面"はちと思い当たらんが、 ある関数で引数の異常チェックをしてから処理をする場合、 func() { いろいろな処理用の変数宣言 引数パラメータのチェック if(異常) return; いろいろな処理 } って書くよりも func() { 引数パラメータのチェック if(異常) return; いろいろな処理用の変数宣言 いろいろな処理 } の方がすっきりするかな。
returnつかうなよぼけ
165 :
デフォルトの名無しさん :04/05/05 13:01
166 :
デフォルトの名無しさん :04/05/05 13:04
161はかなりの知ったかぶり
167 :
デフォルトの名無しさん :04/05/05 13:04
っていうかifの後ろあけろよ
168 :
デフォルトの名無しさん :04/05/05 13:05
そんなものないぞ > VC7
169 :
デフォルトの名無しさん :04/05/05 13:07
でも、宣言といっしょに初期化を書いてしまうのって(auto変数の場合は実は代入に過ぎないのだが)、 ブロック先頭にまとめてた時代はよかったのだが、 途中にあると、どこに宣言があるのかわかりづらいんだよなあ
170 :
デフォルトの名無しさん :04/05/05 13:09
>>169 逆に頭にあるほうがどこで使ってるのか不明なことが多いな。
使うときに宣言する方が分かりやすいと思うな。
まぁコードというか、それを書いたやつのレベルに大いに依存するが。
Gotoを怖がるのは処女童貞の法則なんだな(w インテリがシモネタ耐性が無いのと同じ。 熟達者はむしろそれを楽しみ 精神性をもって芸術の域にまで高めるものだ。 第一真のプログラマーは(以下略)
>どこに宣言があるのかわかりづらいんだよなあ そんな糞コードは作り直せ(w
大丈夫、C++でもブロックの先頭でまとめて宣言する香具師は少なからず存在する。
174 :
デフォルトの名無しさん :04/05/05 13:18
> Gotoを怖がるのは 怖がるかどうかはたいしてもんだいじゃなくて、 「こわがらせるかどうか」の問題にすぎない
175 :
デフォルトの名無しさん :04/05/05 13:18
> どこに宣言があるのかわかりづらいんだよなあ そんな糞コードは作り直せ つまり先頭にまとめるってこと?
>150 >YES/NO >TRUE/FALSE OK/NG GOOD/BAD LIVE/DEAD
177 :
デフォルトの名無しさん :04/05/05 13:22
あのー 1/0に関してききかたかったのですが、 OK/NGも1/0なんですか?
>175 >つまり先頭にまとめるってこと? アフォか ブロックが分かりにくいのは構造が悪いからだろ
179 :
デフォルトの名無しさん :04/05/05 13:22
> ブロックが分かりにくいのは構造が悪いからだろ は? ブロックの「内部」の話ですが。
180 :
デフォルトの名無しさん :04/05/05 13:23
↑178は要するに内容をちっとも理解できないけど、けちつけてみたいだけだと思われ
181 :
デフォルトの名無しさん :04/05/05 13:24
なるほど
>177 言い伝えに従えば OK=0, NG=1 だな
183 :
デフォルトの名無しさん :04/05/05 13:26
なるほど
>178 ブロックって{と}で囲まれている範囲を指すと思うが...
185 :
デフォルトの名無しさん :04/05/05 13:29
161==171==172 こいつは、 ・Cの宣言がどこに書けるのかしらない ・アセンブリ言語と機械語の差をちゃんと把握できていない ・でも知ったぶりしたい ・gotoに関しては評判がよくないことぐらいしか知らない っていうやつですね。
186 :
デフォルトの名無しさん :04/05/05 13:30
>>184 だからブロックの「内部」の話だって言ってるだろ ぼけ
184はまだ理解できていないのか。
187 :
デフォルトの名無しさん :04/05/05 13:32
変数で思い出したが、Cで for (int i = 0; i < MAX; i++) ...とかってやるとき、このiのスコープはどこまで?forループ抜けても使える? C++やJavaでも同じですか?
188 :
ビル・ジョブス :04/05/05 13:33
>177 おれなら、OK==0、NG!=0だな
189 :
デフォルトの名無しさん :04/05/05 13:34
defineするときはどうするの? > 188 #define NG (!0) とするだけだと、結局1が入るだけでつまんないじゃん
190 :
デフォルトの名無しさん :04/05/05 13:36
>186 まぁまぁ、マターリCましょう
Cつかうなぼけ
192 :
デフォルトの名無しさん :04/05/05 13:40
Dbがいいな
193 :
ビル・ジョブス :04/05/05 13:40
>189 (!0)は必ず1じゃないと思うよ。
OK == FALSE、NG == TRUE ってのがチョト気持ち悪いよね。
>>186 ,179 よ
>184 は >178 宛てだと思うが、大丈夫か?
196 :
ビル・ジョブス :04/05/05 13:43
>191 #190は名前入れ忘れたおれだが・・文句あるか?
このスレ読んでると、俺って実は頭良いんじゃないかと錯覚してしまう。
199 :
デフォルトの名無しさん :04/05/05 13:52
むしろこのスレ読んでると、僕は人間じゃないかと錯覚してしまう
201 :
デフォルトの名無しさん :04/05/05 13:55
> (!0)は必ず1じゃないと思うよ。 1だよ。そう定義されている。 真偽の判定をするとき、真は0以外、偽は0。 だが、真偽の判定をした結果は真が1、偽は0。これ常識。
>真偽の判定をした結果 フーン
203 :
デフォルトの名無しさん :04/05/05 13:56
> OK == FALSE、NG == TRUE ってのがチョト気持ち悪いよね。 「エラーがあったかどうか」だから、とても合理的でわかりやすく素直でよくできてると思うが。
204 :
デフォルトの名無しさん :04/05/05 13:57
202は「何を話しているんだかさえ理解できない」ぐらいのボケだけど「仲間にいれてほしい」ようだ ;-)
人間になりたい
206 :
デフォルトの名無しさん :04/05/05 13:57
連休向けに数ランクレベル落として話してるんだから、こんな話題ぐらい理解しろよ ;-)
だって 単項の! について判定の結果とか一店だもん
208 :
デフォルトの名無しさん :04/05/05 13:59
関数の引数として、構造体のポインターではなく構造体そのものを渡すのって、 あれ、その構造体をコピーするんですよね? sizeof(FOO)==1024ぐらいだったら、 たとえば1KB分。 それと同じことって配列でできないでしょうか?
だって何々君が何々したんだもん
210 :
デフォルトの名無しさん :04/05/05 14:00
> だって 単項の! について判定の結果とか一店だもん じゃあ、確実に1じゃん。おまえぼけすぎ
構造体に配列を持つ
212 :
デフォルトの名無しさん :04/05/05 14:02
>>211 なんかそれいやん...。
ほかに方法ないですか?
214 :
デフォルトの名無しさん :04/05/05 14:02
ほんと? ほんとにほんと?
コレホント。
次世代C (C2008かC2009くらい)が出るのを待つ。
217 :
デフォルトの名無しさん :04/05/05 14:08
でません
218 :
デフォルトの名無しさん :04/05/05 14:08
これからはCobolの時代です。 Cobol 2003と オブジェクティヴCobol
219 :
デフォルトの名無しさん :04/05/05 14:09
>>208 まず、どうしてそういうことがしたいのが理由を述べよ。
その前に何がしたいのが言えば別の解決法が常に存在する。
220 :
デフォルトの名無しさん :04/05/05 14:10
> まず、どうしてそういうことがしたいのが理由を述べよ。 いやです。
>210 >じゃあ、確実に1じゃん。おまえぼけすぎ その事については何も逝ってませんが、大丈夫ですか? あなた木瓜杉です。
222 :
デフォルトの名無しさん :04/05/05 14:10
なんで構造体ではできるのに配列ではできないの? じゃあなんで構造体ではしていいの? ずるいじゃん
223 :
デフォルトの名無しさん :04/05/05 14:11
224 :
デフォルトの名無しさん :04/05/05 14:12
225 :
デフォルトの名無しさん :04/05/05 14:13
226 :
デフォルトの名無しさん :04/05/05 14:17
>>222 Cには値渡ししかないんだよ。配列の名前はポインタだから渡るのはポインタ。
>>222 そんなのCの入門書にはたいてい説明してあるじゃない。
それは「配列」は型ではないからだよ。
228 :
デフォルトの名無しさん :04/05/05 14:19
なんで構造体ではできるのに配列ではできないの? じゃあなんで構造体ではしていいの? ずるいじゃん
229 :
デフォルトの名無しさん :04/05/05 14:20
230 :
デフォルトの名無しさん :04/05/05 14:20
> Cには値渡ししかないんだよ。配列の名前はポインタだから渡るのはポインタ。 じゃあ構造体はー?
231 :
デフォルトの名無しさん :04/05/05 14:21
配列も渡したいー きー
知ってる奴と本気で知らない奴が一緒になってる余寒
昔は構造体も出来なかったんだよ。 構造体はサイズが変わらないが、配列は変わる場合がある。 だからやろうと思っても出来ない。
234 :
デフォルトの名無しさん :04/05/05 14:23
しかも returnで「構造体を返す」関数もつくれるでしょ? なんで配列は返せないの? ずるいー
235 :
デフォルトの名無しさん :04/05/05 14:24
> 構造体はサイズが変わらないが、配列は変わる場合がある。 えー。構造体が渡せなかった時代はいうまでもなく、 ごくさいきんまで、配列はサイズかわならなかったでしょ?
>>227 型でないなら、typedef int a[5];とかint (*p)[5];がエラーになるはずだが。
237 :
デフォルトの名無しさん :04/05/05 14:24
>>234 だから配列の名前はポインタなんだってば。
238 :
デフォルトの名無しさん :04/05/05 14:25
size変わるならtypedef(a)で配列aのサイズとれないはずだが
239 :
デフォルトの名無しさん :04/05/05 14:25
> だから配列の名前はポインタなんだってば。 構造体の名前もそうしてよ
できないのは、そういう決まりだからだと言っているだろうが。
タッグマッチですな
242 :
デフォルトの名無しさん :04/05/05 14:26
そんなのいやー >> 240
243 :
デフォルトの名無しさん :04/05/05 14:27
244 :
デフォルトの名無しさん :04/05/05 14:27
245 :
デフォルトの名無しさん :04/05/05 14:27
ワラタ
246 :
デフォルトの名無しさん :04/05/05 14:27
241は「タッグマッチ」の意味をしらないぼけ。 最低でも4人必要じゃん
247 :
デフォルトの名無しさん :04/05/05 14:28
> 構造体も渡せなくなるぞ? いいもん。配列渡せないなら
248 :
デフォルトの名無しさん :04/05/05 14:29
Cでゲームを作ったのですがゲーム開始時・終了時にLOGをとりたいと 思ったのですがC言語でそういった命令ありますかね?
249 :
デフォルトの名無しさん :04/05/05 14:29
Cで排他的論理和をとる(bitごとではなく)演算子は何ですか?
250 :
デフォルトの名無しさん :04/05/05 14:30
>>248 fから始まる関数(fabsとか関係のないものもあるが)
251 :
デフォルトの名無しさん :04/05/05 14:30
252 :
デフォルトの名無しさん :04/05/05 14:30
> Cでゲームを作ったのですが 作ったんじゃなくて、ソースうちこんだだけだろぼけ。
253 :
デフォルトの名無しさん :04/05/05 14:30
254 :
デフォルトの名無しさん :04/05/05 14:31
>>251 (0以外の数値) ^ (0) で 1になります?
配列の名前はポインタって嘘教えるなよ
256 :
デフォルトの名無しさん :04/05/05 14:32
257 :
デフォルトの名無しさん :04/05/05 14:33
&a[0] と a は同義
258 :
デフォルトの名無しさん :04/05/05 14:33
>>254 &&や||の排他的論理和版がほしいんだろ?
だったら!=
(^ 0 ^)/~~
260 :
デフォルトの名無しさん :04/05/05 14:33
*a と a[0] は同義
a + i と a[i] は同義
262 :
デフォルトの名無しさん :04/05/05 14:34
>261 おしい
264 :
デフォルトの名無しさん :04/05/05 14:35
>>261 *(a + i) と a[i]
a + i と &a[i]
265 :
デフォルトの名無しさん :04/05/05 14:35
a[i] と i[a]は同義
266 :
デフォルトの名無しさん :04/05/05 14:36
どうでもいいが変数定義とは言わないんじゃないか? どんな場合でも変数は「宣言」だろ?
267 :
デフォルトの名無しさん :04/05/05 14:36
268 :
デフォルトの名無しさん :04/05/05 14:36
toolは英語でどうぎ
269 :
デフォルトの名無しさん :04/05/05 14:37
内容をきめるときが定義だ > 変数
x = 0; // 定義
272 :
デフォルトの名無しさん :04/05/05 14:38
>>265 a[0] と 0[a] も同義なんですか?
273 :
デフォルトの名無しさん :04/05/05 14:38
変数の場合、実物(?)を作るときが定義と思っている。
274 :
デフォルトの名無しさん :04/05/05 14:38
275 :
デフォルトの名無しさん :04/05/05 14:39
駅の改札で見せるにもていぎ
!=ってやったらxor じゃなくて nxorになるんじゃないのか。。?
277 :
デフォルトの名無しさん :04/05/05 14:40
int a; は定義じゃなくて宣言だ
278 :
デフォルトの名無しさん :04/05/05 14:40
nxor ってどういうのですか?
算数の時間に使うのもていぎ
280 :
デフォルトの名無しさん :04/05/05 14:40
これで混乱してる奴は最低最悪サイヤ人
ミスったnxorじゃなくてxnorだね普通は。
283 :
デフォルトの名無しさん :04/05/05 14:45
で、それどういうの?
FAQなんだが、 たくさんの"宣言"が(たくさんの変換単位に)存在してもいいが、 "定義"はただ一つしか存在してはならない。 定義とは実際に場所を確保する宣言で、初期値があるときは初期値を与える。
285 :
デフォルトの名無しさん :04/05/05 14:46
xorの反対なら==だろ? 両方とも真か両方とも偽なら、つまり同じなら真。
41ペイジに書いてあるのに
>>187 誰もレスしていないようなので亀レス
Cではforループ中のみ(C99から)
C++では昔はforループの後でも使えたが今では使えなくなった。
この混乱を回避するためにコンパイラオプションで指定できるコンパイラも多い。
Javaはシラネ。
288 :
デフォルトの名無しさん :04/05/05 14:51
>>287 >Cではforループ中のみ(C99から)
嘘つくなよぅ
一部対応。一部未対応。完全に対応しているコンパイラはまだ無い。
>>257 >&a[0] と a は同義
嘘は止めておけ
とりあえずsizeof(a)とsizeof(&a[0])の値を比べてみなさい
294 :
デフォルトの名無しさん :04/05/05 14:56
>C++では昔はforループの後でも使えたが今では使えなくなった。 ループの外で使えるのVC++のバグだったのだが。 いわく、カウンタ値をループ外で見たい場合があるので、だそうな。
>>289 ISO/IEC 9899:1999の6.8.5.3
もうそろそろタッグマッチ
>>289 ISO/IEC 9899:1999
6.8.5.3 The for statement
The statement
for ( clause-1 ; expression-2 ; expression-3 ) statement
If clause-1 is a
declaration, the scope of any variables it declares is the remainder of the declaration and
the entire loop, including the other two expressions;
>>295 バグって言うか、当時はループの外で使えるっていう決まりだったのよ。
VC7.0からはオプションで指定できるようになった。
300 :
デフォルトの名無しさん :04/05/05 15:04
300
>298 for(int i=0; ...){ } int i; ↑ここでコンパイルエラー ってバグ以外の何者でも無いが
>>302 当 時 は ル ー プ の 外 で 使 え る っ て い う 決 ま り だ っ た の よ
304 :
デフォルトの名無しさん :04/05/05 15:10
>>303 VC++6.0(のC++モード)なんてそうだよな。
for(int i=0;i<n;i++)
・・・;
for(int i=0;i<m;i++)
・・・;
なんてやったらエラー
>>301 この人釣り師のつもりなのか、それとも天然なのか。。
306 :
デフォルトの名無しさん :04/05/05 15:17
とりあえず、!=とか==はだめよ。
偽(1)!=偽(2)で1
>>256 ね。
307 :
デフォルトの名無しさん :04/05/05 15:18
>303 でもバグだろ?
>>306 駄目と言いながら使っているように見えるのは俺だけか?
ああ、すまん。 そういう意味か。 !(1)!=!(2)でいいんじゃねーの。
ループのiって最初からブロック内で確保できた? それとも規格が変わってそうなったの? 後者なら、VC6はバグではなく、最新規格未対応なだけだな。 仕様です。
しかも括弧いらねーし(鬱
>>309 はMS製品に何かがあるととりあえずバグにする種類の人間なのか、
それとも「バグ」の意味を間違えているのか…。
この人にとっては処理系依存もバグなんだろうなぁ。
とりあえず手持ちのコンパイラにK&R時代コードでも食わせて「バグバグ」言ってろ。
>>313 漏れの記憶だと最新規格未対応って言うよりも、当時は規格自体が無かったような…。
>>315 そうそう、VC6はC++規格制定前の製品。
あとからでてきた規格に合致してないからってバグではないよな。
しかもMSはちゃんと規格に合わせたバージョンアップをしたわけだし。かなり遅かったけど。
>>315 そうだな。
for()のfor(ここ)が、forブロックの内側か外側かってのがはっきりしていなくて、
処理系によって解釈が違っていた気がする。
VCのような解釈はCからの互換性を重視したとも言える。
昔の(C99より前)ではforの前に宣言しておかなければならなかったわけで、
ループの後ろでも必ず参照できたからね。
printf("%d",(sp+i)); i++; printf("%d",sp); sp++; ドッチデモイイノ?(・ω・` )
int *sp; ハイレツノアドレス ハイッタ ポインタネ(・ω・` )
320 :
デフォルトの名無しさん :04/05/05 17:48
>>318 iの型によるが、もしintやcharなら別にどっちでもいい。
小学生の時学芸会で小太鼓やることになったんだが どうもへただったらしく、マスカラに変更されたことが 10年以上たった今でも本当に腹立たしいよ。
>321 おいおい、どっちもだめだろ printf() よく見ろ(w
VC++.net使ってるんですけど、 NULLマクロがstdio.hとstddef.hの両方で定義されてるのは どうしてですか? 例えばstdio.h内部でstddef.hをインクルードすれば それでいいと思うのですが。
なぜ stdio.hをインクルードしない場合が思いつかない?
>>325 >stdio.hをインクルードしない場合
というのがよく分かりません。
調べてみたらstdlib.hでも定義されてました。
例えばnull.hとかを作ってそこでNULLマクロを定義して
stdio.h stddef.h stdlib.hのそれぞれでnull.hをインクルードすれば
いいと思うのですが。
>>323 親切なコンパイラなら警告を出してくれるだろうが、別に構わんだろ。
string.hでもtime.hでもNULLマクロが定義されてるみたいです。 見るからにコピー&ペーストしたような感じでしたが。。。 仕様とかですかね?
まさか必ずstdio.hをインクルードしなければならない、と思い込んでいるのか?
>>329 いや違います。同じマクロを複数のヘッダファイルで
定義している理由が知りたいです。
>327 アフォ 警告レベルの話ぢゃねーよ
333 :
デフォルトの名無しさん :04/05/05 18:36
324の質問で325は答えになっていないだろ。
あぁそうか。ダブってるのがどうしてかって事かと思ってたよ。 推測だがヘッダファイルから別のヘッダファイルをインクルードするより 単独のヘッダファイルですませたかったからぢゃないか?
335 :
デフォルトの名無しさん :04/05/05 18:53
>>332 ほう、エラーになるコンパイラがあるなら教えてくれ。
>>326 歴史的なもの。昔はstdio.hしかなかったのよ。
いろいろググッてみたのですが分かりませんでした。
どうでもいいことなのかも知れませんが気になってしまったもので。
>>334 上で示したNULLマクロが定義されていたヘッダファイルは
別のファイルをインクルードしてませんでした。
>単独のヘッダファイルですませたかった
そういう制約があるような感じです。
ちょっと納得できてないですが
とりあえずそういうものと思うことにします。
みなさんありがとうございました。
339 :
デフォルトの名無しさん :04/05/05 19:39
>>338 「当時〜」って話を確認したければ、
当時のソースなりヘッダなりを見ないと
意味ねえぞ?
340 :
デフォルトの名無しさん :04/05/05 20:03
思ったんですがA.cppというメインのやつがあったとして そのA.cppから呼び出される関数をA.hに保存するって形は おかしいですかね?
341 :
デフォルトの名無しさん :04/05/05 20:17
342 :
デフォルトの名無しさん :04/05/05 20:26
#include <hoge.h> と、 #include "hoge.h" といった、 < > と " " は、一般的にはどのように使い分けられているのでしょうか? 私は、インクルードパス以下にあるものは< >、それ以外は" "という風に使っていたのですが、 C標準ライブラリは< >、それ以外は" "というのもよく見かけるような気がしまして。
その見かけたソースではインクルードパス以下にあるけど標準ライブラリじゃ ないヘッダはどうやって読み込んでるんだ? #include "/usr/include/..." なんてやってたのか?
>>343 いや、""で括ってもインクルードパスから探せるから。
#include の < >で囲まれたものは、 いくつかの標準システムディレクトリと、オプション `-I' によって指定したディレクトリが含まれます。 #include の " "で囲まれたものは、相対パスの ファイルを探します。 まぁいいんじゃない?
347 :
デフォルトの名無しさん :04/05/05 21:01
>>342 ""の場合はカレントディレクトリから探し出す。その後に-Iやシステムで指定されて
いるディレクトリから。<>の場合はカレントディレクトリは探さない。
348 :
デフォルトの名無しさん :04/05/05 21:32
>>345 さっきからうぜえんだよ
もっと気の利いたエサ考えな低脳
なんで基本的な知識が足りない人がエラそうに議論してるんだろう。
議論に見えませんが
弾なんて目じゃないですよ
>>342 >インクルードパス以下にあるものは< >、それ以外は" "という風に使っていたのですが、
>C標準ライブラリは< >、それ以外は" "というのもよく見かけるような気がしまして
確かにそういうのも時々見かけるけど、" "はファイル構成によっては思いもよらない自体が発生する
(しかも、ヘッダのバージョン違いか何かが原因だとその特定に時間がかかる)ので、
やっぱりインクルードパス以下にあるものは< >にするのが妥当だと思う。
あの。。色物と一緒に洗濯すると色が移るって聞いた覚えがあるんですけど 一緒に洗濯していいかどうかは服のどこをみればいいんでしょうか?
物凄い誤爆だなぁ…つーかわざと?('A`)
>>354 私は白物とそれ以外でしか分けていませんが、特に問題を感じたことは無いです。
ウールものは揉み洗いしてます
358 :
デフォルトの名無しさん :04/05/05 23:32
Cについて質問があります。 明日彼女のうちに誘われていて、いよいよ僕もCを体験できそうなのですが やはりコンドームは男性が持っていくものなのでしょうか? また、彼女もCは初めてらしいのですがいきなりフェラチオなどの強要は止 めたほうがいいのでしょうか? あと、Cをはじめるときの心得などありましたら教えてください。 ちなみに今までの経験はAまでしかありません。 よろしくおねがいします。
ご。。ごめんなさい。。誤爆でした。。 レスくださったお二人方ありがとうございます、参考にします
>>358 殺伐としたスレに投入された一服の清涼剤
>>361 どうも一服と聞くと毒を盛られた気分になる。
363 :
デフォルトの名無しさん :04/05/06 00:03
質問です。 よく、サンプルなどで if( foo() ) 処理 とか if( !foo() ) 処理 とかって書いてますけど、この条件文の意味がはっきりとは分かりません。 最初の例でいうと、これは何と比較しているのでしょうか? if( foo() == 0 ) なのか、if( foo() != 0 ) なのか?はたまた違うものなのか? 誰か教えて下さい。お願いします。
365 :
デフォルトの名無しさん :04/05/06 00:08
>>363 !=0が省略されていると思えばよい。
!foo()は逆に==0
>>363 は自称フィッシャーだと思う。センスゼロだけど。
Cやってる奴でこんなこと知らない奴がいると思えん。
一応マジレスすると、ifはアセンブラで言ったらJZってことだな。
>>364-366 ありがとうございます。
>>366 さんにはフィッシャー言われてしまいましたがマジでした。
でも、JZ に置き換えるというあなたの解説が覚えやすかったです。
368 :
デフォルトの名無しさん :04/05/06 00:25
if( foo() != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 != 0 )
頭悪い子ね これはいかが? どう?綺麗でしょ? 相手にならないわ
370 :
デフォルトの名無しさん :04/05/06 00:30
> とかって書いてますけど、この条件文の意味がはっきりとは分かりません。 ああ、それは、ifの後ろに空白が空いてなかったり、 カッコの内側に空白をあけているからですよ。
371 :
デフォルトの名無しさん :04/05/06 00:31
なるほど。 if (foo()) 処理 とか if (!foo()) 処理 って書けばよかったのでね。たしかにそう書けばわかります。 ありがとうございました。
つまらん
373 :
デフォルトの名無しさん :04/05/06 00:33
if (you_are_hungry()) eat(mos_burger());
1/2の100乗を計算するプログラムを書いたんですが、 結果が0になってしまいうまく動きません。 #include<stdio.h> int main(void) { double a; int i; a=(1/2); for(i=1;i<=100;i++){ a=a*(1/2); } printf("1/2の100乗は %ld です",a); return 0; } こんなやつなんですが、どこがいけないんでしょう? シンプルすぎて逆にわかりません…
1/2の値を確認しれ。
376 :
デフォルトの名無しさん :04/05/06 00:40
> Javaはシラネ。 えー おしえてよー
377 :
デフォルトの名無しさん :04/05/06 00:41
> VC++6.0(のC++モード)なんてそうだよな。 > for(int i=0;i<n;i++) おまえら、空白あけろよ
378 :
デフォルトの名無しさん :04/05/06 00:42
> for()のfor(ここ)が、forブロックの内側か外側かってのがはっきりしていなくて、 > 処理系によって解釈が違っていた気がする。 C++のは初期は混乱していたが、Cは最初からきまってたね
379 :
デフォルトの名無しさん :04/05/06 00:44
> とりあえず手持ちのコンパイラにK&R時代コードでも食わせて「バグバグ」言ってろ。 たいがい通るのでは? 通らないのってどんなコードだろ? foo(i) int i; { とかも通るし、 さすがに i =/ 2; とかは通らないだろうけど、これはK&R時代じゃなくてそれ以前の時代だし
>>374 コンピュータで実数の演算するときの誤差については認識ある?
ググれば解説してるとこ結構みつかると思うけど。
2を100乗しといて逆数とるのは趣旨に反する?
381 :
デフォルトの名無しさん :04/05/06 00:48
> とりあえず手持ちのコンパイラにK&R時代コードでも食わせて「バグバグ」言ってろ。 たいがい通るのでは? 通らないのってどんなコードだろ? foo(i) int i; { とかも通るし、 さすがに i =/ 2; とかは通らないだろうけど、これはK&R時代じゃなくてそれ以前の時代だし
382 :
デフォルトの名無しさん :04/05/06 00:49
すみませんがご教授頂けませんか? 下記のような処理があり、 int index; char file_name[ 15 ] = "ABCDEFGHIJKLM"; file_name[ 15 - 2 ] = '0' + index; indexが0〜9までならいいのですが0〜19までの場合、 アスキーコード19はないと思うのでABC・・・という 風にアルファベットを利用したいと思います。 どのように改造すればよいでしょうか?
ちょっと意味がわからんのだが?
>>382 いまいちやりたいことが説明できてない気がする.....
おれの読解力のせいかもしれないけど。
>>382 いまいちやりたいことが説明できてない気がする.....
おれの読解力のせいかもしれないけど。
386 :
デフォルトの名無しさん :04/05/06 00:57
indexが19の場合、アスキーコードで19というのが無いので Aから順にアルファベットを格納したいと考えています。 char file_name[ 15 ] = "ABCDEFGHIJKLM";のABCDEFGHIJKLMは適当に13文字つけただけなので こちらは気にしなくても大丈夫です。
387 :
デフォルトの名無しさん :04/05/06 00:57
> 下記のような処理があり、 > int index; > char file_name[ 15 ] = "ABCDEFGHIJKLM"; そんなところに空白あけるなよぼけ
>>382 いまいちやりたいことが説明できてない気がする.....
おれの読解力のせいかもしれないけど。
389 :
デフォルトの名無しさん :04/05/06 01:02
> こんなやつなんですが、どこがいけないんでしょう? 空白あけてないから
390 :
デフォルトの名無しさん :04/05/06 01:03
>>374 1/2だと0になる。素直に0.5と書くか、1.0/2とかにする。
ちなみに、pow(0.5, 100)で計算できるが。
>>382 file_name[15-2] = 'A' + index;
でいいのか?それとも、0-9は'0'〜'9'にしたいのか?
結果が0になってしまいます #include<stdio.h> int main(void) { double a; int i; a=(1/2); ↑ for(i=1;i<=100;i++){ a=a*(1/2); ↑ } printf("1/2の100乗は %ld です",a); ↑ return 0; }
392 :
デフォルトの名無しさん :04/05/06 01:04
#include <stdio.h> main() { int c,n1; n1 = 0; while((c = getchar()) != EOF){ if(c == '\n') ++n1; } printf("%d\n",n1); } 上のコードは改行の数をカウントするものなんですけど うまく動きません。 どこが悪いんでしょう。
393 :
デフォルトの名無しさん :04/05/06 01:05
tmp[0] = "0123456789abcdefghijklmn"[index]; tmp[1] = 0; strcat(filename, tmp); と書くだけでOKですよ。
394 :
デフォルトの名無しさん :04/05/06 01:05
>>393 > どこが悪いんでしょう。
空白あけてないから
395 :
デフォルトの名無しさん :04/05/06 01:06
file_name['A'-index] つーこと?
397 :
デフォルトの名無しさん :04/05/06 01:08
ためしに空白あけてみましょう。 #include <stdio.h> main() { int c, n; n = 0; while ((c = getchar()) != EOF) { if (c == '\n') ++n; } printf("%d\n", n); } ほら、ちゃんとうごきましたね。
398 :
デフォルトの名無しさん :04/05/06 01:09
>>390 >file_name[15-2] = 'A' + index;
>でいいのか?それとも、0-9は'0'〜'9'にしたいのか?
今回、indexは0〜19までの値が入ることになっています。
0〜9までなら382ので問題ないのですが19までとなると
改造が必要だと思いました。
上記への改造でfile_nameに格納されるのは
ABCDEFGHIJKLMA
ABCDEFGHIJKLMB
・・・
ABCDEFGHIJKLMTとすることができるのでしょうか?
399 :
デフォルトの名無しさん :04/05/06 01:10
401 :
デフォルトの名無しさん :04/05/06 01:12
> 19までとなると改造が必要だと思いました 26までなら平気だろ? アルファベットは26個あるんだから
402 :
デフォルトの名無しさん :04/05/06 01:14
>>401 26まで対応可能にするには'0'→'A'とするだけで済む
ということでよろしいですか?
>>382 >アスキーコード19はないと思うので
アスキーコードに「19」は存在すると思うが、
これは「アスキーコード19」とか言うコード体系の事だろうか?
もしそうなら、こんなコード体系は聞いたことがないな。
# って言うか、勝手な脳内変換を働かせると
#
# int index = 11; /* 値は適当 */
# char filename[256] = {'\0'};
# FILE *fp;
# sprintf( filename, "hoge%c.txt", "0123456789ABCDEFGHI"[index%19] );
# fp = fopen( filename, "r" );
#
# こんな感じか?
404 :
デフォルトの名無しさん :04/05/06 01:16
>>402 '0'のままでも行けるんじゃないのか?
ASCIIみてないけど。。。
405 :
デフォルトの名無しさん :04/05/06 01:17
>>397 エスケープ文字間違ってんじゃねえよ糞ヴォケが
「ちゃんとうごきました」だと?
おまえの脳内コンパイラなんぞ持ち出すな痛違い野郎
406 :
デフォルトの名無しさん :04/05/06 01:17
ちなみに'0"はASCIIで48です。 それに「アスキーコード」なるものは存在しません。 ASCIIのCは何の略かを考えれば常識
よーするに16進数と同じ表記パターンでそれ以降にも使いたいということか。
408 :
デフォルトの名無しさん :04/05/06 01:18
> '0'のままでも行けるんじゃないのか ファイル名に使えない文字を通っちゃうのでだめです。
409 :
デフォルトの名無しさん :04/05/06 01:23
file_name[15-2] = 'A' + index; こうすると int index = 19;のときfile_nameには何が格納されます?
410 :
デフォルトの名無しさん :04/05/06 01:24
教えない。
411 :
デフォルトの名無しさん :04/05/06 01:24
>>403 考えてもらってありがとうございます。
ちょっとそこまで頭がついていってないです。m(__)m
$ bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. ibase=16 30 48 ibase=A 48 + 19 67 obase = 16 67 43 えーと 0x43 は 'C' が13番目の添字に...
>>412 bcが使えることを言いたいだけ?
何やってんだかサパーリ。
C++builderでボタンクリックで実行を キーボードのF1キーでも実行できるようにするにはどうすればいい?
415 :
デフォルトの名無しさん :04/05/06 02:02
あとwhile文を実行中にF2キーで抜けたいけど どうしたらいいですか? どなたかおねがいします
>>415 すみません
間違えたました、出直してきます
418 :
デフォルトの名無しさん :04/05/06 02:05
'A' + 19 だから 'T' ですね。 強烈に外したみたいなので、寝ます。
>>418 理論はわかってるけど
どうコードにすればいいのかわからないです
差し支えなければコードを書いてくれませんか?
初心者ですみません
つーか、スレ違いだって。
422 :
デフォルトの名無しさん :04/05/06 07:49
すれ違いではないですが、 ここまで何人もが答えのコードそのものを書いているのに それでもわからないと言っている人には もう知る権利はありませんよね
自己参照構造体、ググって出てきたどのサイト見てもイマイチ分からない… どこか分かり易い良いサイトある?
>>423 何が分からないの?
特に何も難しいところはないはずだが。
425 :
デフォルトの名無しさん :04/05/06 15:28
Cでは0.1が上手く表現出来ない為、下記のコードでは 結果が「NG」になると とあるサイトに書かれていたのですが VC++6.0でコンパイルしてみたところ、見事に「OK」になります なぜですか? double d = 0.1; if(d * 10 == 1.0){ printf("OK"); }else{ printf("NG"); } ちなみに、これだと駄目みたいです。 int i, d = 0; for(i = 0; i < 10; i++){ d += 0.1; }
>>425 最適化で定数式の展開をコンパイル段階でしちゃったんじゃないの
>>425 というか、上のプログラムと下のプログラムで結果が違って
くるのがそもそも問題だと思わない?
安心してプログラムが書けないでしょ?
>>426 >>426 こんな感じで置き換えられたという事ですか?
if(1.0 == 1.0)
でも、デバッグモードでは最適化はしていません。
>>427 そちらの環境では、どっちでも「NG」ですか?
> ちなみに、これだと駄目みたいです。 > int i, d = 0; > for(i = 0; i < 10; i++){ > d += 0.1; > } > int i, d = 0; そりゃ駄目だろうな┐(´∀`)┌
でねーよ
>>429 すみません。ここに書いたコードだけ間違ってました。
double d; でも「NG」です。
>>431 出ない?
警告レベル落とせば出なくなるか・・
>>425 >Cでは0.1が上手く表現出来ない為
Cだからではなく2進浮動小数点表現では、だな。
gcc -Wallでも警告出ないな…
#include <stdio.h> int main(void) { double d = 0.1; int i; if(d * 10 == 1.0) printf("OK\n"); else printf("NG\n"); d = 0.0; for(i = 0; i < 10; i++) d += 0.1; if(d == 1.0) printf("OK\n"); else printf("NG\n"); return 0; } 結果 OK NG WinXP + VC++6.0Pro デバッグモード(最適化ナシ)、リリースモード(最適化アリ)ともに同じでした。
>>435 gccだと出ないね。こりゃひどい。g++だと出るのか。
VCだとC相手でも警告ちゃんと出るようだ。(VC7.1で確認)
乗算の場合、一時計算のため80bit実数に拡張され、最後に丸められるため 結果的に綺麗な値に納まるが doubleのまま加算を繰り返す場合、64bit実数のままで毎回下の値が切り捨て られるため誤差が累積するとかそんなかんじ?
警告云々より、MSのコンパイラだと0.1*10 == 1.0が成り立つ方がびっくり。
>>436 それぞれの命令の前でどの変数が何を指してるか、
飛ばさずにちゃんと考えた方がいいぞ。
それこそ紙に表でも書いてさ。
>>440 fld QWORD PTR _d$[ebp] ; 0.1が入っている
fmul QWORD PTR __real@8@4002a000000000000000 ; 10
fcomp QWORD PTR __real@8@3fff8000000000000000 ; 1
fnstsw ax
test ah, 64; 00000040H
je SHORT $L776
これで真なんだからコンパイラってよりもプロセッサのほうだと思われ
>>439 そういう事ですか。納得できました。
>>436 最後の終了判定のために、最初にNULLを代入したのでは?
bcc32だと"NG"でつ
445 :
デフォルトの名無しさん :04/05/06 16:50
>>442 アセンブラ ばりばりですね。是非わたしのバグもちAPを解析してほしいです。
446 :
デフォルトの名無しさん :04/05/06 17:12
条件演算子(三項演算子)は、 A ? B : C と書きますが、Bを省略した場合、 A ? : C Aが真の場合の動きはどう定義されているのでしょうか? #というかそもそも文法的に正しい? ちなみに gcc 2.95.4 では、A を評価した値が返って来ます。
文法的に間違ってると思う。 ちなみに CL (VC++6.0)だと error C2059: 構文エラー : ':'
gcc の拡張文法でした…お騒がせしました。
449 :
デフォルトの名無しさん :04/05/06 17:59
あほかこいつは
なんでこんなにageばっかなの?
452 :
デフォルトの名無しさん :04/05/06 18:03
14.5: 2つの浮動小数点の値が"十分近い"ことを判定するよい方法は。 A: 浮動小数点の値の絶対的な精度は、浮動小数点の定義により、その大 きさによって変化するので、二つの浮動小数点の値を比較する最上の 方法は精度の敷居を使うことである。精 度の敷居は、比較しあう数の 大きさに比例させる。 double a, b; ... if(a == b) /* 間違い */ ではなく、以下のコードを #include <math.h> if(fabs(a - b) <= epsilon * a) 適切に選んだepsilonと共に使え。
>>451 HSPスレの次はここに出張ですか?sage厨さん。
455 :
デフォルトの名無しさん :04/05/06 18:25
>>425 double x=0.1;
double d;
memcpy(&d,&x,sizeof(double));
こうするとどうなる?
VC++6.0ではscanfを使ってもOKになるわ・・・
拡張がなされなければそうなるんじゃねぇの、そりゃ。
460 :
デフォルトの名無しさん :04/05/06 19:05
スレ違いかもしれないですが、 オンラインアセンブラをC言語で 使う方法を教れてください。
っていうか、浮動小数点演算の場合、
コンパイラ以外にCPUによっても計算結果が変わるよ
だからあんまり議論しても意味は無い
>>460 「インラインアセンブラ」だな。環境依存OKスレに逝ってこい。
リンクするライブラリをソース内で指定しておくことはできませんか?
ふつうはmakefileで指定するが。
ファイルを読み込んでそのファイルのサイズを返すやり方が分かりません。 どなたかご教授下さい
465 :
デフォルトの名無しさん :04/05/06 21:53
register変数使うとループ処理は速くなりますか?
>>466 速くなるかもしれないし、速くならないかもしれません。
>>464 FILE *fp = fopen("file", "r");
int size;
fseek(fp, 0, SEEK_END);
size = ftell(fp);
>>466 今のコンパイラは最適化がしっかりしてるので
速くはならないと聞いたけど…
>>468 ご教授ありがとうございました。
感謝です。
470 :
デフォルトの名無しさん :04/05/06 22:30
読み込んだ四桁の整数値の各桁の数字を表示するプログラムって どうしたらいいんでしょうか?ド初心者なものでわかりません…。 printfとかだけで簡単にできるんでしょうか…?
>>470 プログラムは置いといて、取りあえず4桁の数字と睨めっこしてごらん
>>470 int i = 1234;
char s[10];
sprintf(s, "%d", i);
printf("%c\n", s[0]);
printf("%c\n", s[1]);
printf("%c\n", s[2]);
printf("%c\n", s[3]);
473 :
デフォルトの名無しさん :04/05/06 23:00
>>470 int i = 1234;
printf ("%d %d %d %d",i/1000,i%1000/100,i%100/10,i%10);
475 :
470です :04/05/06 23:11
皆さんありがとうございました! やっとわかりました。
オンラインアセンブラってチョトカコイイと思った なんとなく。
.NETの新技術にありそうなネーミング。
478 :
デフォルトの名無しさん :04/05/06 23:40
ソースを送るとアセンブルして返してくれるとか。
479 :
デフォルトの名無しさん :04/05/07 00:30
>>437 > if(d * 10 == 1.0)
>>452 > if(a == b) /* 間違い */
っていうか、おまけら、空白あけろよ ぼけ
こういうコード書くやつにろくなやつはいない
>>479 で?そんな君はまともにプログラム組めるのかね?
実力無いやつに限ってそう言う当たり障りのない部分にこだわるんだよな。
何か突っ込まれたってプログラムの本筋とは関係ないからな。
飽きた?最初からつまらんかったが
禿同
485 :
デフォルトの名無しさん :04/05/07 00:54
> そんな君はまともにプログラム組めるのかね? おまえ、だれにものいってるつもりだ?
486 :
デフォルトの名無しさん :04/05/07 00:57
すみません。質問です。 int func(int, char *); ってプロトタイプを書くのと、 extern int func(int, char *); って書くのの意味の違いを教えてください。 どちらもよく見かけるのですが...。
487 :
デフォルトの名無しさん :04/05/07 01:02
>>486 ない。
デフォルトがexternだから。
489 :
デフォルトの名無しさん :04/05/07 01:23
> ない。 ってことは、つけてもつけなくても、文法的に同じってことですか?
490 :
デフォルトの名無しさん :04/05/07 01:25
> デフォルトがexternだから。 変数だと、 int a; static int a; extern int a; はそれぞれ3つとも意味違うじゃないですか (Unicじゃない場合) ってことは、 static func(int); と func(int); と extern func(int); で 2つめのは前後のどっちの意味でもないのかなあ? とおもったのですよ!
>Unic は間違っているし、 ・スコープ - グローバルとローカル ・宣言と定義 をちょこっと調べろ
492 :
デフォルトの名無しさん :04/05/07 02:58
Unic?何と間違ってるのか分からん…
マヂレスすると たぶん Uniq
マヂレスじゃなく、マジレスしてくれ。
>>490 関数はデフォルトでexternがつく、
グローバル変数はデフォルトで何もつかない
関数の内部の変数はデフォルトでautoだな
496 :
デフォルトの名無しさん :04/05/07 08:46
> 関数はデフォルトでexternがつく、 じゃあ、「外部にある」ってことですよね? extern int func(int); って書いて「外部にある」って宣言しておいて、 その同じファイルの中に定義がでてくるのって、問題ないのかなあ?
497 :
デフォルトの名無しさん :04/05/07 08:48
>>486 >int func(int, char *);
int func(int, char *); →→ int func (int, char *);
空白開けろよぼけ。
498 :
デフォルトの名無しさん :04/05/07 08:56
ぼけ。関数名の後ろに空白あけるな! 知ったかぶりやろうめ
499 :
デフォルトの名無しさん :04/05/07 08:57
うーん、ここはレベル低いなあ。 ifやwhileの後ろに空白空けろっていうと、関数名の後ろにまであけるぼけがいるなんて!
500 :
デフォルトの名無しさん :04/05/07 09:04
501 :
デフォルトの名無しさん :04/05/07 09:12
>>497 charと*の間に空白をいれるなよぼけ。
関数の後ろにあけるって発想は素晴らしいよ なんつうか、もうお前はVCやひまわりでもやってなさいって感じ
空白開けろとか開けるなとか全くもってくだらん。 そんなことでグチャグチャ騒いでんじゃねぇって感じ。
だから言ったろう。GWなんて関係ないんだって。
505 :
デフォルトの名無しさん :04/05/07 10:13
GW→GandamWing
506 :
デフォルトの名無しさん :04/05/07 10:21
507 :
空白DQN発見↓ :04/05/07 10:29
503 名前:デフォルトの名無しさん :04/05/07 09:30 空白開けろとか開けるなとか全くもってくだらん。 そんなことでグチャグチャ騒いでんじゃねぇって感じ。
質問です。 charで定義された変数を、 数字のみの列だけの時と、数字列+文字列or文字のみの列だけの時の、 2通りに判断する場合に使用する関数は何が適しているでしょうか? 最初はatoiを使おうと思ったのですが、 この場合、charの中身が、 (例として10が通るべき実数とします) abc a10 の時はエラーを返してくれるのですが 10 10a <も、正しいと判断してしまいます。 宜しければ御教授御願い致します。
>>508 strtol() で 「変換が終了した位置」 以降に
空白以外の文字がないことを確認する、とか。
511 :
デフォルトの名無しさん :04/05/07 11:26
>>509 strcspanと言うのが、「C言語 strcspan」辺りで、
ググったりして調べても見当たらないのですが……。
strcspnとは別物でしょうか?
>>510 えと、strtolを調べてみました。
更に質問を返してしまいますが、
「変換が終了した位置」を特定するには、
どの様な手順を踏まえるべきなのでしょうか?
>>511 失礼、思いっきり説明を省略してしまいました。
返って来た値が0の場合にのみエラーメッセージを出力し、
それ以外の場合にはそのままプログラムを進める、
と言う意味です。
513 :
デフォルトの名無しさん :04/05/07 11:43
>>512 調べたら分かるはずだぞ。
char *endp;
/* 中略 */
strtol("12345abc",&endp,10); /* endpはabcを指すようになる */
あとは分かるだろ?
514 :
デフォルトの名無しさん :04/05/07 11:44
>>512 あと509のstrcspanはstrcspnの間違いだな。
>>513 おおう、ナルホド。
判定した文字列のアドレスで良いのですな。
有難う御座いました。
>>512 isdigit()辺りで変換前に判定する方法もある。
517 :
デフォルトの名無しさん :04/05/07 14:08
> charと*の間に空白をいれるなよぼけ。 いや、あけるな。Stroustrapがそれをくっつけるのが好きなのだが、 char* p, q; とやったときに pとqが同じ型みたいでいやなので禁止。
518 :
デフォルトの名無しさん :04/05/07 14:09
> GW→GandamWing Gates Williams
519 :
デフォルトの名無しさん :04/05/07 14:11
っていうか、判断だけで変換しないなら、 isalnumやisdigitをぐるぐるしろ
グーグル使ってみます。
ぐるぐるしろ、って可愛いな。
お腹がぐるぐる急降下です。
('_`) ソウカ・・・
絶対ぐるぐるのほうがいいと思う
Googleをぐるぐるするスレでも立てるか。
/* こんな感じかな? */ int isDigitOnly(const char *s){ while(isdigit(*s)) s++; return (*s=='\0'); }
528 :
デフォルトの名無しさん :04/05/07 15:24
空白あけろよ。 改行もしろ
うっせーな、あけたきゃあけりゃいいだろ。
530 :
デフォルトの名無しさん :04/05/07 15:29
/* こんな感じかな? */ int isDigitOnly(const char *s) { while (isdigit(*s)) s++; return (*s=='\0'); }
return に括弧つけんなよ、は突っ込まないのか?
532 :
デフォルトの名無しさん :04/05/07 15:32
int isDigitOnly(const char *s){while (isdigit(*s++));return (*(s-1)=='\0');}
関数名に大文字使うなよバカ
534 :
デフォルトの名無しさん :04/05/07 15:40
> return に括弧つけんなよ、は突っ込まないのか? 単項ならともかく、条件式なので、まあいいかなと。
535 :
デフォルトの名無しさん :04/05/07 15:40
だか「==」の両側はあけろよなあ
536 :
デフォルトの名無しさん :04/05/07 15:42
>>532 「-1」しなきゃいけないのがださい。
while (isdigit(*s) && *s++)でどうだ ;-)
数日前から救いようのないバカが湧いているなあ。 はっきり言って、まともな質問や議論に対しては邪魔でしかない上に、 全く面白くないのですが、何を考えているんでしょう? いい加減飽きたでしょうから、さっさと消えて欲しいものです。
538 :
デフォルトの名無しさん :04/05/07 15:46
/usr/local/include 以下のヘッダファイル読みに行ってくれないんですがどうしたらいいんですか?
539 :
デフォルトの名無しさん :04/05/07 15:59
コンパイラーの機嫌をそこねたんでしょう > 読みに行ってくれない。 ひたすら機嫌をとるしかないです。
540 :
デフォルトの名無しさん :04/05/07 16:00
> はっきり言って、まともな質問や議論に対しては邪魔でしかない上に とか言っているが、実は、537が一番わかってない。
>>538 環境依存っぽいな。-I (MS C なら /I) は付けたか?
542 :
デフォルトの名無しさん :04/05/07 16:04
b=10; b=-1; さてbの値はいくつか? とか #include <stdio.h>してるのに getchar (c) でエラーになる、とか、 そういう体験していないってことは、537は、Cの話題で何がおもしろくて何がつまらないか を全然わかっていないって言う証拠ですね。
543 :
デフォルトの名無しさん :04/05/07 16:05
そんなものはない > MS C なら > なら /I ふつうclでも-I
544 :
デフォルトの名無しさん :04/05/07 16:10
>>536 whileループ内で条件判断が増えるからだめ。
545 :
デフォルトの名無しさん :04/05/07 16:17
じゃあ、やっぱり最初のがいいなあ
>>542 ん?別に得意げに延々と話すことでもないような。
547 :
デフォルトの名無しさん :04/05/07 16:43
>>546 6行が「延々」かよ ...
虚勢がみっともない
>>538 makefile に -I/usr/local/include やったら通ったよ
ありがd
549 :
デフォルトの名無しさん :04/05/07 16:44
ありがげた?
550 :
デフォルトの名無しさん :04/05/07 16:45
>>549 dが読めない環境で2ちゃんは辛そうだな
552 :
デフォルトの名無しさん :04/05/07 16:52
よめるもん。 げたでしょ?
553 :
デフォルトの名無しさん :04/05/07 17:19
>>542 の
> #include <stdio.h>してるのに
> getchar (c) でエラーになる、とか、
がどういうネタなのかさっぱりわからない・・・
#include <stdio.h>しているからこそ、エラーになるんじゃないのか?
554 :
デフォルトの名無しさん :04/05/07 17:21
> がどういうネタなのかさっぱりわからない・・・ まあ、でなおしといで。
555 :
デフォルトの名無しさん :04/05/07 17:23
そんなことより、externはどうなった? 変数の場合は、externついててもついてなくてもどっちもextern? 1箇所も初期化してなくてもリンク時に実体はできる?
556 :
デフォルトの名無しさん :04/05/07 17:26
>>554 頼むから説明してくれ。
stdio.hでint getchar(void);と宣言されているgetchar関数は、stdio.hをインクルードするからこそエラーになると思うんだが。
557 :
デフォルトの名無しさん :04/05/07 17:26
> 頼むから説明してくれ。 おれがかいたわけじゃないからしらん。
・・・するからこそ、getchar(c)がエラーに・・・ の間違い。
559 :
デフォルトの名無しさん :04/05/07 17:27
>>556 stdio.hの中に「それ」があるかどうかは規格では規定してないぞ。
560 :
デフォルトの名無しさん :04/05/07 17:28
>>559 そりゃint getchar ( void ) ;かもしれないし、extern int getchar(void);かもしれないが、そんなことを言っているんじゃないよ。
561 :
デフォルトの名無しさん :04/05/07 17:29
>>556 たぶん546は
「putchar (c); がエラーになる」とか言いたかったんだと思われ。
>>561 「putchar (c); がエラーになる」ような処理系を使った経験がないと、Cの話題で何がおもしろくて何がつまらないか
を全然わかっていないって言うことかな?
563 :
デフォルトの名無しさん :04/05/07 17:35
っていうか、2つ書いてあったもう一方は、さりげなくスルーか? ;-)
乱数をn個生成し、それらをすべて1次元配列rに格納する。 その後、配列r中のn個の値を小さい順に並べ替え、並べ替え後の配列rの値をすべて表示する。 nの値は自由。表示のしかたも自由。 というプログラムが作れなくて困ってます。 誰か助けてください;
宿題スレでどうぞ
567 :
デフォルトの名無しさん :04/05/07 17:42
>>564 おそらく型はどうでもいいはず。(わたしの想像通りのネタなら)
568 :
デフォルトの名無しさん :04/05/07 17:42
>>565 rand,qsort,printfあたりの関数を使う。
>【ライセンスや機能などに問題あり】 LCC-Win32は具体的にどういう問題があるんでしょうか?
571 :
デフォルトの名無しさん :04/05/07 17:45
あ、LCCってあれのことじゃないのか。
>>570 > It's free for non-commercial use,
これじゃねーの?
Intelのフリーコンパイラも似たようなものだし。
574 :
デフォルトの名無しさん :04/05/07 17:50
#include <stdlib.h> void hoge(int n) { int n; for (i = 0; i < n; i++) r[i] = rand(); qsort(r, n, sizeof(int), compint); for (i = 0; i < n; i++) printf("%d ", r[i]); } int compint(int *a, int *b) { if (*a > *b) return 1; else if (*a < *b) return -1; else return 0; }
575 :
デフォルトの名無しさん :04/05/07 17:51
int i;だろ
>>573 個人で使うには特に問題ないようですね。
ありがとうございます。
int compint(int *a, int *b) { return *a - *b; } }
578 :
デフォルトの名無しさん :04/05/07 18:00
む、 } がおおかった・・・
579 :
デフォルトの名無しさん :04/05/07 18:12
「n個の任意の値を入力して、大きい順に並び替えるプログラムを作成せよ」という問題が、解けません。どなたかわかるかたいらっしゃいませんか?お願い致します。
580 :
デフォルトの名無しさん :04/05/07 18:13
582 :
デフォルトの名無しさん :04/05/07 19:58
#include<stdio.h> (int main, int argc, char **argv) { (printf, "hello world %s??/n", argv[0]); (return, 0); } Cの仕様がこんなんだったら凄くカッコいいよね。 関数名もかっこの内側に書けた方が見た目が綺麗だね。 で、ifの仕様はどっちがいい? (if, argc==2){ (printf, argv[1]); } (if, argc==2, (printf, argv[1]));
583 :
デフォルトの名無しさん :04/05/07 20:02
美的感覚以前にここはCスレだからコンパイルエラーで終了
586 :
デフォルトの名無しさん :04/05/07 20:45
587 :
デフォルトの名無しさん :04/05/07 21:00
(define (main argc argv) ( (printf 'hello world %s\n' (car argv)) 0 ) ) あれ、なんかどこかで見た気が。
589 :
デフォルトの名無しさん :04/05/07 21:23
590 :
デフォルトの名無しさん :04/05/07 22:10
591 :
デフォルトの名無しさん :04/05/07 22:12
wprintf(L"あ\n"); を実行すると何も表示されないんですが、ワイド文字では日本語は扱えないということですかね? 環境はWinXP、VC++6.0です
592 :
デフォルトの名無しさん :04/05/07 22:14
setlocale?
>>592 !
つってくる
从从从
从从从从 ゴオオオォォォォォ…
从从从从从
从从从从从从 ̄⊃ ) )
⊂ 从从从从  ̄⊃ / ̄ ̄ ̄ヽ
⊂_ ._⊃ | (\/) |
⊂__⊃. | > < |
| (/\). |
ヽ___/
596 :
デフォルトの名無しさん :04/05/08 01:11
> コンマが無駄。 ダム!
597 :
デフォルトの名無しさん :04/05/08 01:54
MSXのCはintが8bitだったぞ ;-)
598 :
デフォルトの名無しさん :04/05/08 02:46
>>597 うそつけ。
MSX-C/LSC-Cは16bit.
他にもあった?
599 :
デフォルトの名無しさん :04/05/08 02:48
釣れた ;-)
よかったね ;-)
これが警告無しでコンパイルされてたんで嫌だった。 typedef struct{ ... char data[0]; } md; 最初バグかと思った。いや、やっぱりバグにしたい。。。
それ、出来た方がいいけどな
604 :
デフォルトの名無しさん :04/05/08 03:39
【ライセンスや[機能などに]問題あり】
昨日だと思われ
>>601 便利だけど移植性0になるからなぁ。
以前えらい目に遭ったからもう使わんようにしてる。
608 :
デフォルトの名無しさん :04/05/08 03:45
まだchar data[1];の方がましな気がする。
Windowsに限って言えば BITMAPINFO構造体で[0]が使いたいね。
610 :
デフォルトの名無しさん :04/05/08 12:28
> typedef struct{ 空白あけろよぼけ
611 :
デフォルトの名無しさん :04/05/08 12:29
>>601 え? そんなので警告やエラーでたら、それこそコンパイラーのバグじゃん
こんぱいらー
613 :
デフォルトの名無しさん :04/05/08 13:31
614 :
デフォルトの名無しさん :04/05/08 13:34
アセンブラーの妹です。
ageageageageageageあほかおまえら
616 :
デフォルトの名無しさん :04/05/08 13:59
なにかもんだいでも?
617 :
デフォルトの名無しさん :04/05/08 14:02
どうでもいい。
618 :
デフォルトの名無しさん :04/05/08 14:03
だね。
619 :
デフォルトの名無しさん :04/05/08 14:17
どうでもよくない。
620 :
デフォルトの名無しさん :04/05/08 14:18
だね。
自作自演臭がきつい
622 :
デフォルトの名無しさん :04/05/08 14:21
Cでは負 % 負 の結果は 正 になる と明解C言語書いてあるのですが なりませんでした。コンパイラはgccです。なぜでしょうか? ちなみに -7 % -3 = -1 -7 % 3 = -1 7 % -3 =1 となりました。
623 :
デフォルトの名無しさん :04/05/08 14:24
>>622 だからそれは実装依存。
コンパイラやオプションによる。
624 :
デフォルトの名無しさん :04/05/08 14:27
×コンパイラ ○コンパイラー
そうなんですか。 この本には 「二つのオペランドが同符号の値であれば、演算の結果は正の値になります。 二つのオペランドの符号が異なる値であれば、演算の結果は処理系に依存することになって ますので注意しましょう。」 と書いてあるので 「二つのオペランドが同符号の値であれば、処理系に関わらず演算の結果は正の値になる。」 と思ったのですが。
626 :
デフォルトの名無しさん :04/05/08 14:31
> 明解C言語書いてあるのですが そんなボケな本かうからだろ。 結果は、2つの被演算数のそれぞれ「絶対値」をつかって%の演算をし、 結果には1つめの被演算子の符号をつけると思えばよい。
627 :
デフォルトの名無しさん :04/05/08 14:32
> だからそれは実装依存。 > コンパイラやオプションによる。 これもウソ。 規格でちゃんと決まっている。 やーい > 知ったかぶり
628 :
デフォルトの名無しさん :04/05/08 14:33
>>625 だからちゃんとした本買えよ! その本ウソだらけだってば。
プゥ
630 :
デフォルトの名無しさん :04/05/08 14:34
なんでわざわざハズレ本を買うバカがいるんだろう? あれだけやめろと言ったのに。
>>625 書いてあることは正しいよ。
おまいさんの使ってるコンパイラが規格に則っていないだけ。
>>622 a % b = a - a / b * b が成立するはずなので
-7 % -3 = -7 - -7/-3*-3 = -1
-7 % 3 = -7 - -7/3*3 = -1
7 % -3 = 7 - 7/-3*-3 = 1
634 :
デフォルトの名無しさん :04/05/08 14:43
> 書いてあることは正しいよ。 いいえ、まちがってます > 明解 あきらかなウソ。規格書読めよぼけ。
635 :
デフォルトの名無しさん :04/05/08 14:44
636 :
デフォルトの名無しさん :04/05/08 14:45
637 :
デフォルトの名無しさん :04/05/08 14:47
> けっこういい本では? 何か問題でも? ここでは禁句になってるんだよ。ぼけ! (って、技術評論社のアノ本のことじゃなかったらどうしよう(^^;;)
638 :
デフォルトの名無しさん :04/05/08 14:48
K&Rがお薦めです。 (ただし原書)
639 :
デフォルトの名無しさん :04/05/08 14:49
まだ売ってますか? > 「作ってわかるCプログラミング」日下部陽一 たしか話題になったのは3年ほど前だった気がする。
640 :
デフォルトの名無しさん :04/05/08 14:54
641 :
デフォルトの名無しさん :04/05/08 14:57
明解C言語って 柴田望洋 だろ? だめにきまってるじゃん! 著者がろくにCわかってないのよ? まともなこと書けるわけないじゃん。 (まあ、三田某ほどはひどくないが、でも、人に教えたり本を書いたりする レベルではない > 柴田望洋) まだ高橋のほうがウソがかなり少ない(ある程度まともに理解している)だけまし。
642 :
デフォルトの名無しさん :04/05/08 14:58
柴田望洋みたいにもっともらしくウソかいてある本に やすやすと騙されて読んでいるやつって、あたまわるそうに見えるよなあ。
643 :
デフォルトの名無しさん :04/05/08 14:59
>>642 読むのはたいがい初心者。初心者はいい本と悪い本の区別付かない(つくぐらいなら初心者でない)。
また、その著者がウソいってるかどうかもわからん。
なので、しかたないのでは?
644 :
デフォルトの名無しさん :04/05/08 15:01
>>643 わかった! その本を選んだってことは、だれかに薦められたりして選んだ確率が高い
わけだろ? > 初心者
まあ、書評とか2chとかでの「おすすめ」選んだのかもしれんが。
つまり、「柴田望洋みたいなぼけな本えらぶやつは」
1. 頭の悪い友達しかいない
2. 頭の悪いやつが読むような本や2chを読んでいる
ってことだな!
これならあってるだろ?
645 :
デフォルトの名無しさん :04/05/08 15:02
646 :
デフォルトの名無しさん :04/05/08 15:04
まあ、柴田某と林某は力いっぱい避けろ! (三田某は問題外なので、わざわざいわんが、さすがに買うやついないだろうから) 買うやつはぼけとみなす!
おまえらぜいいんぼけ
648 :
デフォルトの名無しさん :04/05/08 15:15
わざわざsageてるあたりおまえのほうがぼけ
649 :
デフォルトの名無しさん :04/05/08 15:30
やっぱ、勇気広しかね。
ここで柴田望洋けなしてる奴の中に何人 柴田より上の実力の持ち主がいることだかw 正直、漏れだけだろwww
651 :
デフォルトの名無しさん :04/05/08 15:34
> ここで柴田望洋けなしてる奴の中に何人 インド人
652 :
デフォルトの名無しさん :04/05/08 15:34
> 柴田より上の実力の持ち主がいることだか っていうか、おまえ、だれにものいってるつもりよ
653 :
デフォルトの名無しさん :04/05/08 15:35
柴田の本はウソだらけなんて話は、有名じゃん。 まだ買うやついたのかよ! あんな本
654 :
デフォルトの名無しさん :04/05/08 15:37
でー 639の本は、おすすめなんですか? そうでないんですか? 結局どっちなんですか?
もういい規格書嫁
656 :
デフォルトの名無しさん :04/05/08 15:38
>>654 自分で買って判断しろ!
すでに1冊読んでいるってことは、もう「初心者」じゃねーんだから判断できるだろ?
ついでに柴田本と比べてみればいい。どっちがまともかは一目瞭然だがな。
657 :
デフォルトの名無しさん :04/05/08 15:39
柴田某や林某の本は、ほんとあれだけ『粗製乱造』っていう言葉がぴったり当てはまる本は ほかにないと思う! という感じの本です。
どうせ濫造するなら、もっとマイナー分野まで手がけてほしいな。
IDがほしいな
660 :
デフォルトの名無しさん :04/05/08 15:44
粗製濫造するってことは、「いいかげんなものをたくさんつくって」おかねをもうけるため ってことですから、マイナー分野はコスト合わないからやらないでしょうね。 柴田の粗製濫造ぶりは、CよりC++で顕著です。あれはひどすぎ
661 :
デフォルトの名無しさん :04/05/08 15:45
たしかに、彼はC++ぜんぜんわかってないっぽいね。Cの本は読んでないので知らんが。
662 :
デフォルトの名無しさん :04/05/08 15:47
まあ、初心者に毛の生えたやつが本書いて売ってる感じだよなあ。 > Cのほう 売れるかどうかは、出版社の営業力の問題だからね。
なんかもうグダグダやなこのスレ
荒らしがいますからね。
企画書嫁だけではこういう事態を収拾できないことは過去を見れば明らか こういうときは規格そのものを転載するのが良い C99の規格 6.5.5 6 When integers are divided, the result of the / operator is the algebraic quotient with any fractional part discarded. If the quotient a/b is representable, the expression (a/b)*b + a%b shall equal a.
最近intって打とうとするとitnになる...
それはやったことないが、retrunならある
strcpyって使わないほうがいいんでしたっけ?
別に問題ない
thx
tnx ぢゃないのか? なんだろ thx
Thanxsの略だから、THの発音を残してTHXだね。 TNXだとトンクスになってしまう。 #あ、2ch的にはあってるのか。
C89 と C99 で挙動が違う場合はよく揉めるんで注釈入れるなりなんなりしといた方がいいんじゃないかな。
ちなみに C99 って現在出回っているコンパイラは対応不十分だから
>673 ハァ? ...まぁマックと呼ぶかマクドとするかって事だけど
tnxってのは初めて見たけど、分かりにくいな。
678 :
デフォルトの名無しさん :04/05/08 19:10
コマンドライン上で文字列を入力する場合、入力した文字列が次回以降の読み込み時にも残ってしまうんですけど fflushを使う以外にこれの回避方法ってありますか? getsとかfgetsでも、配列の大きさ異常のは次回に回されちゃうし
"tnx thanx"より"thx thanx"の方が引っかかるページ数は多いな。 引っかかったのが全部が全部そうではないにしろ。
681 :
デフォルトの名無しさん :04/05/08 19:29
dj
"thx thanx" AltaVista found 72 results "tnx thanx" AltaVista found 10 results
683 :
デフォルトの名無しさん :04/05/08 20:12
684 :
デフォルトの名無しさん :04/05/08 20:17
>>678 >fflush
プ
PS. TREBOR THX
ネトゲだと、日本人に多いのは thx。 英語圏の人は ty (= thank you)。
686 :
デフォルトの名無しさん :04/05/08 20:25
ry(略)かと思ったよ
入力バッファのフラッシュはできないかと
ポインターのポインターであるstr5は、 静的メモリーと動的メモリーを保持しており 一次元ポインターは動的メモリーと静的メモリーを 配列としてではなく、まったく個々に指し示し 片方は文字リテラル、片方はソート情報として リストの亜種を作りたい。文字で、並列処理を 行う理由はchar型が一バイトであるからであると いう理由だけである。ここまできて、char型一文字を 整数に直す方法がわかりません。
atoiだと思うが文章の意味がわからん
nt main(void){ char str1[5]={'A','B','C','D','\0'}; char str2[5]={'Z','I','J','\0'}; int **str3; int **str4; char **str5; char *temp1; char *t; int *num; int n1,n2; int i,j; t=malloc(sizeof(char)); str4=(int**)malloc(sizeof(int*)*10); for(i=0;i<10;i++) str4[i]=(int*)malloc(sizeof(int)); for(i=0;i<10;i++) for(j=0;j<10;j++){ str4[i][j]=i*10+j; } for(i=0;i<10;i++){ putchar('\n'); for(j=0;j<10;j++){ printf("%3d",str4[i][j]); } } str3=(int**)malloc(sizeof(int*)); for(i=0;i<10;i++) str3[i]=(int*)malloc(sizeof(int)); for(i=0;i<10;i++) str3[i]=(int*)i; putchar('\n');
str5=(char **)malloc(sizeof(char *)*10);/*-4*/ *str5=(char *)malloc(sizeof(char)); for(i=0;i<10;i++) str5[i]=(char *)malloc(sizeof(char **));/*48固定調を指し示すポインター*/ num=(int *)malloc(sizeof(int)*10); temp6=(char *)malloc(sizeof(char *)); /*temp1=str5;は0x431950*/ /*temp2=str5[0];0x4318f0*/ temp1=malloc(sizeof(char )*10); strcpy(&str5[0],"8");/*YZa*/ strcpy(&str5[1],"5");/*PQR*/ strcpy(&str5[2],"6");/*STU*/ strcpy(&str5[3],"2");/*GHI*/ strcpy(&str5[4],"1");/*DEF*/ strcpy(&str5[5],"4");/*NLO*/ strcpy(&str5[6],"7");/*VWX*/ strcpy(&str5[7],"3");/*JKM*/ strcpy(&str5[8],"0");/*ABC*/ strcpy(&str5[9],"9");/*bcd*/
for(i=0;i<10;i++){ temp1[i]=str5[i]; } /*temp1[i]=&str5[0][i]に若干の差異*/ /*temp[i]=&str5[i];にすると...個々の異なったこんな文字表示される*/ str5[0]="YZa"; str5[1]="PQR"; str5[2]="STU"; str5[3]="GHI"; str5[4]="DEF"; str5[5]="NLO"; str5[6]="VWX"; str5[7]="JKM"; str5[8]="ABC"; str5[9]="abc";
for(i=0;i<10;i++){ printf("\n%c",temp1[i]); printf("\n%s",str5[i]); } n1=1; n2=1; for(i=0;i<9;i++){ for(j=9;j>i;j--){ if(temp1[j-1]>temp1[j]){ *t=temp1[j-1];temp1[j-1]=temp1[j];temp1[j]=*t; n1=0; } else if(n1==0 || n2==0) n2=1; if(n1==0){ if(n2==1){ n2=0; /*イメージ的には、num=atoi(&str5[j]);とします まとまった。整数が求まりません。*/ } } } n1=1; n2=1; printf("%s",str5[num]); } for(i=0;i<10;i++) printf("%c",temp1[i]); return 0; }
欝だシヌ
696 :
デフォルトの名無しさん :04/05/08 21:15
・・・
とにかく、ソートできたらよか
簡易線形リストをつくりたいわけ
なんだこの狂ったコードは
君はプログラマに向いてないと思うよ。 アパレル関係への就職・転職をお勧めするよ。
702 :
デフォルトの名無しさん :04/05/08 21:51
だめだなこいつは・・・ ポインターもポインターの配列もなにも理解していない・・・
一から作り直した方が早い。
704 :
デフォルトの名無しさん :04/05/08 21:55
けど、同じ人間が作りなおしても、 基本的なところを間違っているのでダメだと思うな・・・
705 :
デフォルトの名無しさん :04/05/08 22:07
以前なにかの本で定数と比較する if 文では定数を左辺に書くといい というのを見たことがあるのですが、真意はどうなのでしょうか? たとえば、if (number < 10) と書くのではなく if (10 > number) という具合。
>>705 =の場合をいってるんじゃないの?
比較(==)と代入(=)を間違えた時のために
まぁ今どきのコンパイラなら警告だすけど
If natural is it that "Human Are You", use it.
>>705 その作戦に依存すると、変数同士の比較のときに結局ハマる。
コンパイラに警告ださせ、その警告がでないように直すほうが安全
709 :
デフォルトの名無しさん :04/05/08 22:34
>>708 その作戦に依存すると、警告ださないコンパイラのときに結局ハマる。
自分がしっかりせにゃならんプロ用の言語ってとこを認識することが最優先。
>>709 出せないコンパイラなんて今どきないと思うけど(笑)
>>709 そういうコンパイラを使うときはlintも併せて使うがよろし
ニンゲン誰だってミスがあるさ…(まさか、この漏れが=と==を間違えるなんて…)
712 :
デフォルトの名無しさん :04/05/08 22:51
どうもちょっと、歩いて気分転換してきました。 狂ったソースですいません。 自分の思いを思いっきりぶつけて見たんですが。
警告もlintもないような劣悪な環境だと if ( (a-b) == 0 ) とか if ( (a+0) == b ) とかみたいに無理やり左辺を式にするとか自衛するしかないんかな。 まあ漏れはどうせ無縁だからいいけど
スゲー簡略化してますけど、動けばいいの次元ですから とりやえずこれどう思います str5=(char **)malloc(sizeof(char *)*10);/*-4*/ *str5=(char *)malloc(sizeof(char)); for(i=0;i<10;i++) str5[i]=(char *)malloc(sizeof(char **));/*48固定調を指し示すポインター*/
717 :
デフォルトの名無しさん :04/05/08 22:57
>>714 だからどうして自分にヤキ入れるという正道をさておいてそういう邪道ばっかり追求するかね
>>717 いや、予防措置の話だし。安全措置なしで綱渡りするのが好きな人はいいけど
(たしかに昔のCはそういうスタイルだった)
ANSI Cからはそうじゃないしな。
>>715 「48固定調」という言葉の意味がわからん
すいません。可変長でした 正確に言えば、文字リテラルをさします。
721 :
デフォルトの名無しさん :04/05/08 23:08
>>718 ANSIのどこかに警告を出すような義務規定でもあるのか? それは何ページだ?
>>721 ANSI Cに定義されているということではなく(未確認)、
ANSI C対応以後のコンパイラの流れね。
古いやり方の人も許容する選択肢があるのがCではあるけど
自動化できる部分はしたほうが合理的だしなあ。
言われると思った・・・汚いソース 英語力がないとか 考えすぎて頭痛い
725 :
デフォルトの名無しさん :04/05/08 23:29
>>722 強情な人だなあ ( -_-)=3
あなたが自動化すべきといくら主張しても
そうなってない環境はあるわけじゃん
コンパイラの好みはあっていいけど
どこの世界ともわからない人へのアドバイスとして
言うことじゃねえべよ
>>723 ぱっと見て、こんだけ長いんだから、関数に分割しろ。
設計からやり直しだ。
str5=(char **)malloc(sizeof(char *)*10);性的メモリーを表す *str5=(char *)malloc(sizeof(char)); for(i=0;i<10;i++) str5[i]=(char *)malloc(sizeof(char **));病的メモリーを表す 自分の中で、何らかの誤解があるかもしれないから その辺も踏まえてゆっくり解きほぐしていこう。 静的メモリーは*str5をさし、*str5は動的メモリーをさす
typoに萌えた
>>727 その表現は本当にあっているのか? 言葉がおかしいと伝わらないぞ。
見たところ、str5こそが、何かを指し示すものではないのか?
「メモリーがポインタをさす」なんていう表現は、異常な表現だ。
「ポインタがメモリ(番地)」を指し示すんだぞ? 分かるよな?
>>725 Cなのにそういうツールを導入する手段がない環境があるのね。なんか興味あるなあ。
組み込みのセルフコンパイルかなんか?
組み込みだってgccとか、場合によっちゃVCのコンパイラで単体テストまでやったりするよな。
ポインタ値はメモリアドレス〜、という毎度お馴染みの話題のお時間です。
733 :
デフォルトの名無しさん :04/05/08 23:44
>>730 そんなの俺に聞かなくたってここの教えて君にでも聞いてみたら?
普段ぐぐってから来いとか言ってたのを逆襲されそうだけど
typedef struct __node{ char name[20]; char tel[20]; struct __node *pointer; }Node; Node *p; int main(void){ Node *p,*head; head=NULL; while(p=talloc(),scanf("%s %s",p->name,p->tel)!=EOF){ p->pointer=head; head=p; } p=head; while(p!=){ printf("%s %s",p->name,p->tel); p=p->pointer; } } talloc()略
自己参照型を使わず Node **pointerだけで、書く場合どのようにすればいいか
Node *pは2度宣言していますが、ケアレスミスです
scanfとな…?
738 :
デフォルトの名無しさん :04/05/09 00:15
空白厨がこないね。
お前は黙ってろ
あげ房はいるけどな
741 :
デフォルトの名無しさん :04/05/09 02:01
> あげ房はいるけどな 空白あけろよぼけ
742 :
デフォルトの名無しさん :04/05/09 08:10
> 以前なにかの本で定数と比較する if 文では定数を左辺に書くといい > というのを見たことがあるのですが、真意はどうなのでしょうか? それは20年ぐらい前に1度ちょっとだけ流行って、あっというまに廃れたやつです。 最初に流行らせようとしたひとは「そうすれば間違えて=を1個だけ書いたときに エラーになって便利でしょ?」というのが言いたかったのだが、 「じゃあ、おめー、両方変数だったらどうするんだ?」とか 「!=や<=のときいみめーだろ」といわれて、さんざんだったわけです。 ところがそれから10年ぐらいたって、どこかでそれを聞きかじった三田某が うれしそーにじまんしたんだな。(つまり彼はその意味も、ダメな意味も理解して いなかったわけ)。 たぶん、いまだにそんな記述を見かけるとした、その2回め(日本での)のを見たぼけが 書いたんだろうなあ。あたまわるすぎ。
743 :
デフォルトの名無しさん :04/05/09 08:11
> いや、予防措置の話だし。 っていうか「実際、予防効果なんかない」ってことで廃れたんだよ。
744 :
デフォルトの名無しさん :04/05/09 08:17
> たとえば、if (number < 10) と書くのではなく if (10 > number) という具合。 何の利点もない。
>>742 > 「!=や<=のときいみめーだろ」
> いまだにそんな記述を見かけるとした、
> あたまわるすぎ。
日本語も満足に書けない割に、偉そうだな。
>>712 仮にその環境に警告を出してくれるコンパイラが無かったとする、
仮にクロスコンパイラも無かったとする。それでも、
何でコードを書く環境とコンパイルする環境が同じであると言う勝手な大前提を持ち出すのですか?
もしかしてコードを持っていく手段が無いの?それはそれですごいけどな(笑
748 :
デフォルトの名無しさん :04/05/09 10:08
すいません、他の関数を呼び出すにはどうやればいいんですか? 例えばーなんですが if(i==0){ kansuu(void); } って感じでは出来ないのですが。。。
質問以外でageて書く奴は全員厨房だろ
751 :
デフォルトの名無しさん :04/05/09 10:17
>>751 ありがとうございます。これで、合ってるんですね
「エラーE2188 式の構文エラー」
と出るんです。。_| ̄|○ナンテダロ゙…
>>749 呼ぶときにはvoidって書いちゃ駄目。
kansuu();と書く。
素でぼけた。 voidはいらないよ。
>>753 オォ、本当だ!なんで書いちゃ駄目なんだろう(´・ω・`)まあそれはおいおい知ってゆくとして…
ありがとうございます。・:゚(゚´Д`゚)゜:・。
>>746 「日本語も満足に書けない」キミに言ってるんだけど、書けないだけじゃなくて理解もできないのか ?
>>748 お前と同じぐらいにな。
>>749 とりあえず、
kansuu(void); ⇒ kansuu();
にしとけ。
> か ? 空白を入れるなよぼけ
>734 リークしてる。
>758 は?
760 :
デフォルトの名無しさん :04/05/09 11:36
>>749 >if(i==0){
>kansuu(void);
>}
if(i == 0) {
kansuu ();
}
空白開けろよぼけ。
>755 >なんで書いちゃ駄目なんだろう では聞くが、int func(int num); を使う時に藻前は func(int num); とするのか?
762 :
デフォルトの名無しさん :04/05/09 12:26
>>760 関数は空白あけるなよぼけ。
kansuu (); ×
kansuu(); ○
763 :
デフォルトの名無しさん :04/05/09 12:28
>>747 あなたはどうしても、あなた好みのコンパイラを万人に使わせたいわけ?
それこそが身勝手な押し付けでしょうが
仕事の環境は個人的に気に入らないからって
責任範囲も定かでないものをインスコしたり私物を持込んだりは
なかなか勝手にやるわけにはいかないよ
何か要求するにしても同じ環境で黙って仕事できる人とできない人がいたとき
必ずしも口数が多い人が評価されるってものでもない
>>760 予約語の後は空白あけろよぼけ。
if(i == 0) ×
if (i == 0) ○
>>763 一般論を強制と受け取るのは過剰反応では?
>>763 おまいはコンパイラとIDEとエディタの違いを理解してから発言したほうがいい
767 :
デフォルトの名無しさん :04/05/09 13:48
> if(i==0){ 空白あけろよ ぼけ
768 :
デフォルトの名無しさん :04/05/09 13:50
っていうか、if (a = 0)に警告だしてくれないコンパイラーを使うとしても、 if (0 == a) と書くことの理由にならないんだってば。
test
>768 なんで?
771 :
デフォルトの名無しさん :04/05/09 14:32
>>768 if()に空白開けるなぼけ。
ディスクのむだだろぼけ。
>771 ってゆーかむしろスペースキーを打つ労力がむだだろぼけ、では?
制御文に空白入れろというのはたまに聞くが、予約語???
よく考えてみればif(a=0)と書かないためにif(0==a)と書くと主張しているやつらは if(0==a)と書くことを忘れたりはしないのだろうか。
名前欄に「#define if(x) if (x)」と書いたらトリップになっちまった
>>773 returnとかsizeofとか括弧を書かなくていい物は
括弧を書くときでも空けるけど、それ以外のキーワードや、
関数などに対しては空けないという事では?
そうなの? でも、returnはいいけど、sizeofはいちいち括弧を書かなきゃいけない場合と、 書かなくてもいい場合を使い分けているんだろーか。
>>777 普通に使い分けるけど。
型なら括弧必要、値なら不要ってだけじゃん。
long型などCの最初からある型より大きい数値を扱うには どういう方法があるのでしょうか?
そうか。 いや、使い分けている人見たことほとんど無かったんで。
781 :
デフォルトの名無しさん :04/05/09 16:03
unsigned long long int でも足りないなら多倍長演算の仕組みを自分で書け ぼけ > 779
sizeofの括弧は、単に全部括弧つけとけば通るから覚えなくても害はないが、 「型なら括弧」という簡単なルールを知ってれば迷うことはないよな。 書いているのが型なのか値なのか自分で迷うことはまず考えられないし。
783 :
デフォルトの名無しさん :04/05/09 16:04
常識的にif (、とかwhile (とかfor (とかは空けるんだよ。 関数やseizeofは空けない。 それぐらいおぼえとけ ぼけ
784 :
デフォルトの名無しさん :04/05/09 16:05
>>776 returnにはいつでも「つけない」
sizeofには不要な場合でもいつも「つける」
が正解。
俺はsizeofはつかいわけるがな。
786 :
デフォルトの名無しさん :04/05/09 16:22
sizeofの上手な使い方としては、 (1) 配列の要素数を調べるのには「使わない」 (2) 変数や構造体のサイズを調べるときには、変数名じゃなく型名をいつも使う という方法です。おぼえておきなさい。
788 :
デフォルトの名無しさん :04/05/09 16:29
VC.NETで struct hoge_t { int a; }; long a = 0; struct hoge_t *b; b = (struct hoge_t *)a; ってやったら warning C4312: '型キャスト' : 'long' からより大きいサイズの ':hoge_t *' へ変換します。 ってワーニングが出ます。 大きさは一緒じゃないんですか? ちなみにsizeofで struct hoge_t * と long の大きさを出力してみたら同じ4でした。 ちなみに、 b = (struct hoge_t *)&a; なら警告は出ません。なぜでしょう・・・?
789 :
デフォルトの名無しさん :04/05/09 16:35
ぼけ > ってワーニングが出ます。 いったい「わーにんぐ」って何だよ! ぼけ! ぼけ! でなおしてこい
790 :
デフォルトの名無しさん :04/05/09 16:36
っていうか、そんな代入して何か意味あるのかよ? やりたいならunionにしろ
longはポインタぢゃないし
792 :
デフォルトの名無しさん :04/05/09 16:38
> 大きさは一緒じゃないんですか? じゃあ、int から unisigned intに代入してみろよ
793 :
デフォルトの名無しさん :04/05/09 16:39
「わーにんぐ」っとかいう言葉を使うやつは (1)友達が全然いない か (2)まわりがぼけばかり かどっちかだな。
宣言部分だけじゃわからんよ 溜まったバッファの問題かもしれんやろに
>>788 恐らく64bit環境がどうのこうのっていうオプションをONにしてないか?
sizeof(struct hoge_t *)とsizeof(long)の大きさが未来永劫同じであると言う保証が無いってことだろう。
>792 そ-ゆーことぢゃないし
797 :
デフォルトの名無しさん :04/05/09 16:41
> b = (struct hoge_t *)&a; > なら警告は出ません。なぜでしょう・・・? でるわけねーだろぼけ。左辺も右辺もポインターじゃん
>795 ハァ?
799 :
デフォルトの名無しさん :04/05/09 16:42
>>783 空白うんぬんを説くまえにあんたの「常識」
というものについてまず考えたほうがよくないか?
800 :
デフォルトの名無しさん :04/05/09 16:42
> そ-ゆーことぢゃないし いえ、そういうことですよ。intもunisigned intもサイズは4バイトですから。
>800 バカ? '型キャスト'だろが。"型"だよ"か・た"
文法上の “()” と演算子の “()” を区別できない人が 多数いらっしゃるようです。
>>798 C++でいうreinterpret_castだろ
ポインタを整数型にキャストしたことが無い方が大勢いらっしゃるようで…
>ポインタを整数型にキャスト 逆だが
806 :
デフォルトの名無しさん :04/05/09 17:26
807 :
デフォルトの名無しさん :04/05/09 17:26
> 文法上の “()” と演算子の “()” を区別できない人が 演算子も文法上のものですよ ;-)
日本語をよく分かっていない方でしょう ;-)
>806 だからサイズの話ぢゃね-って
32ビットコンパイラであっても、ポインタが32ビットのサイズである保証はない。
だからサイズの話ぢゃね-って
812 :
デフォルトの名無しさん :04/05/09 17:34
ちんこ見せろ
813 :
デフォルトの名無しさん :04/05/09 17:37
>>802 俺もそう思う
演算子とステートメントの区別がついてない人大杉
式と型名の区別がついてない人大杉
もともと違うものを同一視したがる妄想癖がある人大杉
もしかしてまだGWなんだっけ?
815 :
デフォルトの名無しさん :04/05/09 17:38
そ、でも明日からまた仕事
この時間帯はいつもこうだろw
> unisigned int > seizeof おまえらぼけはもうこのスレにくるな
>818 よくみちゅけまちたねーえらいねーほめてあげまちゅ
VCの場合は/Wp64オプションを外せば、警告は出なくなるだけの話。
821 :
デフォルトの名無しさん :04/05/09 17:47
> 演算子とステートメントの区別が あのー、カッコはステイトメントじゃないですよ ;)
822 :
デフォルトの名無しさん :04/05/09 17:48
>>821 知ったかぶりしたかったんだろう。わかってやれよ
チェチェンの大統領がテロで爆死するような時代に お前らはいったい何をやってるんだよ恥を知れよまったく
824 :
デフォルトの名無しさん :04/05/09 17:50
> お前らはいったい何をやってるんだよ 2chだろ
825 :
デフォルトの名無しさん :04/05/09 17:50
826 :
デフォルトの名無しさん :04/05/09 17:51
> 32ビットコンパイラであっても、ポインタが32ビットのサイズである保証はない。 そんなコンパイラーはありません。
地名表記のない世界地図を広げて、チェチェンがどこにあるか指をさせる日本人は少ない。
×コンパイラー ○コンパイラ
829 :
デフォルトの名無しさん :04/05/09 17:53
ププププ
>>826 32ビット版のgccでのクラス関数を示すアドレスのサイズは64bitです。
無知を晒すのはやめましょう。
831 :
デフォルトの名無しさん :04/05/09 17:59
>>821 まあ例えばキミのように作用対象を読み違えやすい人が自衛策のつもりでしていることが
実は周囲の人々にとっては善意的に見ても滑稽だし、そういう行動の根底にあるやる気のなさや
責任のなすり合いだけは率先するタイプってとこが見え隠れし失望するわけだ
馬鹿ハッケソw
833 :
デフォルトの名無しさん :04/05/09 18:01
>>830 クラス関数とか言ってる時点で、あんたも五十歩百歩だよ
しかもここはCスレ 痴性を晒すのはやめましょう
834 :
デフォルトの名無しさん :04/05/09 18:02
メンバ関数へのポインタがなぜ大きいのかも知らなさそうだね スレ違いスマソ
836 :
デフォルトの名無しさん :04/05/09 18:07
>>834 VCの場合は32ビットだから、必然性があるわけではない。
知ったかするために、のこのこ出てこなくてもいいぞ。
838 :
デフォルトの名無しさん :04/05/09 18:12
>>837 バス幅とは何の関係もないよ
推薦図書
↓
C++オブジェクトモデル
内部メカニズムの詳細
著者 : S.B.リップマン
訳 : 三橋二彩子/佐治信之/原田曄
発行 : アジソンウェスレイ・トッパン
定価 : 3、400円
ISBN : 4-8101-8101-4
バス幅の話などしていない。 gccは64ビットだが、VCの場合はメンバ関数のサイズは32ビット。 処理系依存の話を、汎用的な問題と勘違いするな。
840 :
デフォルトの名無しさん :04/05/09 18:21
841 :
デフォルトの名無しさん :04/05/09 18:22
↑こいつはぼけ
842 :
デフォルトの名無しさん :04/05/09 18:28
>>839 VCには最適化のオプションにメンバ関数へのポインタをどう扱うかって項目があるのはもちろん知ってるよな?
なんでこんな基本的な知識の問題でこんなに無知な奴が多いんだ。
なんでこんな処理系依存の話をしたがるバカな香具師が多いんだ。
>>842 >メンバ関数へのポインタをどう扱うかって項目
そんな項目など無い。
846 :
デフォルトの名無しさん :04/05/09 18:39
↑こいつはぼけ
847 :
デフォルトの名無しさん :04/05/09 18:41
>>844 処理系依存のコードをいかにスマートに書くかってテーマを持っていない
例えばあんたのような世間知らずが多いってことだ
848 :
デフォルトの名無しさん :04/05/09 18:46
>>835 そうではなく「32bitコンパイラー」なるものは存在しないのだということだ。
たとえば、あるコンパイラーをもってきて「これは何bitのコンパイラー」だと言えるか? ;)
intのサイズが36bit、ポインターは24bit、charは9bitで処理するCコンパイラーは
何ビットだ? ;-)
shortもlongも32bitなのに、intだけ16bitのコンパイラーは何bitコンパイラーだ?
ほら、存在しないだろ? > 32ビットコンパイラー
849 :
デフォルトの名無しさん :04/05/09 18:47
> VCには最適化のオプションにメンバ関数へのポインタをどう扱うかって項目があるのはもちろん知ってるよな? どういう選択肢があるんですか?
850 :
デフォルトの名無しさん :04/05/09 18:51
すれ違いとスレ違いと環境依存と詭弁のアホばっか
>コンパイラー たしかにそんな用語は存在しない。
覚えたての知識を自慢したかったんでしょう
>848 >shortもlongも32bitなのに、intだけ16bitのコンパイラー 今時ANSIも知らないようなCコンパイラは氏ね。
>shortもlongも32bitなのに、intだけ16bit こんなの実在するのか?
存在しない
東京タワーはどんどんかっこ悪くなった
台本は晴れなのに雨、でもどうにかしないといけない