C言語なら俺に聞け! Part 77

このエントリーをはてなブックマークに追加
1v(^o^i)d
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

コンパイラを探しているなら >>2-13 を。
上記を逸した場合の結果は激しく未定義だYO!

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/

各種リンクは>>3-20あたり(誰か適当に貼って)

C言語なら俺に聞け! Part 76
http://pc5.2ch.net/test/read.cgi/tech/1081597375/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
2デフォルトの名無しさん:04/04/27 12:53
【コンパイラ】
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/

【ライセンスや機能などに問題あり】
Microsoft 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
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
3デフォルトの名無しさん:04/04/27 12:54
因数をちなみすうと呼べばいいんだよ
ヒッキー数
これから引数はヒッキーってことで。
6デフォルトの名無しさん:04/04/27 13:41
>>996
> 独学の人もインスウになりがちだろうな。
あと、その人が本を書いたりして、それを読んだやつもなるな...以下再帰的に...
7デフォルトの名無しさん:04/04/27 13:43
同感。
ちなみにオレは、引数を「いんすう」と読んだり、
カッコの内側をあけているようなやつの書いたコードは信用しないことにしている。

ろくにCを理解していない可能性高いので。いままでの経験則で、1回も例外がない!
8デフォルトの名無しさん:04/04/27 13:46
>>6
本に読み方なんか書いてないだろ。ふつう。
独学ってのは、自分で本読んでやるのも含めての話だ。

だれか人にならったのなら、「音声」で聞くから思い込みしないだろうけど、
本だけ読んで自分でやったやつは「いんすう」と読んでしまいがち、だという話題なのだ。
規約スレ逝け阿呆
10デフォルトの名無しさん:04/04/27 13:50
うちの学校で教科書につかってる
「作ってわかるCプログラミング」技術評論社/日下部陽一著 ISBN477411328X 2.289円
には、ちゃんと読み方が書いてありましたよ。

11デフォルトの名無しさん:04/04/27 13:54
うちの学校のR子先生は、若くてかわいいんですが、
改行のエスケープ(バックスラッシュのあとにnを書いたもの)を
「えんえぬ」って言うんですー
誰かなんとかしてください!

野郎の教師だったらけり入れてやるんだが...。
12デフォルトの名無しさん:04/04/27 13:57
3項演算子の正式名を述べよ(1点)。

演算子「.」の名前を言え(1点)。

演算子「->」の名前を言え(1点)。

単項演算子を8種類あげよ(8点)。
13デフォルトの名無しさん:04/04/27 13:58
11種類書いたら減点でしょうか?
>>11
えんえぬ先生萌え
15デフォルトの名無しさん:04/04/27 14:01
ホワイトボードにもわざわざ円記号書くんですよ...もうあほ^H^Hかと...
スレ違いを続けるお前もアホ
やれやれ、えんえぬが業界用語だってことも知らんとは
18デフォルトの名無しさん:04/04/27 14:09
若くてかわいい先生にC言語を教えてもらえるとは・・・・
>>11に殺意を覚えた。
訳した人間にセンスがないんだな。
横文字をカタカナでそのまま読むと無難。

パラメターとか
オペレーターとか
オペランドとか
ニーモニックとか
アーギュメントとか
アサインメントとか
ファンクションとか。
エムネモニック
21デフォルトの名無しさん:04/04/27 14:13
あ、Javaなのですが > 18
若くて可愛い先生はCなんてやらんってか!!!
23デフォルトの名無しさん:04/04/27 14:15
Cなどもはや若くてかわいい先生の眼中にはないか。
24デフォルトの名無しさん:04/04/27 14:17
Cは某男性講師です。
ファイルをオープンして、そのファイルの中の、ある1行を削除したい場合、どうすればよいのですか?
ファイルAの5行目を削除したい場合

1. ファイルBにAの5行目以外をコピーする
2. ファイルA削除
3. ファイルBをファイルAにリネーム
mv file file.orig
sed '5d' file.orig > file
↑それはC言語じゃないんじゃないか?
そのうちperlとか出てくるのかも。
30デフォルトの名無しさん:04/04/27 15:02
仕事に合った道具を選ぶ、という意味ではawkに優るものなし。
31デフォルトの名無しさん:04/04/27 15:40
縦5×横5のマスに○×をランダムで表示させる。
毎回同じであってはならない
マスの左と上には座標数字を表示
マスの2行下に座標指定を‘XY’で入力する
‘00’を入力したら現在状態を破棄し、最初から始める
‘001’のように入力したらエラー、再入力
‘Z’を入力で終了する
座標指定入力において何を入力しても不正な動作はしない。
‘66’とか入力したら再入力にする

座標指定された位置、及び上下左右のマークを反対にする
指定された位置の上下左右が範囲外の時、何もしない。該当する部分のみ反対にする。

全マス同じマークになったら‘You win’を表示
全マス同じマークになったら何を入力しても最初から始める

条件は
グローバル変数はマスに使うtableのみ
ほかの変数はグローバルは認めない
メイン関数の中身は
初期化処理する関数
ランダムで○×を表示する関数
座標を入力する関数
マークを反転させる関数
その結果を表示する関数
全マス同じマークか判定する関数
You winを表示する関数

どうかお願いします。m(_ _)m
本当に泣きそうです・・・
Do your best !
ummm, I can't ...
3431:04/04/27 15:47
「入力」は手書き文字で入力する必要があります
3525:04/04/27 15:53
>>26
どうもありがとうございました。
>>31
なんだネタか。
>>31
丸投げするなら宿題スレ行った方がいいのでは?

  ぼるじょあがC/C++の宿題を片づけますYO! 21代目
  http://pc5.2ch.net/test/read.cgi/tech/1078157730/l50
>>36
>>34は私じゃないです。

>>37
分かりました。すいません。
マスを表示するというのがさっぱり解からん。
やはりネタか・・・。
マスをカくんだろ。
マスカケ!マスカケ!マスカケーーーーーーー!!!
R子先生お願いします(;´Д`)ハァハァ
くだらんことでスレのばすな。
マスを表示させるんじゃなくて、
5×5で○×表示だと思うぞ
でもそれだと「グローバル変数はマスに使うtableのみ」ってのが
わからない。も〜どうでもいいか〜。
○と×に対応させる値を格納するマスがいるんだろ、多分
勉強し始めて日が浅いから分からんが
47デフォルトの名無しさん:04/04/27 18:02
> ↑それはC言語じゃないんじゃないか?

main()
{
system("mv file file.orig");
system("sed '5d' file.orig > file");
}
↑流れ読めよ・・・
49デフォルトの名無しさん:04/04/27 18:39
読んだらそうなるだろ。
(おれも同じコード書こうと思ったら先にかかれた)
>>29の時点でsystem()使うって分かるだろ。
>>27の時点で分かると思われ
こんなだからR子先生が相手してくれないんだ
   \\ はーるがきーたー♪はーるがきーたー♪どーこーにーきたー♪  //
♪   \\ にちゃんにきーたー♪ム板にきーたー♪このスレにーきたー♪// ♪
     ♪    ∧ ∧     ∧ ∧   ∧ ∧     ∧ ∧    ∧ ∧     ∧∧     ♪
 ♪    ∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)   ♪
      (゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧
    ♪ ∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)♪
─♪──(゚0 ゚*)|  ∪(゚0 ゚*)|  ∪(゚0 ゚*)|  ∪(゚0 ゚*)|  ∪(゚0 ゚*)|  ∪(゚0 ゚*) |  ∪ ─♪──
       |  ∪  | |  ∪|   | | ∪. |   | |  ∪|  | .|  ∪|   | | ∪ |  |〜♪
  ♪   |  | U U .|  | U U  |  | U U. |  | U U .|  | U U  |   | U U ♪
       U U     U U     U U     U U     U U     U U
↑それはC言語じゃないんじゃないか?
55デフォルトの名無しさん:04/04/27 21:13
で,共用体ってなんに使うわけよ

応用例キボンヌ
union REGS {
struct XREGS {
unsigned short ax, bx, cx, dx, si, di, bp, ds, es, flags, cflag;
} x;
struct HREGS {
unsigned char al, ah, bl, bh, cl, ch, dl, dh;
} h;
}
レジスタ操作するときとか。
でも、実際問題キャストあるから、共用体は無くても困らない。
?
データ節約
variant 型作るときとか。

union event {
struct mouse_event {
int type;
int x;
...
} mouse;
struct keyboard_event {
int type;
int key;
...
} key;
...
};
共用体が本当に活躍するのは、コンピュータ言語を
作成しているときだと思う。
63デフォルトの名無しさん:04/04/27 22:27
char hoge[1024];
struct AAA *aaa;
struct BBB *bbb;

aaa = (struct AAA *)&hoge[0];
bbb = (struct BBB *)&hoge[0];

実際上記のようなやり方と、共用体の違いってなんだ?
共用体の方がスマート。
>>56の例でやってみてよ。
共用体の方が直感的。
でた、魔法のキーワード「直感的」
共用体の方がデバッグが楽。
共用体のほうが官能的。
>>66
FILE *fp より FILE *out の方が良くなーい?
共用体のほうが猟奇的。
>>63
charだとアライメントが保証されない。
72デフォルトの名無しさん:04/04/28 04:46
「アライメントが保証されない」が意味不明だな。
かなり知ったかぶりっぽいな。
ちゃんと知識を整理して出直してこい。
>>72
喪前の方が理解してないと思われ。
74デフォルトの名無しさん:04/04/28 08:59
いいや71のほうが理解していないね。
システムにメモリ管理機能がなくて、メモリが足りない時ぐらいしか、使わなくて良いんじゃない? 共用体って。
メッセージ長が可変なデータグラムで通信する場合
(UDP/IP でも Mailslot でもいいんだが) に使わないか?<union
エンディアン変換とかに使える<union
78デフォルトの名無しさん:04/04/28 13:00
変換じゃなくて判断だろ。
79デフォルトの名無しさん:04/04/28 14:57
あのう、質問がありまつ。。。
ウンコの臭さを測るプログラムってどうやって作るんですか?
ちなみに、ウンコの臭さ基準としては、以下の通りです。
level 1 周りの草木を枯らす。
level 2 山がなくなる。
level max 測定不能。。。
80デフォルトの名無しさん:04/04/28 14:58
仮説によると、level maxでは、ビックバンが生じるそうです。。。
ポインタ使い方は分かったけどイマイチ有効的な利用法が分からんす
どんな時にどんな風に使えばいいのか頭の中で上手く思いつかない…
全く面白くない厨房のネタは要りませんのでお引き取り下さい。
>>81
関数に配列を渡したい時とか。
全く面白くない厨房の回答は要りませんのでお引き取り下さい。
85デフォルトの名無しさん:04/04/28 15:10
>84
お前がそんな偉そうな事言える資格なんてどこにあるのかねぇ。
>>81
構造体渡す時どうしてる?
87デフォルトの名無しさん:04/04/28 15:13
>>86
スタックに積んでます。
88デフォルトの名無しさん:04/04/28 15:18
全く面白くない厨房の回答は要りませんのでお引き取り下さい。
8983:04/04/28 15:29
ネタか?だるいわあ
90デフォルトの名無しさん:04/04/28 16:00
#include <stdio.h>

#define FILENAME "temp.txt"

int main(void)
{
FILE *fp;

fp=fopen("FILENAME", "a");
fp=fopen("FILENAME", "w");

long int buff=0;

while(1)
{
fprintf(fp, "%ld\n", buff);
buff++;
}
fclose(fp);

return 0;
}ココまで書いたんですけど、「一部数字として読めないよう」にという
要求があったときにその数字の先頭に抹消フラグを立てるか
何かその数字を読めなくするプログラムを教えてください
例えば if(とある番号の削除) fprintf("その番号の先頭にchar文字をつけ%ld")
とか。どうやれば良いでしょうか?
91デフォルトの名無しさん:04/04/28 16:08
> fp=fopen("FILENAME", "a");
> fp=fopen("FILENAME", "w");
>>90
そんなもん、読み込む側の仕様次第でどうとでも変わる。
>>91 何か?ファイルが無ければ作り、作った後でwriteモードにしてるのだが
>>90 数字の先頭にその数字を数字として読めなくするフラグを立てたいだけですよ?
読み込む側の仕様って?
>>93
FILENAME という名前のファイルが出来るであろう。
つか、態々"a" で開いといて (しかもクローズしないまま)
"w" でまた開くってのはどーゆー了見だ。
出来るだけでしょう?確かに書き込まれるが w は念のため作っておいたまで
97デフォルトの名無しさん:04/04/28 16:52
>>95
しかもこの馬鹿は"w"だと新規作成は行われないと思っているぞ。
#define FILENAME "temp.txt"
としているのに、
fp=fopen("FILENAME", "a");
というのは、アフォとしか思えないのだが。
粗探しに精一杯で肝心の
数字の先頭にその数字を数字として読めなくするフラグを立てたいだけですよ?
に何も言わない御前等のほうがアフォだw
>>96
おまいが作りたいファイルの名前は "temp.txt" じゃないのかと。
あと、念の為っていうなら fopen が成功したかどうかのチェックくらいしろ。

まだ突っ込みドコロがあるが (無限ループとか) 置いといて、
結局何がしたいのか判らん。
>一部数字として読めないよう」にという
>要求があったときにその
どうやってそれをプログラムに伝えるんだ?
101デフォルトの名無しさん:04/04/28 16:56
>>99
92が「読み込む側の仕様次第でどうとでも変わる。」と言っているだろう。
>>101
それに対して数字の先頭にその数字を数字として読めなくするフラグを立てたいだけですよ?
といってるだろ
どうやら、「数字」なるものが書き込まれるようだ。
104デフォルトの名無しさん:04/04/28 16:59
>>102
そのフラグについて具体的になにも言っていないだろ。
105デフォルトの名無しさん:04/04/28 17:01
数字として読めないようにしたいなら、数字でないもので上書きすれば。
>>104
そのフラグについてはじゃあ数字の先頭に"?"をつけてやってみてくれ
これで良いか?
107デフォルトの名無しさん:04/04/28 17:03
>>106
while(1)
{
if(よめないようにしたい)
fputc('?',fp);
fprintf(fp, "%ld\n", buff);
buff++;
}
>>90はプログラムの前に日本語を学んで欲しい。それで問題の
半分は解決するであろう。
傍から見てる人間にとっちゃ良スレだあ
>>99
この手の 「自分の考えを人に伝える能力が欠落しているタイプの人」 に
「どういう意味?」 などと訊いても、正しく伝わるまでには 100 レス程かかる
可能性が高いです。
>>107
それだと読めないようにしたくない行にまで"?"がつくYO
イタタタタ・・・
このスレ、いつの間にこんなに香ばしいスレになったの?
自分の間違いを指摘されても逆に噛みつく>90に萌え
「春か…」「春だな…」

とか言ってるうちに GW 突入か…
厨なくせにイキがってる>>90がかわいい。
結局出来ない>114に萌え
房だから出来ない>>116がかわいい。
ここはC言語だけじゃなくて日本語も教えてくれるんですか?
教えません。Cで訊きたいことがあったら日本語を勉強してからおながいします。
やっぱり出来ない>>119に萌え
(´・д・`)さっきから何が出来ないんだろう
粘着ウザ
すっかり宿題スレになっちまったなあ。
こんなのより、「scanf() 使うな」でループしたほうがよほどマシ
>>122
>>90に「イッテヨシ」の一言が言えないんじゃない?
別にGWでなくともこの時間帯は学生さんが多いですからねぇ。
自然にそうなるでしょうw
#include <stdio.h>

#define FILENAME "temp.txt"

int main(void)
{
FILE *fp;

fp=fopen("FILENAME", "w");

long int buff=0; //デフォルトで作られる数字
long int cchange=0; //抹消用変数

while(1)
{
fprintf(fp, "%ld">\n", buff);
while(1) {
if(数字抹消)
/*ここに読みたくない数字探索をして
数字を書き換えするパターンマッチングを用意*/
fprintf(fp, "?%ld">\n", buff);
cchange=buff;
}
buff++;
}

fclose(fp);

return 0;
}こんな感じでいいんじゃないでっしゃろか
(´-`).。oO(どこが改善されたんだろう…?)
129デフォルトの名無しさん:04/04/28 19:09
しかもエラーだし
あほか。おまいは。概要を書いただけでコード書いたわけじゃないし
>>90>>127
何がしたいのかぜんぜんわかんねえ
とりあえず「抹消なんとか」機能がないバージョンの
全ソースさらしてみ(もちろんちゃんと動くやつ)
テレパス同士でやらせとけ。
133デフォルトの名無しさん:04/04/28 21:12
コマンドプロンプトでコンパイルしたんですが、

エラーインクルードファイル’stdio.h’をオープンできない

と表示されました。

何でできないんでつか?
無駄な行間から察するにネタでしょ?
多分君が使ったのはコマンドプロンプトじゃなくて、○マン○プロンプトだったんだよ。
136デフォルトの名無しさん:04/04/28 21:19
いえ。汁。ほんとに困ってるんでつが。
環境はボーランドの無償のやつと、メモ帳を使ってみたんでつが。
インクルードフアイルがオープンできません。
138デフォルトの名無しさん:04/04/28 21:25
開発支援ツールか。いってみます
139デフォルトの名無しさん:04/04/28 21:26
なんで漏れが猿Cにいたのがわかったんだろう
140デフォルトの名無しさん:04/04/28 22:03
133でつ。支援ツールのおかげでできますた。39
>>136

781:デフォルトの名無しさん []:04/04/28 18:06
こんにちは。
ボーランドC++えじたとコンパイラパス(必須)が
わかりません。汁。


汁って何?
>>141の鋭いツッコミ
143デフォルトの名無しさん:04/04/28 23:48
141さん>>誤解ないようにいいますと
「汗」です。いや、場が楽しくなるかとおもって、、、
確かに、たった一名だけ楽しくなったようだ。
145デフォルトの名無しさん:04/04/29 00:20
そう言えばいまだにorzの意味がわからん香具師がいるらしい。
汁。........orz
OTLとか_noとかもなあ
147デフォルトの名無しさん:04/04/29 00:29
で、汁ってなに?orzはわかるが。
148147:04/04/29 00:31
あー汗のつもりか。
149デフォルトの名無しさん:04/04/29 00:54
http://www.it-college.ac.jp/20040401/0401/otl.html

ここに入って勉強しろ!
OTLがSTLの仲間だと思ってる人いたなあ
いや、OTLってあるよ。OracleのTemplate Library
そこそこ有名だとは思うんだけど。
152早速:04/04/29 01:40
まじか・・・OTL
Oracle, Odbc and DB2-CLI Template Libraryというやつだな。
154素人:04/04/29 11:38
すみません、学校の宿題で、
「ソースプログラムをコンパイラしようとして失敗した。
具体的にどういう処置をとればよいか」
ってでたんですけど、どう答えればいいんですか?
>>154
スレ違いです。
156素人:04/04/29 11:40
どこに行けばいいですか?
スレ一覧から宿題スレ探せ
えらいあいまいな宿題だな
159デフォルトの名無しさん:04/04/29 12:40
あきらめて醤油にする。
160デフォルトの名無しさん:04/04/29 16:42
>>154
あやまる
つか、問題文がその通りに書かれてたのだとしたら、まずその訂正
からやりたくなるのだが。
>>159
詳しく聞かせてくれ。
16381:04/04/29 17:09
遅レススマソ
>>83
なるほど、少しやってみます
>>86
まだ勉強中なので構造体受け渡しまで行ってないす…

>>87は自分とは別人なので誤解しないで…スタックなんて使えません(´д`;)アセンブラ?
質問するのも一度、一通り勉強してからでないと駄目ですね、失礼しますた
勉強でそこまで行っていないなんて、何の言い訳にもなりませんよ?
小学生なら真っ当な言い訳になります。
やってない事聞かれてもやってないとしか言えないよ…(つД`)
小学生でもできるやつはでき(ry
小学生でOS組んでる奴いるらしいね
169デフォルトの名無しさん:04/04/29 18:39
windowsxpでborlandのbccを使っているんですが、グラフをしたいのですが、graphics.hがないのでそれに変わるのはありませんか?
スレタイも読めよ
自分で突っ込むが、も、ってなんだよ・・・。
>>171
スレタイも空気も読め
ってことかと思った。
173デフォルトの名無しさん:04/04/29 22:58
こんばんは。質問です。
プログラムファイルのあるディレクトリを取得するにはどうしたらいいんでしょうか。
174デフォルトの名無しさん:04/04/29 23:08
つまり、カレントディレクトリがどこであっても、
実行ファイルのあるディレクトリを知りたいというわけなんです。
>>173
>>1のC FAQ19.31辺りを読んでください。
どうもありがとう。
とりあえず自分の環境ではargv[0]で入ってきました。
char **hoge

char *hoge[]
に見た目の違い以外の違いはありますか?

mainの引数はint,char **で決まりですか?
const intとか、const char *const *constとか、上記と全く違ったりとかしないんですかね?
戻り値はvoidとかintとか、環境依存でイロイロあるようですが。

unistd.hというのは、UNIXの標準なんたら、の略ですか?システムコールと何か関係があるような雰囲気があるきがしますが。

プログラム歴があさく、ほとんどわかりません。よろしくお願いします。
>>177
あります。
関数の引数の場合は、配列はポインタと同義なので、それです。環境によってはenvironとかあったりします。
全く違うということはないでしょう
戻値はintです。

そんな感じです。
179デフォルトの名無しさん:04/04/30 01:16
> 関数の引数の場合は、配列はポインタと同義なので

これはあやまりです。
>>179 どう違うの?
同義ならば、例えば配列の配列、ポインタの配列、ポインタのポインタが
同義になってしまう。
>>179ではないので真意はわからんが。
でも引数で渡された場合、区別ないよね。
--------------------------------------------
#include <stdio.h>

void test(int *p, int a[]){
printf("sizeof(p) = %d\n",sizeof(p));
printf("sizeof(a) = %d\n",sizeof(a));
}

main(){
int *px;
int ax[100];
printf("sizeof(px) = %d\n",sizeof(px));
printf("sizeof(ax) = %d\n",sizeof(ax));
test(px,ax);
}
-------------------------------------------
>結果
sizeof(px) = 4
sizeof(ax) = 400
sizeof(p) = 4
sizeof(a) = 4
>>177
宣言
extern char **hoge;

extern char *hoge[];
は全く異なる。

あとは
char **hoge;
という定義はできるが、
char *hoge[];
という定義はできない。
せっかく

"関数の引数の場合"

って書いてあるのに>>179>>181の馬鹿がアホなこと書きやがって。
俺は>>179は関数の引数でも同じなのは
一番外側のインデックスだけという意味かと思ったが。
実際先走ってしまったのかどうかはわからん
>>184
アホなことは書いてないだろ。
>> 関数の引数の場合は、配列はポインタと同義なので
「配列はポインタと同義」じゃなくて「int a[], は int *a, と同義」
って書いてあれば別だけど。
そして名古屋の一角でウェイトレスがカクテルをこぼす
188デフォルトの名無しさん:04/04/30 05:32
パーセント(%)を計算してprintfで表示させると「cl」でコンパイルすると%がうまく表示されません。
「bcc32」でコンパイルするとちゃんと表示されます。原因がわからなくてこまってます。

printf("plynum[%d]=%d, %2d%, ", ply, plynum[ply], 100*plynum[ply]/916797);

これで4番目、一番右の%が問題の箇所です。
%%
>>188の日本語がわからなくてこまってます。
>>189
レスありがとう
printf("plynum[%d]=%d, %2d%%, ", ply, plynum[ply], 100*plynum[ply]/916797);
にしましたが状況はかわりません。意味を取り違えてるんでしょうか?
192188:04/04/30 05:57
>>190
すみませんわかりにくくて
たとえば15%と表示させたいのに15としか表示されないってことです
>>191
それでいいと思うけど。
ちゃんとコンパイルしなおした?
>>193
コンパイルするファイルをまちがえてました。
やりなおしたらちゃんとでました。
Thanks!
BCCでDLL作ってるんだけど、

fp_output = fopen("hoge.txt", "w");
fprintf(fp_output, "test text\n");
fclose(fp_output);

とかやってもちゃんと出力されないのよ。
fprintfの戻り値をチェックしても書き込んだ数と同数だし、
どっかに出力はされてるらしいんだけど…。

DLLでファイル出力(テキスト)する場合、
fprintf fput fputs とかのどれがいいの?
なるべくfprintf使いたいんだけど…。
196デフォルトの名無しさん:04/04/30 08:56
> でも引数で渡された場合、区別ないよね。

ぼけ。
それは2つの事実によって「そうなる」だけ。
197デフォルトの名無しさん:04/04/30 09:03
つまり、仮引数にfunc(char *a)とかいてあろうが、
func(char a[])とかいてあろうがどちらも「ポインター」であり「配列ではない」という
ことだ。それがわかってないくせにCを理解しているとかいうのはぼけである。

もっとわかりやすくいえば、foo(int a)と宣言してある関数に、
foo(b);のように実引数としてbという変数を渡そうが、
foo(10);にように定数を渡そうが、
仮引数側ではaという「変数」にそれらがそれぞれコピーされているわけであり、
仮引数aが定数なわけではなく、aは変数なわけだ。
198デフォルトの名無しさん:04/04/30 09:05
>>186
> アホなことは書いてないだろ。
>>> 関数の引数の場合は、配列はポインタと同義なので
> 「配列はポインタと同義」じゃなくて「int a[], は int *a, と同義」って書いてあれば別だけど。

いや、むしろ後者のほうが正解だ。
こいつは正真正銘のぼけだな。
199デフォルトの名無しさん:04/04/30 09:09
なにやら朝からもめているようですが、
そのあたりは日下部先生の『作ってわかるCプログラミング』(技術評論社)が
詳しくていねいに説明してありますよ。

ほかの入門書も数冊読んだことあるが、そのあたりの説明が全然足りないか、
もしくはひどいのは著者自身が理解していなくて、いいかげんなウソが書いて
あったりする。

うちの職場で新人用に独習書を選定した3年前の話なので、いまではもっと
いい本がでているかもしれないけどね。
>>195
スタート → 検索 → ファイルやフォルダ
で、"hoge.txt"を検索。

見つかるなら、スレ違い。
fprintf() の使用は、問題ない。
201195:04/04/30 10:19
>>200

195です。
ファイルの生成までは行くんです。
問題は、そのファイルに何も書き込まれていないの。
念のために、w+ とか a , a+ とかでもやってみたけど、ダメでした。
fprintf の使い方間違ってないよねぇ…なんでだろう…。
202195:04/04/30 10:22
なんか質問する側なのに日本語がヘンだ…
つまるところ

1. fprintf の戻り値は書き込もうとしている文字数と同じ
2. hoge.txt はちゃんと生成される
3. hoge.txt には何も書きこまれていない

で、ここで疑問なのは、
fprintf は書き込み成功した数を戻すはずなのに
エラーが戻ってきていない事。

どっかで使い方を間違えているのか、
それともこの処理方法が愚かなのか。
>>202
hoge.txt を削除してから実行しても、生成される?
"w"ならすでに存在するファイルはサイズが0になるはず。
205195:04/04/30 10:49
>>203
はい、生成されます。
中身はやっぱり何も書いてありません。
(テキストエディタで開いても空白すら無くEOF)

>>204
そうなんですよね、最初はそれも考えたんですけど
生成は一応されるからそのへんの問題ではないみたいです。
206デフォルトの名無しさん:04/04/30 12:16
fopen( filename, "wt" );とか?
207195:04/04/30 13:07
>>206
それもだめでした。

う〜ん、 BCC コンパイラ特有の問題ですかねぇ…。
Cの書き方は間違っていないみたいなので、
BCC関連で原因調べてみます。

相手してくれた方、ありがとう。
>>195
Windowsの環境の事は良くわからないが、デバッガとかで追いかけられないのか?
ホントにfclose()まで実行されてるのか?
そもそも共有ライブラリでランタイムライブラリの後処理(fclose()の後処理)まで実行されるのか?
ありがちな罠でfflush()を挟んだらファイルに書き込まれたりしてないか?
if(NULL==(fp_output = fopen("hoge.txt", "w")) {
printf("Not Open\n");
exit(1);
}
fprintf(fp_output, "test text\n");
fclose(fp_output);

とするとどうなる? 大域変数 errno の値は?
>>207
ちなみに昔BCCのDOS版統合環境持っていたが、それでいいと思ったよ。
コンパイラの固有の問題ではないとおもゆ。
211195:04/04/30 13:26
>>208
大正解です、fflush()挟んだら行けました。 orz
ミンナゴメンヨ…そして本当にありがとう。
>>211
fcloseは内部でfflushと同じことをやっている。
つまりfcloseに到達していないということが分かったわけだよな?
213195:04/04/30 13:45
>>212
そのようです…一から勉強し直してきます… orz
214デフォルトの名無しさん:04/04/30 16:01
>>209
きもい
215デフォルトの名無しさん:04/04/30 16:14
本をちらちら読みながらCで組める程度のものですが
サンプルプログラム程度(単体で動いているある程度小さな量のプログラム)なら
問題なく読めるのですが、例えばLinuxのデバイスドライバとかだと
どの関数から始まってどの構造体がどういう働きを持ってるかとかがよみとれません
こういった場合のソースの追っかけツールとかノウハウ見たいなのがあれば
教えてもらえないでしょうか?
216デフォルトの名無しさん:04/04/30 16:17
>>215
Doxygen使っとけ
どの関数がどこから呼び出されてるのかとかもわかるし。
218パワフル小心者:04/04/30 17:26
CというかC++というかヴィジュアルシーというかコードのことでお伺いしたいです。
CinternetSessionのゲトファイルっていう関数を使ってるんですが
アプリケーションを終了せずに同じファイルを連続して取得してみると
なぜかファイルがサーバーから削除されていても、あるいは更新されていても
同じバージョンのファイルを取ってきます。何かの初期化が悪いのか
コードが悪いのか頭が悪いのか ちょっと解りかねますが
コードはりますので助けてもらえないでしょうか?
219パワフル小心者:04/04/30 17:31
EXPORT short int __stdcall FtpFileGetToVMS(
LPSTR gHostName,LPSTR gUserName,LPSTR gPassWord,LPSTR gDirName,
LPSTR gFileName,LPSTR gDirFile,short int ChgFlg){

char WorkgFile[MAX_PATH];
char WorkgDir[MAX_PATH];
char WorkrDir[MAX_PATH];

strcpy(WorkgFile,gFileName);
strcpy(WorkgDir,gDirName);
strcpy(WorkrDir,gDirFile);

//ソケットの初期化実効
if (!AfxSocketInit()){
AfxMessageBox("ソケットの初期化に失敗しました。");
return FALSE;
}

while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
//ループ処理中でもメッセージハンドルを制御
TranslateMessage(&msg);
DispatchMessage(&msg);
}
220パワフル小心者:04/04/30 17:31

CInternetSession *gpSession = new CInternetSession();
if (gpSession != NULL){
CFtpConnection *gpFtp = NULL;
TRY{
//セッションの確立
gpFtp = gpSession->GetFtpConnection(gHostName,gUserName,gPassWord);
//接続のステータス判定処理
} CATCH(CInternetException,e){
AfxMessageBox("リモートホスト接続に失敗しました。");
return FALSE;
} END_CATCH

if(gpFtp){
//カレントDIR移動の処理
if(!gpFtp->SetCurrentDirectory(WorkgDir)){
AfxMessageBox("リモートDIRが存在しません。");
return FALSE;
}
strcat(WorkgFile,";");
//リモートファイル取得処理
if(!gpFtp->GetFile(WorkgFile,WorkrDir,FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_ASCII,1)){
AfxMessageBox("ファイル取得に失敗しました。");
return FALSE;
}
221パワフル小心者:04/04/30 17:32

}
//FTPのクローズと破棄
gpFtp->Close();
delete gpFtp;
}
//セッションのクローズと破棄
gpSession->Close();
delete gpSession;

//SJIS変換フラグがONの場合はEUC->SJIS変換呼出し
if (ChgFlg != 0)
ChengeEucToSjis(WorkrDir);

memset(WorkrDir,'\0',MAX_PATH);
return TRUE;

}


です どうかお願いしました
222デフォルトの名無しさん:04/04/30 17:41
コマンドプロンプト(Dos窓)に表示される行数って限界があるみたいだけどそれを
もっと表示させる方法はありませんか?fprintfでファイル出力させる方法は知ってるんですが
できればDos窓で直接みたいんです。
初心者という名のアラシが…
224パワフル小心者:04/04/30 17:58
いえ 初心者では なく小心者(しょうしんもの)です
しかも嵐ではなくマジマジです。どうかお願いします
デジタルARENA / コマンドプロンプトの大きさやスクロール行数を変更する
http://arena.nikkeibp.co.jp/tec/winxp/20030404/104323/
226222:04/04/30 18:08
>>225
ありがとん
227デフォルトの名無しさん:04/04/30 18:08
しかし、
a.exe > file
とやれば済むんだろうな。
228デフォルトの名無しさん:04/04/30 18:46
w
>>224
CとC++の区別もつかない奴は初心者ダロ
板の名前見直して、一昨日出直してこい
しかも環境依存
231デフォルトの名無しさん:04/04/30 20:56
数字羅列したファイル
------------------------------
1
2
3〜(続く)
ー----------------------------
ってな感じであってなんらかのメッセージがあって(if (a=1)でも何でも良い)
例えば2をchar文字にしたい場合どうやれば良いでしょか?
出来ればファイルそのものをいじるのではなく、
ファイルの中に書かれている数字だけをいじりたいのだが…
232デフォルトの名無しさん:04/04/30 21:00
2は文字です。
誰か、質問の意味理解できる?
日本語に見えるけど、日本語じゃないね。
235デフォルトの名無しさん:04/04/30 22:15
#include <stdio.h>
わかんないので適当に。
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(void){
FILE *f;
char buf[1024], *p;
int sum=0;
if ((f=fopen("test.txt", "r")) == NULL) puts("open error"), exit(1);

while (fgets(buf, sizeof buf, f) != NULL){
if ((p=strchr(buf, '\n')) != NULL) *p = '\0';
if (isdigit(buf[0])){
sum += atoi(buf);
puts(buf);
}
}
printf("sum = %d", sum);

return 0;
}
i = ? i>'0' i-'0' : i ;
見たいな事を聞きたいのではなかろうか?
237デフォルトの名無しさん:04/04/30 23:11
>>236
なにそれ。
>>236
つーかお前が何を言いたいのか判らない。
239sato:04/04/30 23:13
ダビスタを、MX,NY以外で落とせるところを教えてください。
240236:04/04/30 23:24
あ、間違い。正直、すまなかった。
が、
デリミタの位置くらい気にするな。
そういう問題なのかな・・・
>>239
ビルの屋上から
243デフォルトの名無しさん:04/04/30 23:36
> fcloseは内部でfflushと同じことをやっている。

ふつうはそうだ。

> つまりfcloseに到達していないということが分かったわけだよな?

ところがそれは甘い!
その昔のMSCなんかはそこに有名なバグがあり、flocseの中でときどきうまくフラッシュ
されないことがあったのだ。で、そのせいで、その時代のMSCを使ってたコーダーは、
書き込みのfcloseの前にfflushをいちいち呼ぶクセがある。
>>243
流れ読もうぜ。
ただでさえ妙なやつらが溜まってきて、ごちゃごちゃしてんだし。
doubleとfloatってどっちの方が速いですか?
部分部分は日本語だが、自分が承知している事は
全て他人も承知していると錯覚しているから要点を
はしょり過ぎて暗号みたいになる。
247デフォルトの名無しさん:04/05/01 09:45
>>244
つーか、>>243が読むべきものはルールブックちゃうのか? >>212に対する答えがアフォ丸出しやん
248デフォルトの名無しさん:04/05/01 11:07
>>245
floatは一旦doubleに変換して計算を行うので一般的にはdoubleのほうが速い
>>245
つか、自分で調べろや。
>248
自分でやったことないだろ

でも、CPU依存、コード依存の部分もあるので自分で試すしかない
四則演算ならばfloatの方が早い場合が多いだろうが
251デフォルトの名無しさん:04/05/01 12:14
>>245
環境依存。まぁ普通はfloatの方が速いが。
しかし、floatでは精度に問題が出ることもママある。

>>247
ルールブックて何だ?>>246のことか?

>>248
最近は変換しないのが普通。
252デフォルトの名無しさん:04/05/01 12:14
テキストモードとバイナリモードの違いは
改行コードの処理の差だけなんでしょうか?
253デフォルトの名無しさん:04/05/01 12:16
>>252
そうだと思う。って、そんなモードがある環境の数自体はかなり少ないと思うけど。
テキストファイルをそういうモードのある環境で読み書きするなら何も考えず
テキストモードとやらで扱うのが吉...
254デフォルトの名無しさん:04/05/01 12:17
>>252
ちゃんとそういう変なモードがない環境のことも考えておかないと腐ることもある。
fopen()で"rb"とかするとちゃんと動かない環境もあるんだよ。
255252:04/05/01 12:19
というか、テキストとバイナリの違いって何でしょうか?
バイナリデータをテキストとして読めばテキストになり
テキストデータもバイナリとして読めばバイナリだと思うのですが…
正直、統一してほしい…。
257252:04/05/01 12:23
>>253, >>254
僕はいつもWin環境なんですが、これ(バイナリ&テキスト)は他の環境にはあまりないのでしょうか?
UNIXとかはナシ??
テキストファイルとはASCII文字のみで構成されたファイルのこと。
つまり、全てのデータの最上位ビットは0。
259デフォルトの名無しさん:04/05/01 12:24
>>255
単にCRとCRLFを変換するだけと考えれば良い。
バイナリとかテキストの区別は人間が勝手にしているだけ。
バイナリファイルをテキストモードで読んでみてもテキストに変換されるわけではない。
どういう変換を期待しているのか知らんが。
260デフォルトの名無しさん:04/05/01 12:25
>>258
漢字は無視か?今ならウニコードか...
>>257
そう。
>>258
という事は例の、メモ帳で開いて普通に読めれば、それはテキストファイルで
グチャグチャのへんなファイルならバイナリだと認識しろと?
263デフォルトの名無しさん:04/05/01 12:27
> floatは一旦doubleに変換して計算を行うので一般的にはdoubleのほうが速い

ちょっと前までのCではそうでしたね(1989年以前)
264デフォルトの名無しさん:04/05/01 12:28
ようするに244は頭がわるくて理解できなかったわけね。
>>257
改行コードとかでぐぐれば?ちょっとは自分で…。

>>258
IT用語辞典 テキストファイル
http://e-words.jp/w/E38386E382ADE382B9E38388E38395E382A1E382A4E383AB.html
266デフォルトの名無しさん:04/05/01 12:28
> テキストファイルとはASCII文字のみで構成されたファイルのこと。

そう。つまり日本語混じるとバイナリーファイルです。
267デフォルトの名無しさん:04/05/01 12:29
>>258はバカなので、
00〜1fあたりのコントロールコードがどれだけまじってても
「テキストファイルだ!」と言い張りそう ;-)
268デフォルトの名無しさん:04/05/01 12:30
> 環境依存。まぁ普通はfloatの方が速いが。

これうそ。たいがいはdoubleのほうが速い。
269デフォルトの名無しさん:04/05/01 12:31
> テキストモードとバイナリモードの違いは
> 改行コードの処理の差だけなんでしょうか?

はい、VC++などのfopenでのはそうですね。それだけの違いです。
昔のコンパイラーで最後の1aを処理するものもありましたが、VCはしませんので。
270デフォルトの名無しさん:04/05/01 12:32
>>257
まぁMSBは立っていないから間違いではないぞ。
ASCIIコードの可読(+制御コード、こいつもどこまで含めるかだが)だけで構成された
ものはテキストファイルと言っても誰も反論はしないだろう。

>>266
JISはどうだ?
271デフォルトの名無しさん:04/05/01 12:33
>>268
ほう、どういう環境でか教えてくれ。
doubleだとメモリのバンド幅も倍必要になって速かった試しはないんだけどな。
さて、今日もバイナリエディタでコード書くか。
273252:04/05/01 12:35
というか、なんで改行コードの違いとかあるんだろう…
本当統一して欲しいですね。
274デフォルトの名無しさん:04/05/01 12:36
>>273
UNIXと一緒にしたくなかったんだよ。
というか、その昔、端末はCRで行頭に行き、LFで行を送っていたのだよ。その名残り。
275デフォルトの名無しさん:04/05/01 12:36
>>254
> fopen()で"rb"とかするとちゃんと動かない環境もあるんだよ。

ありません。規格で「知らない文字は無視する」ことになってますので。

(でもまあふつうsetmode使うよな。環境依存の部分は別の行に追い出したいので。
さらに標準入力もつかうとなれば)
276デフォルトの名無しさん:04/05/01 12:37
>>273
統一するかどうかはあなたしだい。
わたしはWindowsでもMacでも改行コードは当然のようにLFだけ使っています。
277デフォルトの名無しさん:04/05/01 12:40
> まぁMSBは立っていないから間違いではないぞ。

いいえ。MSBが立っていないこととテキストファイルかどうかは無関係です。

テキストファイルってのは、0x20〜0x7fと、0x09と改行(0x0aとか0x0d)のみ
からできているものを言うのは常識! (そんなことはISOどころかRFCにさえかいてある)
>>275
その規格はいつできた?Cはいつからあったたと思う?
それ以前に規格に忠実な環境しかないと思っているのか?
幸せなやつだな。
279デフォルトの名無しさん:04/05/01 12:41
MSBが立っていない...だけだと0x00〜0x7fまでぜーんぶ適合してしまうからな。
7fがまじったときのいやらしさといえば!
280デフォルトの名無しさん:04/05/01 12:41
>>277
じゃぁ秀丸はバイナリエディタなのか?
喪前がそういうのなら許してやる。
281デフォルトの名無しさん:04/05/01 12:42
> ASCIIコードの可読(+制御コード、こいつもどこまで含めるかだが)だけで構成された
> ものはテキストファイルと言っても誰も反論はしないだろう。

こいつぼけ。なにが「どこまで踏めるかだが」や「反論しないだろう」だ。頭わるすぎ。
そんなものはきっちり決まってる。
>>279
漏れがそれだけだと言ってるんじゃないぞ...
流れをちゃんと読めということだ。
283デフォルトの名無しさん:04/05/01 12:43
そういえばOS/9はCRで改行だったなあ。あれはどこ由来なんだろう?

Unixはテレタイプライターの時代からLFつかってたからえらい。
284デフォルトの名無しさん:04/05/01 12:44
>>282はごまかし方がみっともない。
285デフォルトの名無しさん:04/05/01 12:44
> じゃぁ秀丸はバイナリエディタなのか?

そうです。日本語編集するから。
>>281
だからさ、その変のエディタはすべてバイナリエディタだ、テキストエディタじゃねー、
と大声で言えるなら許すと言ってるじゃねーか。だれかがテキストエディタと言う旅に
そう言ってろよ。
というか、すでに揚げ足とりになってしまってるような…
288デフォルトの名無しさん:04/05/01 12:45
> その規格はいつできた?Cはいつからあったたと思う?

ぼけ、Cなんかより古くからあるんだよ > テキストファイルの定義
289デフォルトの名無しさん:04/05/01 12:46
>>278
> それ以前に規格に忠実な環境しかないと思っているのか

ごまかしのための暴れ方がみじめ。
290デフォルトの名無しさん:04/05/01 12:46
>>287
なってませんね。
>>288
テキストファイルの定義でなくて、"rb"とかSetMode()とかO_BINARYのことだよ...
ちゃんと読めよ?
292デフォルトの名無しさん:04/05/01 12:47
そうか、世間は連休なのか。

連休厨め
293デフォルトの名無しさん:04/05/01 12:48
飯でも食うか。
294デフォルトの名無しさん:04/05/01 12:49
連休厨の291が無駄にあばれていますが。
実際には"rb"やsetmodeを最初につけたのはLattice-Cのあるミニコン版
それがそのままMS-DOS用にも流用された。それがmscにも入ってきたわけだな。
そんな常識もしらない厨ははさすがだな ;-)
295252:04/05/01 12:49
>>276
↓モード指定もすべてバイナリですか??
fp = fopen("text.txt", "rb");
>>294
だからそれが規格か?
ちゃんと揉め。
297デフォルトの名無しさん:04/05/01 12:52
> それ以前に規格に忠実な環境しかないと思っているのか?

このあたりのいいわけがもう末期的ですよね。

たとえば通常の標準規格に乗っ取ったCでは「i = 10;」ではiに10が代入されますが、
「規格通りの処理系ばかりあるわけじゃないだろ」といいはじめたら、もう
なんでも言えちゃいますからね ;-)
298デフォルトの名無しさん:04/05/01 12:54
"rb"だとfopenごと#ifdefしなきゃいけないけど、
setmodeだとその部分だけ#ifdefできるあら、そっちを好むのがまっとうなプログラマー

よって296はおおぼけ
i=10をまともにコンパイルできない環境は知らんが、fopen("rb")で腐る環境は
あったということだ。まぁコンパイラのバグが直るまで動かないコードで済む喪前が
うらやましいぞw
>>298
別に
#define XXX_OPEN_MODE "rb"
で対応でもいいが。setmodeなんて呼ぶ必要ねーし。
301デフォルトの名無しさん:04/05/01 12:56
>>295
もちろん読み込みモードもすべてバイナリーですが、fopenの"rb"では指定しません。
(かといってsetmodeも使いません)
さて、どうやっているかあてられますか?
(VC++の場合)
302デフォルトの名無しさん:04/05/01 12:56
>>300
ださすぎ...
>>298
その前にちゃんと揉めってば。
>>301
何もしていない。
VC++の場合ね。
>>301
CRだろうがCRLFだろうがいいようにコードを書いとく。
306デフォルトの名無しさん:04/05/01 12:59
>>304
まあ、それも1つの手だし、それでもたいがいうまくいきますね。
ただ、バイナリーファイルを扱うときに、たまたま「0x0d 0x0a」の組がでてきたときに
壊れちゃいますよん。
>>250
>>251
最近と言う問題ではなく、cではfloatをdoubleに格上げしてから計算される。
したがって、一般的にdoubleのほうが遅くなることはない。
308デフォルトの名無しさん:04/05/01 13:01
わたしのやり方がまあいちばん合理的ではあります(VC++の場合)。
ふふ

でも、それでもまだ納得行かないひとは、Unixに引っ越すなり、WindowsにSFU入れましょう。
(いまどきCygwinいれるのも時代遅れだし)
309252:04/05/01 13:01
>>301
う〜ん、分かんない…
>>306
なんで壊れる?バイナイモードで常に扱うってことじゃないのか?
311デフォルトの名無しさん:04/05/01 13:03
そんな言語はありません > cでは

> 最近と言う問題ではなく、cでは
> floatをdoubleに格上げしてから計算される。

いいえ、むしろ逆、「最近」はしないのです。昔のCはかならず格上げしなきゃいけなかった
最近(1989年以降)はしなくてもよくなった。
312デフォルトの名無しさん:04/05/01 13:03
> んで壊れる?バイナイモードで常に扱うってことじゃないのか?

こいつぼけ、VC++で「なにもしない」と、fopenは「テキストモード」だろ。
>>307
まぁ今時C++がほとんどだからね。VC++で普通に書くとfloatの方が速いよ。
問題ではないといってるのに問題にしているなぁ。
315デフォルトの名無しさん:04/05/01 13:04
>>313
それもウソ。おまえ実際にためしてないだろ。
わたしは以前かなり試した(6.0のころ)。仕事に使うやつだったからな。
316デフォルトの名無しさん:04/05/01 13:07
>>315
x87系は単精度モードないからな。
かといってdoubleはメモリアクセスが倍必要なわけだからfloatの方が普通は速い。
今のcpuって、除算の所要時間って昔みたいに値の影響受けないのかな?
値によって(内部のループ回数が変わって)所要時間が変わるなら、
doubleの方が不利になるケースもありうるか。
>>316
速度の測定方法にもよるけど、fpu内部での演算が続くならメモリアクセススピードは関係ないっしょ
>>318
x87に限定するとそういう計算は普通ではない。
320デフォルトの名無しさん:04/05/01 13:11
> かといってdoubleはメモリアクセスが倍必要なわけだからfloatの方が普通は速い。

それもウソ。おまえ勝手妄想ばかりしてないで、ためしてみろよ。
VC++6.0でふつうのPCならdoubleとfloatはほとんどからわない
むしろdoubleのほうがちょっとだけ速いこともあるぐらい。
borland Cでエスケープシーケンスが使えません。
OSはXPです。
おまえら議論の仕方がなってないよ。
いくら厨房の集うGWとはいえ酷過ぎるな。
オマエモナー
不毛というか無意味というか
これがGWという奴か
>>320
四則演算で試してみたがやっぱりfloatの方が速いぞ?
以下は時間が短い方が速い。divは時間がかかるからバンド幅の影響が少ない。
配列を小さくすれば当然差は縮まるが、それでも有意な差は出なかった。

add(float) : tMin= 0.859(sec), tMax= 0.860(sec)
add(double): tMin= 1.687(sec), tMax= 1.703(sec)

sub(float) : tMin= 0.859(sec), tMax= 0.860(sec)
sub(double): tMin= 1.687(sec), tMax= 1.688(sec)

mul(float) : tMin= 0.859(sec), tMax= 0.860(sec)
mul(double): tMin= 1.687(sec), tMax= 1.703(sec)

div(float) : tMin= 2.125(sec), tMax= 2.125(sec)
div(double): tMin= 2.234(sec), tMax= 2.235(sec)
#include <windows.h>
#include <stdio.h>

#if 1 // small array
#define N 100
#define LOOP 1000000
#else // large array
#define N 100000
#define LOOP 1000
#endif

template<class T>
struct CTestData {
CTestData() {
for (int i = 0; i < N; i++) {
b[i] = (T)(rand() + (double)rand() / RAND_MAX);
c[i] = (T)(rand() + (double)rand() / RAND_MAX);
}
}
T a[N], b[N], c[N];
};

CTestData<float> f;
CTestData<double> d;
double GetTime(bool init = false)
{
static double ts;
double t = timeGetTime() * 0.001;

if (init) {
ts = t;
}

return t - ts;
}

#define TESTFUNC(name, op) \
template<class T> \
inline void name(CTestData<T> &d, int n) \
{ \
for (int i = 0; i < n; i++) { \
for (int j = 0; j < N; j += 4) { \
d.a[j + 0] = d.b[j + 0] op d.c[j + 0]; \
d.a[j + 1] = d.b[j + 1] op d.c[j + 1]; \
d.a[j + 2] = d.b[j + 2] op d.c[j + 2]; \
d.a[j + 3] = d.b[j + 3] op d.c[j + 3]; \
} \
} \
}

TESTFUNC(add, *)
TESTFUNC(sub, *)
TESTFUNC(mul, *)
TESTFUNC(div, /)
template<class T>
void test(const char *p, void (*fp)(CTestData<T> &d, int n), CTestData<T> &d, int n)
{
double tMin, tMax;
for (int i = 0; i < 3; i++) {
GetTime(true);
fp(d, n);
double t = GetTime();
if (i == 0 || t < tMin) {
tMin = t;
}
if (i == 0 || t > tMax) {
tMax = t;
}
}
printf("%s: tMin= %.3f(sec), tMax= %.3f(sec)\n", p, tMin, tMax);
}
int main(int argc, char* argv[])
{
#define TEST(name, func) \
test<float> (name"(float) ", func<float>, f, LOOP); \
test<double>(name"(double)", func<double>, d, LOOP); \
printf("\n");

TEST("add", add);
TEST("sub", sub);
TEST("mul", mul);
TEST("div", div);

return 0;
}
なんつーかマシンによって変わるから
>>325
large arrayの場合。ちなみにP4 1.8GHz

>>330
そんなの最初から漏れが言ってることだ。
VC++6.0では違うというから試してやっただけさ。
>>327
あ、バグってるな add, +, sub - とかにしといて。
333デフォルトの名無しさん:04/05/01 19:01
>>331
なるほど.
POSIXでは、float.hで
FLT_EVAL_METHOD という
"implementation defined"なマクロを定義して

0だとデータ型の範囲内
1だとlong doubleはlong double、それ以外はdouble
2だとぜんぶlong doubleで評価する、とある。
intelのコンパイラ8.0のデフォルトオプションでやってみたら
divはdoubleの方が微妙に速い。large arrayでCeleron 533AMHzね。
add(float) : tMin= 0.571(sec), tMax= 0.590(sec)
add(double): tMin= 0.571(sec), tMax= 0.591(sec)

sub(float) : tMin= 0.551(sec), tMax= 0.561(sec)
sub(double): tMin= 0.571(sec), tMax= 0.590(sec)

mul(float) : tMin= 0.551(sec), tMax= 0.561(sec)
mul(double): tMin= 0.570(sec), tMax= 0.591(sec)

div(float) : tMin= 5.909(sec), tMax= 5.919(sec)
div(double): tMin= 5.898(sec), tMax= 5.908(sec)
PIII 1GHz VC++6.0 /O2 large_array

add(float) : tMin= 2.691(sec), tMax= 2.703(sec)
add(double): tMin= 5.960(sec), tMax= 5.981(sec)

sub(float) : tMin= 2.774(sec), tMax= 2.821(sec)
sub(double): tMin= 5.908(sec), tMax= 5.981(sec)

mul(float) : tMin= 2.713(sec), tMax= 2.760(sec)
mul(double): tMin= 5.941(sec), tMax= 5.977(sec)

div(float) : tMin= 3.434(sec), tMax= 3.456(sec)
div(double): tMin= 6.102(sec), tMax= 6.129(sec)

まあ
(float) fadd DWORD PTR [eax]

(double) fadd QWORD PTR [eax]
の差が順当に出てるね。
そんな環境依存の話をつらつらとする意味がある?
プログラムは環境に左右されることが良くわかる。
339デフォルトの名無しさん:04/05/01 21:07
>>337
意味はある。Cは処理系の能力を余さず使うための言語だ。
だが、1つの処理系での結果を以ってさも全てを見通したかのように語るアフォが痛いだけ。
必死だなw
341デフォルトの名無しさん:04/05/01 21:38
>>340
反論があれば聞こうか
342デフォルトの名無しさん:04/05/01 21:48
>>335
なんでdiv以外が異様に速いんだろう。divは遅いから計算せずに捨ててるわけで
もなさそうだし…
343デフォルトの名無しさん:04/05/01 22:14
c言語プログラムのコンパイル時にwarning: no newline at end of fileというエラー文が出たのですが、解決法を教えていただきたいのですが。
確かに気になる。
>>335
浮動小数点演算をやってるところのアセンブリソースは出せませんか?
できればaddとdivを。
smallの間違いでしたというオチでは?
>>343
ソースの最終行末に改行を追加する
347デフォルトの名無しさん:04/05/01 22:22
>>346
解決しました!ありがとうございます。
>>315
まぁ漏れは30分しか試してないが、かなり試した喪前はどーしたよw 反論は?
あ、コード書いてたのが30分で試したのは3分くらいか...
数字を入力する関教えてください
>>349
数字も文字なので、文字(列)と同じです。
>>349
直接的にやりたいことを具体的に説明しろ。
scanfでとると、一桁しか取れないと思うんですが、二桁とりたいのです
>>352
scanfでできます
>>352
2桁以上でも取れるけど。
でも、scanf 使うの嫌。
355デフォルトの名無しさん:04/05/01 22:46
>>352
その言い方からして試していないだろ?
死ねよ。
356デフォルトの名無しさん:04/05/01 22:46
fgets + sscanf
などを用いてwhileでまわす。
すみません、やってみたらscanfでできました
getsで数字の0とってhairetsu[0]を出力してみると48になるので、同じ仕様なのかと勘違いしてました。
48ってのは、getsで取ると、文字扱いになるため文字を十進数に変換すると48になるからなんですね
勉強になりました
358gets厨:04/05/01 23:41
GWに勉強なんて関心や
とあるネットワークファイルシステムを移植中(kernel2.4 → kernel2.6)
なんですけど。
kernel2.4ではあったrevalidateがkernel2.6だと無くなってるんだが、
getattrの延長でrevalidateするsmbfsを参考にしてもいいのかな。
smbfs、nfs以外に参考になるものないですか?
#それにしても構造体変わりすぎ_| ̄|○

int smb_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
{
int err = smb_revalidate_inode(dentry);
if (!err)
generic_fillattr(dentry->d_inode, stat);
return err;
}
>>359
激しくスレ違い。
kernelのソースはCじゃないかーヽ(`Д´)ノ
ごめんなさい。

では、どこで聞いたらよいですかね。?
linux板ですか?
pc2難民
363デフォルトの名無しさん:04/05/02 02:38
こんな感じのソフト(?)ってC言語で作れるんでしょうか?

1.5分おきに「株価情報」の文字列をGoogleで検索。
             ↓
2.出力結果のHTMLソース取得。
             ↓
3.そのHTMLソースに「下落」という文字列が含まれるているか判定。
             ↓
4.もし含まれていたら、「.txt」で保存。
             ↓
5.smtpサーバーに接続してそのtxtを添付し、送信。

クライアントサイドで一連の動作を自動的に1年ぐらいずっとさせてたいのですが。
ちなみに自分の使ってるOSはwinxpをです。           
>>363
もちろん作れる。他の言語で作れるものでCで作れないものなぞ存在しない。
しかし、そういうことをやりたのであれば別なスクリプト系の言語が楽。
>>363
作れるか作れないかで言えば、作れないはずがない
Cだけで作るのは無駄だろ。はっきり言って
というか5分間隔でぐぐっても無意味
「株価情報 下落」でぐぐってはまずいのだろうか?
>>363
けけけ。それならJavascriptでも十分に作れる罠。
CPU使用率100%になるけど(w
>>368 タスクに登録して5分おきに起動させればいいような...
>>362
ありがと。
371デフォルトの名無しさん:04/05/02 04:57
Cの前身はBと言われてるけど実はウソで、γ言語だったと何かで読んだけど
本当なんですか?
372デフォルトの名無しさん:04/05/02 04:58
>>371
γはBの俗称
>>307
> >>250
> >>251
> 最近と言う問題ではなく、cではfloatをdoubleに格上げしてから計算される。
> したがって、一般的にdoubleのほうが遅くなることはない。
いつの話だ…
>>307は最新版のISO/IEC_9899:1999を目を皿のようにして
よく読め。
376デフォルトの名無しさん:04/05/02 07:45
#include<stdio.h>

void main(void){
char *s;
scanf("%s",s);
printf("%s",s);
}

このプログラムが実行できません。コンパイルはできます。
どうしてですか?
....警告でないなー。
mallocしてください。
378デフォルトの名無しさん:04/05/02 08:10
警告なんかに頼ってるうちは三流
技量とは無関係、真面目に作る気がない証拠
>>376
char *s; → char s[100];
くらいが、お手軽かと。
>>378
エラーじゃなくて警告と言っているって事は、
お前はエラーには頼っている三流のようだなw
381デフォルトの名無しさん:04/05/02 09:09
>380
プ
>>378とは一緒に仕事をしたくないな
>>381
ププププププププププププププププププププププププ
ププププププププププププププププププププププププ
ププププププププププププププププププププププププ




プリッ♪
384_:04/05/02 10:49
>376
くそ本に騙されるなよ
main()関数はint型だ。
385デフォルトの名無しさん:04/05/02 10:58
>>384
全然かんけーねーんだよ
そんなことしか突っ込めねー糞ボンクラはとっとと失せな
386デフォルトの名無しさん:04/05/02 11:48
385はおおぼけ。
386はぼけ

さっきからぼけぼけぼけぼけぼけぼけぼけうっせーーんだよ
388デフォルトの名無しさん:04/05/02 12:09
やーい > ぼけ
ウザイのでガキは消えてください。
390デフォルトの名無しさん:04/05/02 13:02
>>268 >>307 >>315 >>320
おい喪前、その仕事で使うからかなり試したって結果チキンと説明しろや。

>>325-329>>332 で修正しといてね。

あと >>342 もできたらよろしく。ループの数減らしたりした?
391_:04/05/02 13:04
下のint_to_str()関数に*付けないといけない理由教えてください

#include<stdio.h>
char *int_to_str(int hoge);
int main(void)
{
char *foo;
int num = 500;
foo = int_to_str(num);
printf("%s\n", foo);
return(0);
}
char *int_to_str(int hoge)
{
static char buf[10];
sprintf(buf, "%d", hoge);
return(buf);
}
>>391
・・・ポインタだから。
393デフォルトの名無しさん:04/05/02 13:14
付けなくてもいいんだよ

main() {
char *foo;
auto num 500;
foo = int_to_str(num);
printf("%s\n", foo);
return(0);
}
char *
int_to_str(hoge) {
static char buf[10];
sprintf(buf, "%d", hoge);
return(buf);
}
394デフォルトの名無しさん:04/05/02 13:15
buf返すからだろ。
そんなこともわからんのかよ。
どんな本で勉強してるんだよ。本の名前言えよぼけ
395デフォルトの名無しさん:04/05/02 13:17
返すのがbuf[0]だったら、関数の型はcharやintでもいいぞ ;)

返すのが &buf[0] (bufと同義) だからchar *なんだろ。

そんなこともわからんのかよぼけ
ぼけスレ
397391:04/05/02 13:34
こんなミエミエの釣りでも簡単に釣れるもんだ
398デフォルトの名無しさん:04/05/02 14:00
>>391
どこが釣りなんだ?
本当に分からんから聞いたとしか思えんがw
マジレスだがbuf[10]だと溢れるぞ?ちゃんと自分の仕事のソース見直しておけよ。
>>391
>return(0);
いやww、別にwww、コーティングスタイルは趣味の問題だからwwww
関係ないないんだけどさwwwwww

>>393
懐かしい…
C++ と Objective-C の違いってなんですか
Visual-C とかもあるみたいだし
Perl のリファレンスが C のポインターみたいなもんだとか
って事は C でもオブジェクティブ指向プログラムできる?

401デフォルトの名無しさん:04/05/02 14:23
int size;
fseek(fp, 0, SEEK_END);
size = ftell(fp);

上の方法以外でファイルサイズの取得方法はないですか?
402デフォルトの名無しさん:04/05/02 14:24
system("ls -l");
403デフォルトの名無しさん:04/05/02 14:25
>>400
できません
404デフォルトの名無しさん:04/05/02 14:27
>>401
stat、fstat、GetFileSizeとか。
man 2 stat
406デフォルトの名無しさん:04/05/02 14:32
407デフォルトの名無しさん:04/05/02 14:36
>>400
気分的にはできる。
すべての言語のプログラムはCに変換可能。
実際、C++初期はCへのトランスレータだった。
408デフォルトの名無しさん:04/05/02 14:37
>>400
C++はSimula厨
Objective-CはSmallTalk厨
ところで「オブジェクティブ指向プログラム」って何だ?
409デフォルトの名無しさん:04/05/02 14:39
>>400
C++は、Cの後置インクリメント
Visual-Cは、まあ何ちゅーかVisual StudioからCを除いた部分かな
410401:04/05/02 14:41
どうもありがとうございます。
fstat()という関数があったのですね。
411391:04/05/02 14:44
>398
学生だけど仕事くれる?

>399
何がそんなにおもしろいの?

あーちなみにこのソースは前橋のC言語ポインタ完全制覇から
一部引用しているよ
なんでもかんでも"釣り"ってことにするなよ。
>>411
いや、お前に仕事はムリ。
414401:04/05/02 14:55
return(0); ←僕もこうしてしまう癖があるんですよね…
sizeof(i)  みたいな感じで癖になってしまってます。
415デフォルトの名無しさん:04/05/02 15:03
>>414
言い訳するときの論理まで破綻か
よっぽどひでえコード書いてるんだなw
416デフォルトの名無しさん:04/05/02 15:24
なんか、ここは未だに原始時代を見ているようだ。げろ。
417デフォルトの名無しさん:04/05/02 15:30
なんか、ここのスレの人達って・・・プライドが高すぎ・・・
なんでだろう・・・
418391:04/05/02 15:31
>413
あなたが言う仕事内容とそれに見合う。
スキルセットを教えてください。
>>418
とりあえずポインタ必修。話はそれからだ。
>>411
正しい部分を引用して、間違った部分は書き足したんですね
#include<stdio.h>
int main(void)
{
printf("hello\n");
return 0;
}

こう打ったんですけど、デバッグすると

'sampl.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。
'sampl.exe': 'C:\WINDOWS\system32\kernel32.dll' を読み込みました。シンボルが読み込まれていません。
プログラム '[5572] sampl.exe: ネイティブ' はコード 0 (0x0) で終了しました。

こんな文章が出てきてプログラムが動きません。
シンボルが読み込まれない、という意味と解決方法を御教授願えないでしょうか。
>>418
だからお前には無理だって。
>>421
いや、ちゃんと動いてる。
気にするな。
>>421
動かないって具体的にどんなエラーが?
正常に終了しているように見えるけど、何か問題が?
425デフォルトの名無しさん:04/05/02 15:38
>>421
#include<stdio.h>
int main(void)
{
printf("hello\n");
getchar(); /* tuika */
return 0;
}
>423-424
なんか目にもとまらぬ速さで終了してしまって、
なんて書いてあるかも読めないんです。
427391:04/05/02 15:46
>422
釣りはいいですから根拠をいってください。
それとも日本語理解できないんですか?
422じゃないけど
とりあえず391のプログラムが理解できないようじゃ仕事にならん。
むしろ邪魔。

これ根拠。
429391:04/05/02 15:58
じゃ私は問題ないですね
391は"プログラミングの仕事くれ"とは一言も言って無いじゃん。
誰にでもできる簡単な軽作業
はできるかもしれないよ。
とりあえずプログラムが書けるってことは前提。あ、まともなプログラムね。
その時点でお前は失格だが。
仕事するにはそれ以外のものも重要である。
432430:04/05/02 16:03
(つづき)
でもコミュニケーション能力・協調性が必要な仕事はむりだろうね。
433デフォルトの名無しさん:04/05/02 16:04
当たり前・・・
>431・432
空気読め
435デフォルトの名無しさん:04/05/02 16:12
素朴な疑問なんですが…
>>391 のような
return(0);
ってC言語の書き方としてまずいんですか?
436デフォルトの名無しさん:04/05/02 16:15
初心者です


#include<stdio,h>

int main(){
return(printf(゙hello, warld??/n゙));
}


うまくうごきませんので一体何が問題なんでしょうか?
437デフォルトの名無しさん:04/05/02 16:15
まずくないね。
でもどうせなら、
return (0); にするか
return 0; にしなさい。
もしくは
return EXIT_SUCCESS;
>>435
単にそのかっこは不必要ってだけ。
int a = (3);
とかと同じように、見慣れないとキモイ(笑)
439デフォルトの名無しさん:04/05/02 16:19
>>435
まぁスタイルの問題なんだが、関数でもないのに()はいらんということだ。
ささいなことだが、retrun(0) だとリンクするまで分からんw
関数は関数として、func()。
文は文として書けと。for (i = 0; i < 100; i++)
440デフォルトの名無しさん:04/05/02 16:19
>>436

まず「#include」の後ろは空白をあけろぼけ
関数の中括弧は独立した行にしろ
文字列をくくるにはダブルクォーテイションを使え。
改行はスラッシュじゃなくてバックスラッシュを使え(ほんとにスラッシュをだしたいならそのまま)
warldは間違い。worldだろ
クェスチョンマークは2つ続けるな。
(あと、できたら、includeするヘッダー名は実在するものにしろ)

#include <stdio.h>

int main()
{
return (printf("hello, world?\n"));
}

ほーら、うごいただろ
>>436

fflush(stdout);
442デフォルトの名無しさん:04/05/02 16:22
つまり、Windowsとかつかってるバカが、
できたexeファイルをクリックして起動すると、
コンソールモードで「hello」と出て、一瞬で閉じてしまうということだろ ;)

だからWindowsユーザーはぼけなんだよ。
>>440
動かんぞ、ボケ!
>>442
なんだてめえこの野郎、俺にlinuxの使い方教えて下さいよ。
>>440
漏れの使ってる環境ではバックスラッシュ(半角)が使えないので、
仕方なく??/を使っているのです。
446糞プログラマ:04/05/02 16:27
>431
自分はまともなプログラムがかけるのですね。
いや〜すばらしい。では、まともなプログラムの見本を見せてください
下記の糞汚いプログラムをあなたの言うま・と・も・なプログラムに
してください。おながいします。

#include<stdio.h>
char*f,s[999],*p;k(){while(*p==32)++p;}a(x){int r=0;if(*p==40){char*b,c=*++p;
++p;k();r=a(x);c==43?r+=a(x):c==45?r-=a(x):c==42?r*=a(x):c==47?r/=a(x):c==37?r
%=a(x):c==61?r=r==a(x):c==62?r=r>a(x):c==60?r=r<a(x):c==63?(b=f,r?r=a(x),f=0,a
(x),f=b,0:(f=0,a(x),f=b,r=a(x))):c==70?b=p,r=(a(x),0),f=b,0:c==67?(f?(b=p,p=f,
r=a(r),p=b,0):0):0;++p;}else if(*p==88)r=x,++p;else while(*p>47&&*p<58)r=r*10+
*(p++)-48;k();return r;}main(){while(gets(s))p=s,printf("=>%d\n",a(0));}
>>442
犬厨(プが必死だなw
犬ペンギン藁える(プ

敗者は黙ってろよププ
関数の中括弧は独立した行にしろ

なんで?
449デフォルトの名無しさん:04/05/02 16:33
>>445
トライグラフとは… お前、なんかギャップがあるな。
ちなみに、どんな環境か教えてくれ。
>>446
お前、時代遅れ杉。そんなコード書くようじゃ無理杉。
って、どうせどっかからのコピペなんだろうが。
451糞プログラマ:04/05/02 16:41
>450
コピペですが何か問題でも?
それより早くまともなプログラムの手本を見せてください。
>>451
>>436から始めてろ。
>>449
日本語版Windowsです。
7行からのコピペか?
質問スレとかにたまに沸くけど、
何かにつけて7行持ち出すアホはどうにかならんかね。
>>453
いや、だからなんで\が出ないんだよと。
エディタ何使ってるんだ?notepadでも出るぞ。
456デフォルトの名無しさん:04/05/02 16:46
>>449
トライグラフいいねー
ほんとはバックスラッシュが円記号に化けてしまうような環境の人は、
トライグラフを使って??/と書くべきなんだよなー

うちはちゃんとバックスラッシュなのでだいじょぶだが。
457デフォルトの名無しさん:04/05/02 16:47
>>448
常識
なんかネタが続いてるようだが
>>456
マジレスするが、
化けるどころかそのコードを持つ文字がまったく入力できない環境向けだと思うが
>>457
常識だからが理由?
プ
>>459
文法がどうのというより周囲と協調しないといけないからだよ。
>>457
コーディングスタイルによって中カッコの位置は変わると思うんだが?
確かに>>460の言う通りそういう場合もあるがな。
(オレは独立だと何か気持ち悪いので後付けスタイル)
462デフォルトの名無しさん:04/05/02 16:56
関数の中括弧を
int main(void){

}
のようにする人も多いんじゃないの?
というか、(プロジェクト内で)記述方法がちゃんと統一されていれば、どちらでも良いだろう。
中には制御文とかの中括弧も独立させている
開発現場もあるぞ。ようは業に入ったら業に従えよと
464デフォルトの名無しさん:04/05/02 17:09
printf
("Hello world!\n")
;
こう書くのか。
それを制御構文と呼ぶのか、初耳。
それを中括弧と呼ぶのか、初耳。
466464:04/05/02 17:13
>>465
440に言ったつもりなんだが。

でもまあ、中括弧の意味は勘違いしていたかもな。
>>465
かんべんしてやって。仮に"()"が中括弧でも独立できてないし。
468デフォルトの名無しさん:04/05/02 17:15
#include <stdio.h>

char s[999];
char *f, *p;

main()
{
while (gets(s)) {
p = s;
printf("=>%d\n", a(0));
}
}

k()
{
while (*p == ' ')
++p;
}
解析乙!
470デフォルトの名無しさん:04/05/02 17:17
a(x)
{
  int r;

  r = 0;
  if (*p == '(') {
    char *b;
    char c;

    c = *++p;
    ++p;
    k();
    r = a(x);
    switch (c) {
    case '+':
      r += a(x);
      break;
    case '-':
      r -= a(x);
      break;
    case '*':
      r *= a(x);
      break;
    case '/':
      r /= a(x);
      break;
471デフォルトの名無しさん:04/05/02 17:18
    case '%':
      r %= a(x);
      break;
    case '=':
      r == a(x);
      break;
    case '<':
      r <= a(x);
      break;
    case '>':
      r >= a(x);
      break;
    default:
      (c == '?') ? (b = f, r ? r = a(x), f = 0, a(x), f = b, 0 : (f = 0, a(x), f = b, r = a(x))) :
        (c == 'F') ? b = p, r = (a(x), 0), f = b, 0:
          (c == 'C') ? (f ? (b = p, p = f, r = a(r), p = b, 0) : 0) :
            0;
      break;
    }
    ++p;
  }
472デフォルトの名無しさん:04/05/02 17:18
>>470
a(x) ←
473デフォルトの名無しさん:04/05/02 17:18
  else if (*p == 'X') {
    r = x;
    ++p;
  }
  else {
    while ('0' <= *p && *p <= '9')
      r = r * 10 + *(p++) - '0';
  }
  k();
  return r;
}
474デフォルトの名無しさん:04/05/02 17:19
>>472
むかしはそれがけっこうふつうだった
475デフォルトの名無しさん:04/05/02 17:21
> 化けるどころかそのコードを持つ文字がまったく入力できない環境向けだと思うが

だから化けるってことは入力できないってことでは?
476デフォルトの名無しさん:04/05/02 17:21
>>474
それは
a(x)
int x;
{
のような書き方じゃなくて?
477デフォルトの名無しさん:04/05/02 17:21
>>462
Javaだと35%ぐらいの確率でそう書くやつがいるが、
Cでやるやつはかなりのぼけ。かなりださい。
478デフォルトの名無しさん:04/05/02 17:22
>>476
いや、そう書いていた時代にも、その後にも、「かいてなければint」を積極的に
使う人がいたってこと。
479デフォルトの名無しさん:04/05/02 17:24
>>475
だね。
たとえば「A」を入れたつもりが「B」に化けちゃう環境では、
「A」は入力できないといっていい。
480デフォルトの名無しさん:04/05/02 17:24
>>478
この場合も省略できるのか・・・
481デフォルトの名無しさん:04/05/02 17:26
外部変数の宣言で
int a;
char b[100];
とやらずに、
a;
b[100];
とやったらどうなるかを、あなたの処理系で試してみよう!
>>480
今でもそういう例あるよ、代表格が
main()
だな。
483デフォルトの名無しさん:04/05/02 17:28
>>482
それ(関数の戻り値の型)は知っている。
>>479
入力できるというのと思い通りに表示できるというのは独立しているわけだが。
trigraphは入力できない場合に使うもんだ。表示できない場合に使ってもいいが。
どっちが正しいの?

if(i == 0){
/* 省略 */
}
else{
/* 省略 */
}

------------------------------
if(i == 0)
{
/* 省略 */
}
else
{
/* 省略 */
}
>>481
intは省略できるが、charはできんぞw
487デフォルトの名無しさん:04/05/02 17:29
> 中には制御文とかの中括弧も独立させている

そういう規約つかうところもあるんだよな。あれはかなりボケ。

関数のは独立の行にして、それ以外のは開くのを前の行の後ろにつけろ。
ならいいのに、
なんでその逆?
つまり、
func(x) {
if (x)
{
....
}
}
なわけ...おいおまえだ > N社
488デフォルトの名無しさん:04/05/02 17:30
>>485
正しいの意味による。コンパイラにとっては改行は空白文字と同じ。
489デフォルトの名無しさん:04/05/02 17:30
>>485
それ以前に空白あけろよ ぼけ。
490デフォルトの名無しさん:04/05/02 17:31
関数内にn;とだけ書かれた場合のようにどう解釈すればいいのかわからない時以外は省略できるのか。
>>487
#ifdef などで区切る時に楽だからだよ、マヌケ。
492デフォルトの名無しさん:04/05/02 17:32
中括弧の位置について、
(1)カーネルスタイル
(2)オールマンスタイル
(3)ホワイトスミススタイル
みたいな代表的なものについては、
「作ってわかるCプログラミング」日下部陽一/技術評論社
にたしか説明があったな。
>>483
過去との互換性の問題なんだから
それ(関数の戻り値の型)とか、仮引数の書き方とかの
自分の中での区別はあんまり意味を持たない。
494デフォルトの名無しさん:04/05/02 17:34
>>491
逆に言うと、ifやwhileのブロックの途中で#ifや#ifdefで区切らせないためには、
カーネルスタイルの中括弧の位置がいいね。
495デフォルトの名無しさん:04/05/02 17:36
まあ、Cで書いてて、カーネルスタイルじゃないやつって、
ろくなコードかかないことが多いので、同じプロジェクトにそんなやつがいたら警戒することにしてる。

なので、そのプロジェクトのコーディング規約どおり書かせる前に、それ見せないで、
適当に小さいコードを好きなスタイルでかかせてみて検査してる ;-)
(これが実は効果大きい)
496デフォルトの名無しさん:04/05/02 17:37
カーネルスタイルって何?
497デフォルトの名無しさん:04/05/02 17:38
説明するまでもないが、
while (...) {
 ...
}
の位置のが、いわゆるカーネルスタイル(ただし関数の中括弧だけは独立させる)

そのほかの2つの代表的なのが、
whille (...)
{
 ...
}

while (...)
 {
 ...
 }
だ。
>>494
#if 0
if (a) {
#else
if (a && b) {
#endif
とかされると{が対応つかんようになるんだよ。
と言っても漏れもif()とかの{を独立に書かれるのはイヤなんだが。
499496:04/05/02 17:39
whileの後と閉じ括弧の後に空白を入れるのがカーネルスタイルか。
じゃあ俺は違うな。
500デフォルトの名無しさん:04/05/02 17:40
>>497
オールマンスタイルやホワイトスミススタイルのやつって、
まだセンスもスキルもない時代に、コボラーのおじさん的ノリのプロジェクトに
放り込まれて、そこのコーディング規約に慣れたやつに多い。

もしくは、へんな入門書で独学したやつ。

どっちにしろセンスないやつであることが多いので、
判別する目安になるな。
>>489
お前は無意味なコーディングスタイルについてしか
語れないカス。
502デフォルトの名無しさん:04/05/02 17:41
> whileの後と閉じ括弧の後に空白を入れるのがカーネルスタイルか。

いや、そうではなく中括弧の位置の話だ。

whileの後なんかは、どんなスタイルでも常識的に空白いれるぞ。
入れないのはかなりのボケ
503デフォルトの名無しさん:04/05/02 17:42
GNUのtailのソース(tail.c)が↓だな。

while (...)
 {
 ...
 }
504デフォルトの名無しさん:04/05/02 17:43
だね。
その昔、Bourne Shellのソースみて、「すんげーみづらい」って思った。
505デフォルトの名無しさん:04/05/02 17:43
連休向きな話題ばかりだなあ ;)
506デフォルトの名無しさん:04/05/02 17:44
for の中身どう書いてる?
(i=0;i<10*s+5;i++)
(i=0; i<10*s+5; i++)
(i = 0; i < 100*s + 5; i++)
(i = 0; i < 100 * s + 5; i++)
507デフォルトの名無しさん:04/05/02 17:47
>>506
条件部分で計算するな、バカ。
>505
プログラマはひさしぶりに休みもらうと
家で何したらいいかわからんのだよ
とりあえず、やることないから2ch
そしたプ板へ・・・
509デフォルトの名無しさん:04/05/02 17:48
プ板はプロレス板
510デフォルトの名無しさん:04/05/02 17:48
狭義のカーネルスタイルではなくても、
インディアンヒルのスタイルや
GNUのスタイルなら許す。
511デフォルトの名無しさん:04/05/02 17:49
GNUのは広義のカーネルスタイルでもないだろ > 中括弧位置
関数名の後ろも空白あけちゃうし
512デフォルトの名無しさん:04/05/02 17:50
>>506
どれでもない
for (i = 0; i < 100 * s + 5; i++) { <--このスペイシングが常識
513デフォルトの名無しさん:04/05/02 17:50
>>512
セミコロンの前にスペースを入れろよぼけ
514デフォルトの名無しさん:04/05/02 17:51
いれるなよ! ぼけ > 513

セミコロンの前やカンマの前に空白いれるぼけは いってよし!
515デフォルトの名無しさん:04/05/02 17:52
->と.の両側に空白を入れる奴は逝ってよし
516デフォルトの名無しさん:04/05/02 17:52
>>514
そんな常識をうれしそうに語るなよ。
カンマ、セミコロンの前はかならず空白を「あけない」、
後ろは(行末じゃないかぎり)かならず1つだけ「あける」のは、Cじゃなくても常識。
517デフォルトの名無しさん:04/05/02 17:53
>>515
「2項演算子の両側には空白をあける」のですが、
その例外が「.」と「->」以外にもあります、さて何かわかりますか?
518デフォルトの名無しさん:04/05/02 17:54
>>517
添え字
519デフォルトの名無しさん:04/05/02 17:54
添字は演算子ではない
520デフォルトの名無しさん:04/05/02 17:55
>>519
添え字演算子
[]←のこと?これって演算子だよね
コーディングスタイルで常識とか拘っちゃうPGは使えない香具師が多い。
プロジェクトでも間違いなく癌になってる。
523デフォルトの名無しさん:04/05/02 17:56

#define begine {
#define end }

524520:04/05/02 17:56
>>521
多分添え字(a[1]の1)は項だと言いたいのだろう。
525デフォルトの名無しさん:04/05/02 17:59
> コーディングスタイルで常識とか拘っちゃうPGは

それ以前に「PG」とか言う用語使うやつは、はっきりいって使えない。
ちょっと前のレスで
return (0);
の括弧を付ける付けないとかあったけど
初心者はexit()関数と混同しちゃうんだよね。
ちなみにおれはすべて同じスタイルで統一されていれば
全然問題ないと思うけどな〜
527デフォルトの名無しさん:04/05/02 18:00
>>524
で、そのほかには?
528デフォルトの名無しさん:04/05/02 18:00
>>523はおおぼけ。2つも誤りを含んでいる。
529デフォルトの名無しさん:04/05/02 18:01
#define biginn {
#define enndo ;}
530デフォルトの名無しさん:04/05/02 18:02
returnの値すべてにカッコつけるのは、昔のvoid氏のクセ、
そのあたりからひろまったのかも。
彼の本は全体的にすごくまともなコーディングスタイルなのに、そこだけ変なのよね.
(まあ、1箇所ぐらいクセがあったほうがかわいいが)
531デフォルトの名無しさん:04/05/02 18:02
>>527
さあ?
俺は+でも||でも空白は入れないが。
532デフォルトの名無しさん:04/05/02 18:03
>>531
おまえにはきいていない。
533デフォルトの名無しさん:04/05/02 18:03
>>532
じゃあ>>527の「>>524」はどういう意味だ?
534デフォルトの名無しさん:04/05/02 18:03
カンマ演算子も2項演算子だろ
535デフォルトの名無しさん:04/05/02 18:04
>>534
ほかにもあるよん > 例外
536デフォルトの名無しさん:04/05/02 18:04
>>530
おまえの方がかわいいよ。
537デフォルトの名無しさん:04/05/02 18:04
>>533
527を書いたのはおれじゃない。
自覚してたのか orz
539デフォルトの名無しさん:04/05/02 18:06
sizeofは単項演算子だよな??
540539:04/05/02 18:06
じゃなくてキャスト(汗
541デフォルトの名無しさん:04/05/02 18:10
関数の呼び出しかな。
無駄にスレ消費させないで、最初から答えと理由を書けよ
そもそもCは曖昧な定義ばかりあるからこんなくだらん論争が続くんだよ。
sizeof演算子だって本来()はいらないけど、型の場合は()がいるとか
中途半端な制約だし。強制的に()が必要にすればいいことなのに
なんでこんな糞仕様にしたんだか・・・
544デフォルトの名無しさん:04/05/02 18:39
getchar() で標準入力から文字を読み込むとき
EOFを読み込んだ後も getchar() を使い続けてもよいのでしょうか?
OSによっては、問題がおきますか?

/* mytest.c */
#include <stdio.h>
int main()
{
int ch, i;

while ((ch = getchar()) != EOF)
putchar(ch);

for (i = 0; i < 1000; ++i)
ch = getchar();

return 0;
}


C:\>bcc32 mytest.c
C:\>.\mytest < mytest.c
一度EOFしたらそれ以降EOFしか返らないだろ
>>543
いまさらCの糞仕様っぷりに突っ込む奴はド素人
そう、Cを使うためには
俺のような海よりも広い心をもってないと話にならない
そう、Cを使うためには
俺のような宇宙と同じくらい広い心をもってないと話にならない
549デフォルトの名無しさん:04/05/02 18:52
漏れの心は無限へ広がっているがな。
割り切れんの?たかが一つの言語
駄目だ。これからC勉強しようと思ったけど
上のレスみてたらやる気なくなった・・・
やっぱこれからはJAVAでしょう!
>>550
>>551

おまいらはこのスレこないでください。
553sage:04/05/02 19:15
>>545
ありがとうございます。
554550:04/05/02 20:00
俺が言いたいことは>>547がいってくれた
555デフォルトの名無しさん:04/05/02 22:18
>>543
型の場合に括弧がいるのは
型指定子が演算子の結合規則に従わないからだろ
中途半端なのは言語ではなく、あんたの理解と違うのか
sizeofの後ろに書くのは、型ではなくて型キャスト
>555
問題の趣旨が違うくないかい?
実際、暗黙の了解でsizeof()の形式にしているのがほとんどじゃない?
()はずす事によってデメリットはあっても付けることでデメリットは
ないからな。わざわざ型だけ特別扱いせずにまとめて()で処理すれば
よいってことよ。
561デフォルトの名無しさん:04/05/02 23:04
>>560
付ける必要がないことを知らないのだと思われるデメリットがある。
562デフォルトの名無しさん:04/05/02 23:24
>>560
おまえらの無知を庇う以外のメリットはない
チーム全体の足手まといを早く自覚しろ穀潰しども
連休中はレベル低すぎだな。
オマエモナー
なんかスレ違いなやつらがたくさん沸いてますね
オマエモナー
今、友達と電話で話してたんだけど
「お前そんなこと本気で心配してんの?プゲラ」と言ってしまった。
2ちゃんしばらくやめます。さよなら。

>562
悪いけどお前よりずっとプログラムかける自信あるけど?
569デフォルトの名無しさん:04/05/03 00:25
>>568
ドスの効かねえ喚きぶりで恥の上塗りか
掃いて捨てるほど型どおりのヒヨッ子だな
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| 電波を感知しました。 |
|__________|
              / /
              /
      _         ビビビ
     /||__|∧    /
  。.|.(O´∀`) /
  |≡( ))  ))つ
  `ー| | |
    (__)_)
>>568
お前、文の最期にボケってかいて
ドスを聞かせてるつもりなの?
うざいから帰っていいよ。
572571:04/05/03 00:42
>>569ね。
>568
教養を感じさせない文ですね(笑
575gets房:04/05/03 01:21
みんなC言語ごときで喧嘩はやめろよ!!
時代はBasicなんだよ!!
    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    | あなたは十年後にもきっと、せめて十年でいいから戻って
    | やり直したいと思っていますよ。
    | 今やり直してください。 未来を。
    | 十年後か、二十年後か、五十年後から戻ってきたんですよ、今。
    \
       ̄ ̄ ̄ ̄|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           .|/
          .∧_∧
   ∧ ∧    (・∀・ )
Σ (; ゚Д゚).__( ⊂  )
  (つ_つ__ ̄ ̄ ̄ ̄
 ̄\| VAIO |  ̄∇日 ̄ ̄\
   =======    ̄       \
577568:04/05/03 01:31
おまえ達が感じている感情は精神的嫉妬の一種だ、全てのコードを俺は知っている
オレニマカセロ
>>577
ご冥福をお祈りします
>>578
Del厨氏ね
>>579
ネタの解説を求む
FAQ並なやつでいいから普通の質問を待ってるのは俺だけじゃないはず。
>>580
少し下にあるスレッドくらい読め
うわぁすごいじこちゅう
>>582
せんせぇ、何が言いたいのか理解できません!
Del厨は馬鹿ばかりだな
いくらGWつってもひどすぎないか?
また何かとGWと結び付けたがる房が来たか・・・
>>587
そっとしておけよ。
普段は時間帯がバラバラで馬鹿の出現が重なることは少なかったが、
GWで時間に余裕が出来て馬鹿が結集し、馬鹿が濃くなっただけ。
そんな力説しなくていいから
>>589
君もその馬鹿の一人なんだから
↑馬鹿出現。
↓こいつも馬鹿
↑こいつも馬鹿
ちゃんねらなんて大抵馬鹿だよ
←こいつは馬鹿?
>>1から読んでみるとGWのせいではないことがよく分かる。
↓こいつも馬鹿
│     _、_
│  ヽ( ,_ノ`)ノ 残念 そいつは私のおいなりさんだ
│ へノ   /
└→ ω ノ
      >  
↓↑ = ハイジャンプ
↑ハイジャンプ馬鹿
602デフォルトの名無しさん:04/05/03 03:40
ABAB
603デフォルトの名無しさん:04/05/03 03:42
C99に対応した製品はMicrosoftから出てないんですか?
Microsoftに聞いてください
一応スレタイは(ry
606デフォルトの名無しさん:04/05/03 04:11
VC++ 6.0では「//」形式のコメントも使えるし、
改行コードがLFだけのソースファイルでも平気だと聞きましたが、
それらの両方を使うとダメらしいです。
本当ですか?

Windows用のCコンパイラーでcoolなのはいまなんでしょうか?
>>606
いまなんです。
608デフォルトの名無しさん:04/05/03 08:33
>>606
本当かどうか自分で試せないのか?
下手の道具選びとはよく言ったものだ
SHOW-Aは、どこへ行ったのですか?
610デフォルトの名無しさん:04/05/03 10:26
> 本当かどうか自分で試せないのか?

試せてたら質問しないだろうに。
(私も持ってないので試せないので答えられないが)
611山本五十六:04/05/03 10:26
C言語使う奴は低脳
612デフォルトの名無しさん:04/05/03 10:35
そんな言語はありません。
>>609
わろた。俺もちょと気になる。
614デフォルトの名無しさん:04/05/03 12:06
「#include」の後ろに空白あけないのは、
どのあたりで増えたんだろ。きっと何かぼけな本が流行らせたんだと思うが...。
(日本でしか見かけないし)
615デフォルトの名無しさん:04/05/03 12:08
616デフォルトの名無しさん:04/05/03 12:11
ブレイスの位置とインデントですが、古くはカーネルスタイルと言ってたやつ、
いまでは「K&R」スタイルってのがそうですかね?
で、これは
while (...) {
 ...
}
ってやつなんですが、これの場合、elseはどうしてます?
if (...) {
 ...
} else {
 ...
}

if (...) {
 ...
}
else {
 ...
}
は、どっちが普通なのかしらん?
またコーディングスタイルの話か
618デフォルトの名無しさん:04/05/03 12:17
そそ
連休の話題といえばそれでしょ
619デフォルトの名無しさん:04/05/03 12:19
だね。
コーディングスタイルといっても、変数の名前の付け方や、整数の扱いやその他いろいろ
あるが、その中でも、インデントとスペイシングと中括弧の位置などの「みばえ」の
部分は、たしかに連休向きだね。
620デフォルトの名無しさん:04/05/03 12:20
くだらん質問で申し訳無いが、
呼び出した関数の履歴(ヒエラルキ)が
GUI的にわかるフリーのツールない?

↓こんな風に表示される

a()->b()-+->c()
-->d()

で、c()をクリックすると、c.cが開いて、
c()のところに飛んでくれるみたいな。
>>620
俺もほしいぞ
>>620
Visual Studioでできる。
Visual Studio ってフリーd(ry
624デフォルトの名無しさん:04/05/03 12:47
表示するならBSDならcalltreeコマンドだな。

たどりたいなら、viでcontrol+] すればいい
>>616
おれは最初に習ったのがCOBOLだったんで、
IFとELSEは対応してるっつー考えが染み込んでしまって
if (){
}
else{
}
とやってしまう。
626デフォルトの名無しさん:04/05/03 12:59
>>625
空白あけろよぼけ
>>625
626にエサをやらないでください
if(i == 0)
(とiが、0と)がセットみたいでいや。
if( i == 0 ) か if(i==0) がいい。

hoge(0, 3, 5);
自転車の片方補助輪みたいでいや。
hoge( 0 , 3 , 5 ); か hoge(0,3,5); がいい。

なんて言ったら怒られそう。
何が言いたいのかさっぱりだ。
翻訳キボソヌ
コーディング規約 第2条
http://pc5.2ch.net/test/read.cgi/tech/1068752664/l50
こんな書き方ってどう思います?以前働いた所の
コーディングスタイルなんですが。

static int
func_add(
int a;
int *b;
double c;
)
{
 /* 関数の中身 */
}
コンパイル通らないだろそれ。
634632:04/05/03 14:00
訂正

static int
func_add(
int a,
int *b,
double c
)
{
 /* 関数の中身 */
}
scanfを使うと改行を入力したらおかしくなるんですがどうにかなりませんか?
一言でscanf()を使うといっても、色々な使い方があるし。
http://www9.plala.or.jp/sgwr-t/c/sec05.html#s5-4
これの事かな?
にわかなモンで間違ってたらスマソ
int x, y;
char buf[1024];

fgets(buf, sizeof buf, stdin);
if (sscanf(buf, "%d%d", &x, &y) != 2) 〜〜〜〜〜;
>>634
そのコーディングスタイルは関数の検索にgrep使うお馬鹿さんが好んで使うスタイルだな。
恥かくからあまり他所では使わないほうがいいよ。
grepてなーに?
便利なテキスト検索ツール。
使いこなせない人はプログラマとしては猫以下。
642デフォルトの名無しさん:04/05/03 16:56
>>632
無駄に行数を増やしたいならいいかも。
643デフォルトの名無しさん:04/05/03 17:02
JIS-Cの企画書ってオンラインかつ無料で手に入ります?
644デフォルトの名無しさん:04/05/03 17:02
>>643
知っていて聞いているだろ?
>>641
dクス
そんなのも必要なんだねぇ…難しいなぁ
>>641
にゃあ?
647デフォルトの名無しさん:04/05/03 17:17
>検索にgrep使うお馬鹿さんが

なぜおばかなんですか?

>使いこなせない人はプログラマとしては猫以下。



検索以外の機能でgrepは有用だということですか?
648デフォルトの名無しさん:04/05/03 17:22
関数の検索に
grepのためにそんなミョウチキリンな規約を強要しているのなら、DQNってことだ。
そりゃツールのために定型スタイルに沿ってコーディングするのが悪いというわけではない。javadocとかな。
だが、ツールのために、規約があまりにも歪むようでは本末転倒。過ぎたるはうんこ。
grep検索のためだったの?
おれはてっきり引数の数が多くなるとわかりにくくなるから
>634みたいなスタイルにしていると思ってた。
旧式のスタイルの呪縛という気もするな、
f(a, b, c)
int a,
int b
char c
{

}

みたいなやつ
652デフォルトの名無しさん:04/05/03 17:59
関数名の前で改行しているのが何よりもきもい。
引数を行分けては書かないけど、関数名を頭に持っていくというのは
やってる。正規表現検索できるエディタなら「^func_add」で一発jump
できるから。

もちろん関数リスト出せるGUIなエディタとかならそんなの必要ないと
いう話もあるけど、商用Unixで低機能なvi使う事が多いんで、Cで書く
時はもうそう書くのが癖になっちまってる。

もっととも人に勧めたり強制するつもりはさらさらないけど。
>>650
パラメータにそれぞれコメント書くために>>634みたいに書いてたことがあった。
けど、当時使ってたエディタ(つかctags)でタグジャンプできなくなったので、すぐにやめたw
ここって質問しにくいふいんきが漂ってるなあ。
656デフォルトの名無しさん:04/05/03 18:42
厨な質問で申し訳ないんですが、時々中括弧“{,}”をマクロで
BEGINとかENDに置き換える奴を嘲笑するスレってあると思うんですが、
あの嘲笑には合理的な理由があるんでしょうか?

それともCの世界のジャーゴンに馴染めない奴を村八分的に笑っているだけ?

正直、C#とかでコード書いてると、中括弧の可読性の悪さにいらついて
しょうがないんですが。
そこまでしてCを使わなくてもいいんじゃねーの?
仕事でどうしてもCを使うなら、そんなプロジェクトチームを混乱させるような所業はもってのほかだし。
>>656
どのブロックの表記がわかりやすいかの議論は確かにあるけど
Cでは{}を使うことになっている。
その決まりを曲げてまでBEGIN/ENDにする意味はないってこと。
ブロックに限らず明確で大きなメリットがない限りは(デファクト)スタンダードにあわせるのが筋。
自分がなれているという理由だけで他の言語等のルールを持ち込むのは迷惑。
659デフォルトの名無しさん:04/05/03 18:51
>>651
旧式を知らない若造(もしくは当時バカガキの成れの果て)が
訳知り顔で語ってんじゃねえよ

隙だらけだぜ? てめーのコード
660デフォルトの名無しさん:04/05/03 18:52
>自分がなれているという理由だけで他の言語等のルールを持ち込むのは迷惑。

んだ、これにつきる
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| 電波を感知しました。 |
|__________|
              / /
              /
      _         ビビビ
     /||__|∧    /
  。.|.(O´∀`) /
  |≡( ))  ))つ
  `ー| | |
    (__)_)
662656:04/05/03 19:03
>>658
デファクトスタンダードに従え、ってのは一見理があるようにも思えますが
私は非論理的だと思いますね。

コード中の“}”をみて、いったいどのブロックの終端を表しているのか
パッとわからずにいらいらしたり、“}”の非明示性から勘違いによるバグを
発生させた経験はCでコードを書いてる人なら誰でも少なからずあるはず。

要するにこの表記法には明らかな弊害がある。

一方、たとえば“}”を替わりに“EndIf”“EndFor”“EndFunction”
などと表記した場合、上記の弊害はかなりの程度抑制できる。
それでいてこういう表記法が何か新たな弊害を生むか、と言えば
少なくとも私はそうは思えない。

EndIfという表記を見て、これがIfブロックの終端を表すことが分からない
プログラマなんて果たしているでしょうか?
>>659
だから、「みたいなやつ」ってかいてあんじゃんか。
>>662
ま、そんなことしたらエディタの支援が受けられなくなるわけで。
括弧の対応なんざインデントでもわかるしな。

どのレベルまでインデントしたかわからなくなってしまうようなコードは、
それはそんなに深くインデントするようなクソなコードを書いた方が悪いんだしw
>>662
複数ネストしてたら結局その部分はカバーできない。
というか、インデントによって対応を明示する慣習で解決してるんだが。
666デフォルトの名無しさん:04/05/03 19:10
>>662
何言ってんだよ。そんなのインデントすれば済むことだろ?
逆にインデント無茶苦茶でもEndIfなら読みやすいとでも思っているのか??
仮にあなたがそう思っているとして、周りの声に耳を貸す気はあるか???
議論を始める前の目的意識から間違ってて論理もクソもあるかよ。
インデント三兄弟?
どうでもいい
char *begin = v, *end = v + size;
こういうコードがあったとして、あとから来た奴がbegin/end置き換えマクロを使うとどうなる?
個人で完結していて後から誰も触らないならどんなマクロも自由に使えばいいだろう。

begin/endはままあるけど、endif/endforなんてのは誰も上げない。
つまりは{}の置き換えに可読性の向上といった意味はない。
自分の流儀に合わせようという姿勢しかないだろ?

だいたい、すぐわからないのはインデントが統一されてない
糞コードを書いてる証拠なわけだ。

長文反論のヨカーン
そんな変則的な書き方を嫌うやつが多い。
それがすべてだろ。
>>669
>個人で完結していて後から誰も触らないならどんなマクロも自由に使えばいいだろう。

と思ってbourneさんはshをそのように書いてしまって、
後々までメンテが悪夢のようになるという害悪と垂れ流してしまった。

いやね、EndIfとかがわかりやすくていいというのなら、
それはそういうのがある別の言語でやって欲しいっす。
たしかVBってそうじゃなかったっけ。

あとshならcaseを閉じるのはesacだし、ifを閉じるのはfiだ。
>>672
まー、人に見せる時点でリライトしろと
674656:04/05/03 19:25
いや、きちんと“{”(またはブロックの最初の予約語)と“}”が対応するように
インデントをする、っていうのは当然自明の前提で言ってますよ。

もちろん、ちゃんとインデントで対応さえつけていれば、8割がた迷ったり
混同したり、ってことはないのは認めます。(それでも、「余分なことに脳のパワーを
とられている感」はやっぱり残りますが。いや、それはおまえの頭の性能のせい、って言われれば
これはそれまでですが・・・・・・。)

でも残りの2割の、パッとみて対応関係がわからないようなコードにおける弊害は
やっぱり気になるし、私はそれは”}”をもっと明示的な表現で置き換えることで
こうした弊害は回避できると思うのに、なんかこういうのが馬鹿にされるような
空気があるから、その「空気」には本当に合理的な理由があるのか、それともやっぱり
単なる空気に過ぎないのか、知りたいと思って質問させてもらってるわけです。
リクツで考えちゃダメなんだよ。プログラマの悪いところだ。
つーか、リクツですら筋が通っていないがな。
まわりに合わせるのが一番なんだよ、少なくともこれに限ってはね。
Win32APIのハンガリアンもどきとか、上で出ているshとか、使ったことあればわかるっしょ。
Gameでも個人的に作るだけってんなら、好きにしていいけど。

>656
英米圏の人が書いたコード見たことあるだろ?ぱっと見
全てアルファベットでどこがコメントかどかがソースか見分けづらい。
その点、日本人は日本語でコメントかけるからコメントとソースの
判別がしやすい。それと一緒で{}記号も十分にブロックの終端を示す
役割は果たせてると思うぞ。
>>674
パッと見て対応関係が分からないコードなら、どうしたって見通しは悪いぞ。
for (...)
Begin
 if (...)
 Begin
  ...;
EndFor

コンパイルエラー出ないぞ
679デフォルトの名無しさん:04/05/03 19:35
>>674
インデントで整理できない残りの2割って何だよ?
巨大関数か?? それはロジックが組めない未熟のせいであって、言語が何であろうが関係ないぞ。
"正しく"コンパイルエラーで無いぞ、だな。
>>676
さすがにコメントについての意見は賛同しかねる
エディタで色分けするべきだから
>681
賛同も何もあくまで例えで言っているわけで・・・
684656:04/05/03 20:08
>>679
整理できない、なんていってません。
ぱっと見て対応関係がわからないコードがある、といっているんです。

いや、なんか「どんな処理でも可読性を保ちつつ、
かつコンパクトな関数に落としこめるはずだ」とか思ってる人がいますが、
現実には必ずしもそんなことはないんですよ。(もちろん、イージーなことばっか
やってれば、それはその限りにおいてはそのとおりでしょうが。)

具体的にどんなだよ、ってことなら、例えば私はWindows DDKのUSB関係の
コードつついてるんですが、こういうののコード見てもらうと私の言ってることを
体感してもらえると思うんですけど。(もちろん、こういうのの把握能力が超絶してる
人にとっては、なんてことないのかもしれませんが、標準的な頭の性能の人にとっては
結構キツイ場合がある、といっているわけでして。)
>>656
>“}”の非明示性から勘違いによるバグは誰でも少なからずあるはず。
ブロックで囲まなかったことによるif-elseの対応関係ミスのバグはありうるが、
ブロックで囲むことによる弊害は聞いたことが無い。インデントですべて解決する。

>一方、たとえば“}”を替わりに“EndIf”“EndFor”“EndFunction”
>などと表記した場合、上記の弊害はかなりの程度抑制できる。
C言語にはif文用の{}やfor文用の{}があるわけではなく、
これらは複文とかブロックとかcompound statementとか呼ばれる文を一まとめにするものである。

>それでいてこういう表記法が何か新たな弊害を生むか
生む。山のように文法が増える。
構造体・共用体・列挙体・関数定義・while・do-while・for・if・else・else if・switch
これら全部に別の名前を付けるのは煩雑以外の何者でもない。
(同じ傾向のものでまとめたところでさして変わりはしない)
かつ、以下のような文はどう記述するのか?
int main(void)
{
  int i;
  {
   int i;
   ...
  }
  ...
}
より分かりにくくなるだけではないか。
686デフォルトの名無しさん:04/05/03 20:10
>>684
そのWindows DDKのUSB関係のコードはBEGIN,ENDマクロを使えば見やすくなるのか?
>681
お前は俺と同じでくだらないことにつっこむのが好きみたいだな
俺も同じようにつっこませてもらうが日本語翻訳無しのC本で
コメントにわざわざ色分けしているやつがあるなら教えてくれ。
皆が皆お前が思っているような環境ばかりじゃないんだよ。
>>687
ISO/IEC 9899:1999はコメントが斜体になっていて見やすいが?

>皆が皆お前が思っているような環境ばかりじゃないんだよ。
クロスコンパイラ使えよ。それが嫌ならviでも使ってろ。
言語やコードに求めるものと、エディタに求めるものは明確に区別するべき。
>>684
ソースは全て手書き、コードジェネレータなんて触った事もないって人間なんだろうな。
今作ってるプログラム。少しおかしな動きをする、理由が分かる人、助けてくれまいか
とりあえず前戯省略。

char filename[60]
main(){
gets(filename);
file_open();
}
file_open(){
FILE *fp;
fp = fopen(filename, "r");
fclose(fp);
}

動作
出来上がったファイルをクリックして実行
 ファイルあり→そのまま終了
 ファイルなし→メモリがread...とかいうエラー
コマンドプロンプトから実行
 ファイル有無に関わらずメモリがreadに云々言われる

環境はWin2kです
ファイル名をグローバル変数に格納したうえ完璧に動くようにするにはどうすればよろしいでしょうか
691デフォルトの名無しさん:04/05/03 20:20
コードジェネレータがはいたコードは人間の見るものじゃないだろ
括弧の対応はエディタに求めるべきではない、と。
693デフォルトの名無しさん:04/05/03 20:21
>>690
ネタ?
fopenの戻り値を確認してfcloseしろ。
なんか日本語を良く分かってない連中がウヨウヨいるな。
676氏の言う”例え”の意味わかっているんだろうか・・・
おまえもな
>>693
あー、すみまそん。。。ネタじゃないです
かなり省略気味に書いたんです
実際は

if((fp=fopen(filename, "r")) == NULL){
printf("File not found");
fclose(fp);
return 1;
} else {
fclose(fp);
return 0;

というコードなんですが、それでも同じ条件で落ちちゃうんです・・・
もしかしてfile not found の後のfcloseが要らないって事ですか?
open出来てないのにcloseするな
698デフォルトの名無しさん:04/05/03 20:28
>>696
それじゃ結局fcloseを呼んでいるだろ。

> もしかしてfile not found の後のfcloseが要らないって事ですか?
当然。
要らないというか呼んではいけない。
fclose関数はNULLチェックやってくれません。
>>693
>>697
>>698

ありがとう、ご迷惑おかけしました
701656:04/05/03 20:35
>>685
そういう All or Notingの議論はしていません。
宗教じゃないんだから、XXを原理主義的な規範とすべきだなどどは言ってません。

そうではなく、まったく逆に、つまらない「掟」に縛られることなく、
柔軟に、目的合理的に手段を選択すべきではないのか?、といいたいのです。

つまり早い話が、{}の置き換えが可読性に資する場面ではそれを使うべきだし
そうでなければ当然使うべきでない、そういう柔軟性が必要では?、と。

>>686
場合によっては、Yes。(実践してます)
>>701
各々が俺ルールに従って好き勝手に日本語を改変して喋りまくったら
円滑なコミュニケーションがとれないだろ。
それにあんたが思うほどbegin, endは{, }よりも合理的とは言えないよ。
開発効率はそれとはもっと捌の部分に左右されるということが
もうすこし(トータル49万行くらい)コードを書いていくと分かると思うよ。
>701
ワロタ。とりあえず、貴方がそうしたいなら同じプロジェクトのメンバー説得して
そのようにやればいいんじゃないの?(説得できるなら)
ただ、おれの知る限りNもFもHもSもそういうコーディングスタイルは
認めないと思うよ(笑
>656
“EndIf”“EndFor”“EndFunction”が可読性を高めるのなら
テキストエディタで開いたVBのコードは可読性が高いんかな?
VBで可読性が高いコードもあるが、そうなっているから可読性が高いというのは見たことがない

所詮コードの可読性なんて文法(中括弧の置き換え含む)ではなくて書き方(インデントの仕方とか)や
アルゴリズム(適切なコード分けを含む)だと思うんだが

一番見たくないのはインデントがないとかでたらめなコード
awkなどのスクリプト言語で処理するには便利でいいんだけどな。<EndFunction
ソースから設計書を生成するのに掛かる手間が結構違ったよ。
単に可読性あげるだけならいろいろ方法あると思うけど。
どうしても、長いソース書いてしまって、終端が分かりづらいなら
終端にコメント加えればいいし。
>>706
だからと言って、そういうコードを書くような香具師に限って
while () {



} /* end for */
なんて書きかねない罠。
処理系支援のない構文糖は害悪でしかないよな。
709デフォルトの名無しさん:04/05/03 21:02
>>628
> if(i == 0)
> (とiが、0と)がセットみたいでいや。
> if( i == 0 ) か if(i==0) がいい。

っていうか、それ以前に「if」の後があいてないからそんなことになるんだろ ぼけ
710デフォルトの名無しさん:04/05/03 21:06
>>635
> scanfを使うと改行を入力したらおかしくなるんですがどうにかなりませんか?

っていうか、使うな > scanf

使うやつはバカ
711656:04/05/03 21:06
大漁だな。馬鹿ばっか(禿藁
>>709
この人そればっか。
713デフォルトの名無しさん:04/05/03 21:10
>>649
> grepのためにそんなミョウチキリンな規約を強要しているのなら、DQNってことだ。

逆だろ。関数定義の先頭を検索するためだったら、むしろ引数は一緒の行に書いたほうが
便利じゃん。

わざわざ引数を別の行に1つずつ書くのは、後ろにコメントつけたいやつがやることだろ。
それぐらい常識
>>712
そこで終わってる人なんですよ…
憐れなものです。
715デフォルトの名無しさん:04/05/03 21:12
> もちろん関数リスト出せるGUIなエディタとかならそんなの必要ないと
> いう話もあるけど、商用Unixで低機能なvi使う事が多いんで、Cで書く
> 時はもうそう書くのが癖になっちまってる。

こいつ、viの使い方もろくにわかっていないぼけ
手抜きで使う分には何も問題ないだろう>scanf

つーか、使うなっていうのは不特定の人間に使わせるアプリケーションに
使うなとかいう意味であって、scanf自体が悪ってわけじゃない。

たまに宿題スレとかでいちいちscanfに突っ込む奴も居るが
こいつらの方が何も考えずに喚いてるだけに見えるわけだよ。
ctagsあんま好きじゃない
find と grep の方がすき
何か暗いことやってんなおまいら
たまには外に出ようよ
719デフォルトの名無しさん:04/05/03 21:16
>>672
> あとshならcaseを閉じるのはesacだし、ifを閉じるのはfiだ。

じゃあoknamを閉じるのは?
720デフォルトの名無しさん:04/05/03 21:17
> またはブロックの最初の予約語

Cには「予約語」などありません。
721デフォルトの名無しさん:04/05/03 21:20
>>690

> gets(filename);

getsつかうなよぼけ

> fp = fopen(filename, "r");

エラーチェックしろよぼけ

なんでおれがつかうなっていうものばかり使うんだ? ぼけは
722デフォルトの名無しさん:04/05/03 21:21
> if((fp=fopen(filename, "r")) == NULL){

空白あけろよぼけ。
たいがいボケなことやってるやつは、ここに空白をあけない
723デフォルトの名無しさん:04/05/03 21:22
> 使うなとかいう意味であって、scanf自体が悪ってわけじゃない。

いーやscanf自体が悪い。
そこがわかってないからおまえはぼけなんだ。
724デフォルトの名無しさん:04/05/03 21:23
空 白 あ け ろ よ ぼ け 。
た い が い ボ ケ な こ と や っ て る や つ は 、 こ こ に 空 白 を あ け な い
725デフォルトの名無しさん:04/05/03 21:24
>>724
へんな空白禁止
ふつうの空白にしろ
726デフォルトの名無しさん:04/05/03 21:26
scanf自体がわるいのにそれをわかってないぼけが
「手抜きでつかう分にはいいだろ」とかいってたが、そのせりふがそもそもぼけ

たとえば「テストでちょっと書くだけのコードだからforなんてつかわなくても
同じことをgotoで書いてもいいだろ」って言ってるのとなんらかわらないことに
気づいていない。

かえってややこしくなるだけなのにね。
scanfで質問してるぼけは、みんなそういうやつばかりだ。

つまりscanfの出番は 100%ない。
gotoの出番なら0.01%ぐらいどこかに残ってるかもしれないが。

なのにscsnfの出番があると信じているやつは、
はっきりいってぼけ。ろくな本読まなかったんだろうね。
>gotoの出番なら0.01%ぐらいどこかに残ってるかもしれないが。
プ
728デフォルトの名無しさん:04/05/03 21:28
caseのインデント位置は
switchに合わせろ ぼけ。
批判するときは理由を書けよ。
理由を書かないから頭が悪いって思われるんだ。
なんか熱弁振るってるようですが、言ってる内容がそれじゃあねえ…
プログラマとして閉経して更年期障害おこしてるかわいそうな人ですね…
初潮もまだなのに大人ぶってるだけでしょう
732デフォルトの名無しさん:04/05/03 21:32
> 批判するときは理由を書けよ

だれも批判などしてないのでは?

こういうのは批判だけど > 批判するときは理由を書けよ
    あ、 も
さ            り    あ
                      が
                          っ
                             て
 
     た                        ま
                         い
       し            り
           ま
734デフォルトの名無しさん:04/05/03 21:34
さて問題です。
Cのキーワードは全部で何種類あるでしょう? > 知ったかぶり君
735デフォルトの名無しさん:04/05/03 21:34
0
256コくらいかな
いつのCですか?>>>734
>>734
それは39056442ペイジに書いてありますね。
739デフォルトの名無しさん:04/05/03 21:35
5個
740デフォルトの名無しさん:04/05/03 21:35
>>723
いーや、おまえは頭が悪い。
そこがわかってないからおまえはぼけなんだ。
741デフォルトの名無しさん:04/05/03 21:36
神様はもっと切りのいい数にするはずだから、
32個!
>>732
日本語を勉強し直して来い。
743デフォルトの名無しさん:04/05/03 21:37
今のCです
744デフォルトの名無しさん:04/05/03 21:39
>>726
おまえの頭がわるいのにそれをわかってないぼけが
「手抜きでつかう分にはいいだろ」とかいってたが、そのせりふがそもそもぼけ

たとえば「テストでちょっと書くだけのコードだからforなんてつかわなくても
同じことをおまえに頼んでもいいだろ」って言ってるのとなんらかわらないことに
気づいていない。

かえってややこしくなるだけなのにね。 wwwwwwwwww
scanfの罵倒しかチャンスの到来しないぼけは、みんなそういうやつばかりだ。

つまりおまえの出番は 100%ない。
longjmpが使えないアフォの出番なら0.01%ぐらいどこかに残ってるかもしれないが。

なのにおまえの出番があると信じているやつは、 おまえだけ。
はっきりいってぼけ。ヤクでもキメてんだろうね。
>>744読むのめんどくさいから要約して
wwをあぼーんすると幸せになれます。
747デフォルトの名無しさん:04/05/03 21:43
>>745
むりだろ。
まともにいいかえせないので、あいてのいうことまねするのは
頭が悪いと小学校の高学年になってもやるやつがいる
(ふつうは5,6歳まで)
748デフォルトの名無しさん:04/05/03 21:43
むしろ「ぼけ」だろ。
749デフォルトの名無しさん:04/05/03 21:44
>>684
>ぱっと見て対応関係がわからないコードがある、といっているんです。

だから何なの?

while(...)
BeginWhile
/* ... */
EndIf

DDKのコードがこれで見やすくなるとでも言いたいのか?
あんた、論理ってさっき言ってたよな。気は確かか??
750デフォルトの名無しさん:04/05/03 21:44
Windowsで使えるおすすめのCのコンパイラーを教えてください。
これから入門するレベルです。
751デフォルトの名無しさん:04/05/03 21:45
> だから何なの?
> while(...)

っていうか、まず空白あけろよ ぼけ

話はそれからだ。
そこをあけてないようなやつが、何かもっともらしいこと言っても無駄。
// コンパイルエラー
while(...)
BeginWhile
/* ... */
EndIf

// 正常終了
while(...)
BeginWhile
/* ... */
EndWhile
この速さならとれる
1000!
754デフォルトの名無しさん:04/05/03 21:47
>>684
>ぱっと見て対応関係がわからないコードがある、といっているんです。

goto L2;
L1:
EndWhile
L2:
while(...)
BeginWhile
if(...)
BeginIf
goto L1;
Endif

げらげら
ボケとかバカとか言ってる奴
もしかしてちょコラたん?
こんなところにも大発生!?

もしかして、自作板やPCげー板の奴らに反論するために
Cのお勉強開始したの!?
756デフォルトの名無しさん:04/05/03 21:48
End14thIfinFunctionHogeHoge

EndFunctionItsNameIsHogeHoge

おれはいつもこうやってるな > }
758デフォルトの名無しさん:04/05/03 21:49
>>754

だからあけろよ ぼけ
>>750
空気読めてないレスキタ━━━━(゚∀゚)━━━━!!
>>2に書いてあるだろ。
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/
760デフォルトの名無しさん:04/05/03 21:50
>>759
それ、ほんとうにおすすめなんですか?
ほかにはないですか?
>>752
EndIfとEndWhileは別のものを割り当ててるのか?
たしかにそれでエラーでるなら便利かもな。
>>760
いや、言ったこと疑うならそもそもここで訊くなよ低脳。
>>760
おすすめです。
これからはsprintfは使用禁止です。
sprintf自体が悪なんです。
snprintfを使うようにしましょう。
それがない処理系を使っている人は首を釣りましょう。
765デフォルトの名無しさん:04/05/03 21:52
>>752
こらこらコンパイルエラーでは正常終了しか起こらないぞ
>>758
むしろ、開けろなどと言って啓蒙するよりもほっといた方がいいのでは?
スペースを入れるようになっただけの「ボケ」が増えたら炙り出すのが面倒になりませんか?
>>761>>765

#define BeginWhile {
#define EndWhile }
while (...)
BeginWhile
EndWhile
#undef BeginWhile
#undef EndWhile
#define BeginIf {
#define EndIf }
if (...)
BeginIf
EndIf
#undef BeginIf
#undef EndIf
#define BeginWhile {
#define EndWhile }
while (...)
BeginWhile
EndWhile
#undef BeginWhile
#undef EndWhile

可読性最高
>>767ワラタ
>>750
これは?
Microsoft Visual C++ Toolkit 2003
ttp://msdn.microsoft.com/visualc/vctoolkit2003/
770デフォルトの名無しさん:04/05/03 22:00
>>767
#define BeginWhile {
while (...)
BeginWhile
#undef BeginWhile
#define BeginIf {
if(...)
BeginIf
#undef BeginIf
#define EndIf }
EndiWhile // compile error
#undef Endif
#define EndWhile }
EndWhile
#undef EndWhile

うーん、すばらしい
>>769
nmakeがないから、bccの方が易しい
772デフォルトの名無しさん:04/05/03 22:02
>>761
#define BeginWhile {
#define BeginFor {{
#define BeginDo {{{
#define BeginIf {{{{
#define Endif }}}}
#define EndDo }}}}
#define EndFor }}
#define EndWhile }

while(...)
BeginWhile
/* ... */
Endif // compile error

これでどうだ?
773デフォルトの名無しさん:04/05/03 22:04
int a[]=BeginWhile 1,2,3,4 EndWhile;とできるのがいかんなぁ。
774デフォルトの名無しさん:04/05/03 22:05
#define BeginWhile { int statement = 1;
#define BeginFor { int statement = 2;
#define BeginDo { int statement = 3;
#define BeginIf { int statement = 4;
#define EndIf assert(statement == 4); }
#define EndDo assert(statement == 3); }
#define EndFor assert(statement == 2); }
#define EndWhile assert(statement == 1); }
#define BeginWhile {int a=0;{
#define BeginFor {int a=0;{int b=0;{
#define BeginDo {int a=0;{int b=0;{int c=0;{
#define BeginIf {int a=0;{int b=0;{int c=0;{int d=0;{
#define Endif }d=1;}c=1;}b=1;}a=1;}
#define EndDo }c=1;}b=1;}a=1;}
#define EndFor }b=1;}a=1;}
#define EndWhile }a=1;}

これならどうだ
>>772
まいった。でももうお腹いっぱい。
777げと
778685:04/05/03 22:09
>>701
>そうではなく、まったく逆に、つまらない「掟」に縛られることなく、
>柔軟に、目的合理的に手段を選択すべきではないのか?
はっきり言うとね、言語仕様って言うのはねうちらよりもはるかに優秀なプログラマが
うちらよりもはるかに長い時間議論をして、はるかに長い間テストされてきた結果なのよ。
でね、私の反論はそれを踏まえて「合理的な理由が無い」って言っているのですよ。
つまりね、「合理的な手段を選択した結果、Endifはいらない」ってことなのですよ。
厨ってなにかと「括弧」で囲みたがるよね。
780デフォルトの名無しさん:04/05/03 22:10
>>778
>でね、私の反論はそれを踏まえて「合理的な理由が無い」って言っているのですよ。

虎の意を狩る狐だな。興ざめ
781デフォルトの名無しさん:04/05/03 22:11
>>780
IMEのばかぁ〜
s/意/威/
s/狩/借/
sizeof (((((((((((((((((T_T))))))))))))))))))))
>>778
まったく答えになってないが。
784656:04/05/03 22:15
>>778
そういう思考法は合理主義、あるいは機能主義ではありません。
「伝統主義」といいます。非文明社会の成員の一般的な考え方ですね。
いわゆる「永遠の昨日」という奴ですな。

合理的、というからにはどのように「理に適う」のかを説明可能でなければ
なりません。

徹頭徹尾、その理にかなうさまの説明がないではありませんか。
>>780
虎の威を借りて何が悪いのか。
さすがに自分の話の正当性の根拠に、自説を引用してくるような人は違いますな。
>徹頭徹尾、その理にかなうさまの説明がないではありませんか。

BEGIN ENDに置き換える合理性ってのは一度でも説明されたっけ?
BeginWhileで始めてEndIfで閉じれるなんてのは、混乱を招くだけですが?
787デフォルトの名無しさん:04/05/03 22:17
>>785
悪いとは言ってないし、そういう意味の文脈も書いてない。
おまえの話に興味が失せたと言っている。
内容がないよう
685が名無しに戻りました。
>>787-788
俺は685じゃないよぅ
ちょコラたんファンだから触らずに居られないだけだよぅ
790デフォルトの名無しさん:04/05/03 22:23
656は{}をBEGIN,ENDに置き換えるだけで読みやすくなる(>>701)変人だからなぁ。
791デフォルトの名無しさん:04/05/03 22:25
>>390
おい、このぼけはどこ行ったんだ?
せんせい!プリプロセッサつきのLispをつくってくらさい。
かっこがおおくてよめません。
あえてBEGIN/ENDにするってのは
MFCのメッセージマップのように
その構造を意識させないで書けるようにする場合くらいだよな。
構造そのまま{}を置き換えるだけなのは無駄な労力でしかない気がするよ。
>>792
半べそかきながら荷物まとめて夜逃げしますた。
Begin if hoge Begin progn Begin setq hoge 1 End
Begin setq fuga 2 End End Begin progn Begin setq hoge 0 End
Begin setq fuga 1 End End End
796デフォルトの名無しさん:04/05/03 22:37
>>795
hinesを髣髴とさせるフォルムだなw
>>795
せんせいごめんなさい。ぼくがまちがってました。
799デフォルトの名無しさん:04/05/03 23:08
800げと
>656は、自分の好きなようにやりたきゃやってれば良いじゃない。
俺は普通に書く。
802デフォルトの名無しさん:04/05/03 23:22
if()やwhile()のカッコの前スペース入れろっていうやつ
なんでprintfとかの後は開けないの?
もしかしてアホなの?

#include<stdio.h>

int main (){
 printf ("←開けろよ(プ");
 return 0;
}
↑お前がアホ
804デフォルトの名無しさん:04/05/03 23:35
>>802
まぁ初心者には教えてやるよ。
printfは関数、ifとかwhileは関数じゃない。
もちろん、returnも関数ではない。
805デフォルトの名無しさん:04/05/03 23:44
>>801
自分の勝手で済む香具師に誰も口出ししたかねーよ疲れるだけ
806デフォルトの名無しさん:04/05/03 23:45
>804
だから何で制御文は開けて関数は開けないの?
区別付けやすいから?プ
プログラマーに向いてないんじゃないの?

開けた方がいいよ。プ
分かったからもう寝なさい。
連休中だからといって、
あまり遅くまで起きていてはいけませんよ。
808デフォルトの名無しさん:04/05/03 23:48
>>802
つーか、そこだけじゃない
突っ込みどころ満載だぞ
おまえのコード
習慣的なもんでしょ?スタイルに理屈なんて求めるなよ。
>>792
LispにはCのプリプロセッサよりもはるかに高機能なマクロがありますよ。
うまく使えば括弧を減らせます。が、撲滅は無理ですw
つか郷に入らば郷に従えだ。括弧に慣れましょう。
Lispの仙人は括弧があることを忘れてるそうです。
811685:04/05/03 23:53
>>784
あー、多分あなたは私のことを「偉い人の言いなり」なひとと勝手に思い込んで
私の発言をすべて色眼鏡を通して読んでるんじゃないかな?
確かに私の文章は「偉い人が言っている。だから正しい」って言っているように読むことも出来るよ。

>徹頭徹尾、その理にかなうさまの説明がないではありませんか。
よっぽどの理由が無い限り文法に例外を持ってきてまで言語仕様を変える必要は無い。
一貫性のほうがはるかに大切だ。ってこと。で、あなたはよっぽどの理由を挙げていない。
漏れだって昔は「行の終わりのセミコロン(;)って意味無くないか?忘れやすいし」って思ったさ。

最後に言うことは「自分が思いついたことはたいてい過去に誰かが思いついている」だな。
こんな議論は大昔から何度もやってきたのよ。それを踏まえての発言なら良いんだが、
それすらも調べずに合理性だのなんだのわめいても仕方が無い。
その行為自体に合理性が無いのだよ。土俵にすら上がれていない。
過去の伝統に縛られず新しい物を提案するのは良いことだが、
それを成し遂げるためにはそれなりの実力が必要なのだよ。
もうやだ連休厨
>>811
ま、お前には千年かかっても無理だけどな( ´,_ゝ`)プッ
814デフォルトの名無しさん:04/05/04 00:04
>>811
俺は656ではないが、あんたの話は無茶苦茶だ。聞くに堪えない。耳が腐る。

最近減ってきたが人が何か言うたび過去ログ過去ログと五月蝿い輩と
過去に誰がどんな話してたかチェックし終わるまで議論の資格がないというあんたには
合い通じるところがある。そういうあんたは世界中の論文は読み終わったのか?

あー、だから内容がないんだな、あんたの話には。自分が議論してないわけか。
もう>>685はそうやって書けばいいじゃない。
>>813
メアドにsageって入ってますよ
>>812
嘆いてないでどっかに出かけろよ( ´,_ゝ`)プッ
とりあえず、814は過去ログも読めない黄金厨
819685:04/05/04 00:16
>>814
はぁ?何で2chの過去ログ話が出て来るんだよ。そういうこといってるんじゃない。
goto文不要説とか、switch文のフォールスルーとかif文の中の代入文とか、銀の弾丸とか。
まあ、おまえには世界中の論文かもしれないがな…。

>過去に誰がどんな話してたかチェックし終わるまで議論の資格がない
すべての話をチェックしろといっているわけではなく、大まかな過去の流れを掴めと言っている。
かつ、資格がないというのは「調べようとしない」からだよ。

無知は罪ではないが、知ろうとしないのは罪である。
必死だなw
void read_slogan(FILE *fp, char **slogan)
{
char buf[1024];
int i;
for (i = 0; i < 7; i++) {
fgets(buf, 1024, fp);
buf[strlen(buf) - 1] = '\0';
slogan[i] = malloc(sizeof(char) * (strlen(buf) + 1));
strcpy(slogan[i], buf);
}
}

int main(void)
{
char *slogan[7];
int i;
read_slogan(stdin, slogan);
for (i = 0; i < 7; i++) {
printf("%s\n", slogan[i]);
}
return 0;
}
822821:04/05/04 00:47
上のソースは某ポインタ本からの引用なんですが
2点教えてください。
@一点目@
read_slogan()関数は実引数にstdinを指定していますが
直接fgets()関数にstdinを使うのは変ですか?
@二点目@
read_slogan()関数内のbuf[1024]はfor分で繰り返されるたびにfgets()で
初期化されるんですか?自分は当初下記のように予想してました。
//////////////////////////////////////////////////////////////////
for分1回目:hello
buf[0]→h
buf[1]→e
buf[2]→l
buf[3]→l
buf[4]→o
------------------------------------------------------------------
for分2回目:bye
buf[0]→b
buf[1]→y
buf[2]→e
buf[3]→\0
buf[4]→o
///////////////////////////////////////////////////////////////////

実際、2回目のbuf[4]は空でした。
>>656には

 「EndIf」や「EndFunction」の様な書き方がしたいなら、
 言語仕様でそういうものがある言語を使え。

で十分だろ。
>>821-822
>read_slogan()関数は実引数にstdinを指定していますが
>直接fgets()関数にstdinを使うのは変ですか?

ファイル「hoge.txt」と「foo.txt」からの入力に対して全く同じ処理をする時に、
それぞれのフィルのオープン/クローズを入れた別関数をそれぞれ作る気か?

>fgets()で初期化されるんですか?

日本語で話せ。
う〜ん、、フィルのオープン/クローズはできんな
826デフォルトの名無しさん:04/05/04 00:59
>>819
はぁ? じゃねえだろ、人の話ちゃんと読んでから返事しな。
過去ログとあんたの話とどういう関係があるのかは、はっきり書いているだろ。

goto文不要説についてきっちり説明できる者など、こういう所にはあまりいないが
もしあんたに聞いて返事がしどろもどろでも別にそのこと自体を罪とか思ったりはしないさ。

俺が非難しているのは、自分が知ってることを知らない人を見下すあんたの態度だ。
後進に対する不寛容は懐の浅さを隠しているつもりの裸の王様だぜ、旦那?
827824:04/05/04 01:04
>>824
s/フィル/ファイル/

ダターヨ… _| ̄|○
>ファイル「hoge.txt」と「foo.txt」からの入力に対して全く同じ処理をする時に、
>それぞれのフィルのオープン/クローズを入れた別関数をそれぞれ作る気か?
お前もまともな日本語で話せ
>821
fgets()は改行文字も入るよ。
822の例だとbyeの場合
buf[0]→b
buf[1]→y
buf[2]→e
buf[3]→\n
buf[4]→\0
となる。
830821
>824
アホですいません、よくわからないです。
821のプログラムは単に標準入力ストリームからfor文で指定した回数だけ
適当な文字列を入力すればいいという認識しかなくて・・・

>829
ありがとうございます!改行文字のことすっかり忘れてました・・・