掲示板

掲示板を置いてみました。ご自由に書き込んで下さい。
ただし、私は根性なしなので、閑古鳥が鳴いたり、荒れてきたと
思ったらとっとと閉鎖する可能性があります。


より新しい記事へ ← 500 件の投稿中 150件目〜101件目を表示 → より前の記事へ
表示件数: 件/頁 


150 Re: コマンドラインのオプション引数 コメント数:  2件
  (ぱ)   | maebashi@cse.co.jp 2001/10/04 (木) 02:11
 http://member.nifty.ne.jp/maebashi/
> 引数チェックなんて、どうやったってたいして難しくはならないんですけど、
> そういえば、こういう引数のための標準的な仕組み(getopt()みたいなの)って
> あるんでしたっけ?

GNUにはgetopt_longというのがあるようではありますが。

> それともこういう引数チェックルーチンははみんな毎回作ってるんですか?

私は自前のものをcopy&pasteです。これぐらいならいいと思う。

引数を除去してargcを減らす、XtAppInitializeみたいな奴です。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


149 Re^4: fopen/fclose コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/10/04 (木) 00:40
 http://member.nifty.ne.jp/maebashi/
> 親知らずですが、あれって抜くと痛いよ〜と周りから脅かされましたが、
> 意外に痛みもなくすっと私も抜けました。私もそろそろ歯医者に行って
> 診断してもらわなければ。

抜けたのはいいのですが、あとに穴が開いています。
時々ごはんつぶとか入っちゃうようです。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


148 コマンドラインのオプション引数 コメント数:  3件
  本多   | manybook@msc.biglobe.ne.jp 2001/10/03 (水) 22:52
私事ですが数年ぶりにユーザ コマンドというものを作ることになりました。
引数のオプションで機能を選択するので、
switch( getopt(...)){
case 'h': print_help(); break;
default: print_usage(); break;
}
なんて作ろうと思ってたら、今どきオプションスイッチが一文字だけ、
オプション引数の位置も固定なんて古すぎない?って言われて
-help,-revision,-targetという引数にすることに。

引数チェックなんて、どうやったってたいして難しくはならないんですけど、
そういえば、こういう引数のための標準的な仕組み(getopt()みたいなの)って
あるんでしたっけ?

それともこういう引数チェックルーチンははみんな毎回作ってるんですか?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


147 Re^3: fopen/fclose コメント数:  1件
  ロミ 2001/09/30 (日) 17:06
(ぱ)さん回答どうもありがとうございます。悩みがすっきりしました。

親知らずですが、あれって抜くと痛いよ〜と周りから脅かされましたが、
意外に痛みもなくすっと私も抜けました。私もそろそろ歯医者に行って
診断してもらわなければ。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


146 Re^2: fopen/fclose コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/09/29 (土) 16:35
 http://member.nifty.ne.jp/maebashi/
> (2)プログラムが死んでしまったらバッファにある分が失われて
> しまう必要がある。

「必要がある」→「可能性がある」

書き間違えました。すみません。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


145 Re: fopen/fclose コメント数:  1件
  (ぱ)   | maebashi@cse.co.jp 2001/09/29 (土) 16:29
 http://member.nifty.ne.jp/maebashi/
>ファイルポインタを使ったら必ずfclose()によりクローズ
>した方がよいと...

理由も同時に書いてあったはずです。
(1)一度にオープンできるファイルの数にはたいてい制限がある。
(2)プログラムが死んでしまったらバッファにある分が失われて
しまう必要がある。
「必ずclose()すべし」というのは、(2)の理由を受けた上で
記述されているはずです。
| また、開きっぱなしままプログラムが異常終了した場合、ファ
| イルの内容が正しくなくなることもありますので、信頼性を求め
| られるプログラムでは使い終わったら必ずクローズする方が
| よいでしょう (p.148より)

textdumpの場合、1個のファイルしか相手にしませんし、fclose()
すべきタイミングの後すぐに終了してしまいます。プログラム終了時
には全てのファイルはクローズされますから、ここでfclose()
するかどうかはスタイルの問題でしかありません。

スタイルの問題として、「fopen()したら必ずfclose()すべきだ」
と主張する人もいますが(fj.comp.lang.cのmalloc/free論争を連想
するなあ...)、これについては私は結構いい加減です。

「必ずクローズ」するとしても、理由もわからず盲目的に、ってのは
ちょっと...
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


144 fopen/fclose コメント数:  2件
  ロミ 2001/09/29 (土) 15:57
はじめて記載します。ちょっとしたことなのですが、ファイルポインタ
を使ったら必ずfclose()によりクローズした方がよいと前橋さんの執筆
された『C言語体当たり学習徹底入門』では記載されていますが、同書
p168のtextdump.cではファイルポインタをクローズしていませんが、
これは理由があるのでしょうか?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


143 Re: 変数の定義(グローバル変数) コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/09/22 (土) 19:32
 http://member.nifty.ne.jp/maebashi/
>複数のソースファイルで使用する変数を定義する際、グローバル化するのか
>ソースファイル内のstaic変数にしてset_hoge(),get_hoge()等で、
>設定・取得させるかというのは、皆さんどんな基準で行っているのでしょうか?

私のスタンスは

http://member.nifty.ne.jp/maebashi/programmer/c_yota/module.html

で書いてるわけですが、実際には静的な変数自体なるべく
使わないようにしています。

構造体にして不完全型を公開し、create_XXXで利用者にnewさせる。
静的な変数は「一個しかない」ので、後々何かと困ります。

閉じた関数同士の値の受け渡しにファイル内のstatic変数を使う
ことはありますが...
# マルチスレッド? それは、そのとき考える。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


142 Re: 変数の定義(グローバル変数) コメント数:  0件
  本多   | manybook@msc.biglobe.ne.jp 2001/09/21 (金) 08:24
> 複数のソースファイルで使用する変数を定義する際、グローバル化するのか
> ソースファイル内のstaic変数にしてset_hoge(),get_hoge()等で、
> 設定・取得させるかというのは、皆さんどんな基準で行っているのでしょうか?

何かのライブラリなら不完全型の構造体へのポインタを受け取って要素を返す関数は
作りますね。当然。

私はグローバル変数にするのは最期の手段と考えています。
ただ、このような↓実装はしませんね。
static int hoge;
void set_hoge(int a)
{
hoge=a;
}
int get_hoge(void)
{
return hoge;
}
これならグローバル変数にするべきですが、その前にたぶん設計を見直しますね。
たぶん、hogeは違うファイルにあるべきなのでしょう。
# hogeが文字列でget_hoge()がstrdup(hoge);を返すと言う場合はあるかな。

あとはset_hoge()に伴って常に関連項目の再設定が必要になるようなら↓のような
実装にするかな。
static int *xxx;
void set_hoge(int a)
{
hoge = a;
xxx=realloc(xxx, hoge);
}
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


141 変数の定義(グローバル変数) コメント数:  2件
  tos 2001/09/20 (木) 09:00

前にもちょっと話題になったことがあったかと思いますが、

複数のソースファイルで使用する変数を定義する際、グローバル化するのか

ソースファイル内のstaic変数にしてset_hoge(),get_hoge()等で、

設定・取得させるかというのは、皆さんどんな基準で行っているのでしょうか?

私は、結構これで迷ったりします。

#結局、その時の気分によるような・・・・
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


140 今日のできごと(2) コメント数:  0件
  レプラコーン   | sailis@annie.ne.jp 2001/09/19 (水) 20:34
 http://www.annie.ne.jp/~sailis/pvon/
今日のは一瞬戸惑いました。

#include <stdio.h>

#define BUF_LEN  10

int main(int argc, char *argv[]) {
  char buf[BUF_LEN+1];

  memcpy(buf, argv[1], sizeof(BUF_LEN));

  return 0;
}

# チェックなどは省略です。

sizeof(10)とかってサイズはintと同等なんですね。
調べてみたらsizeof(20.0)もちゃんとダブルのサイズでした。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


139 Re^5: ソースコードの版管理 コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/09/12 (水) 00:10
 http://member.nifty.ne.jp/maebashi/
> 実務に関係なさそうですけどぉ^^;;。お買い上げありがとうございますぅ_o_。

会社の仕事ではありませんが、使う当てはないわけでも。

> > 原稿に埋めるのはいちおう必要条件だと思っていました。
> > # 編集さんにネゴすればなんとかなるのかな...
>
> それは意外。私gihyoさんでもテキストファイル入稿してます。

いえ、テキストファイル入稿です(LaTeXのソース)。
印刷のイメージとはもちろん違いますが、それなりの完成形が見たいので、
どちらかというと私のわがままでLaTeXソースにさせてもらっています。
太字指定とかがそのまま見えますし、査読していただくときにも
便利なのではないかと。

> ソースの部分は、
> リスト2-1.
> file://src/Test2.1.java
> みたいな感じでポインタのみです。

ここがそうなってない、というところが違うわけです。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


138 Re^4: ソースコードの版管理 コメント数:  1件
  Shin   | shin@sk-jp.com 2001/09/10 (月) 21:09
 http://www.sk-jp.com/
> 今、「憂鬱な〜」と平行してShinさんの本も読んでます。

実務に関係なさそうですけどぉ^^;;。お買い上げありがとうございますぅ_o_。

> > 私の場合やはり迷ったあげくソースを原稿に埋めるのはやめました^^;
>
> 原稿に埋めるのはいちおう必要条件だと思っていました。
> # 編集さんにネゴすればなんとかなるのかな...

それは意外。私gihyoさんでもテキストファイル入稿してます。
ソースの部分は、
リスト2-1.
file://src/Test2.1.java
みたいな感じでポインタのみです。
ただし、レイアウトは編集さん任せですけど。

> > 断片的な引用で説明文を書くという方式です。
>
> この「引用」は、copy&paste を伴いませんか?

引用する部分はそうそう修正することはなさそうな部分にしました。

.psとかの場合はレイアウトも意識するので埋めこむ必要ありでしょうね。
そうすると手慣れた人はやはりプリプロセッサを自作するんでしょうね。
# 欲しい^^;
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


137 Re^3: ソースコードの版管理 コメント数:  2件
  (ぱ)   | maebashi@cse.co.jp 2001/09/10 (月) 04:18
 http://member.nifty.ne.jp/maebashi/
今、「憂鬱な〜」と平行してShinさんの本も読んでます。

> 私の場合やはり迷ったあげくソースを原稿に埋めるのはやめました^^;

原稿に埋めるのはいちおう必要条件だと思っていました。
# 編集さんにネゴすればなんとかなるのかな...

今でも、あまり長いソースは「まだ原稿に埋めません」と
いうことを宣言したりしてますけど。

実際、現在1章書くごとに入稿してるので、私の手元にある間に
ソースの版が上がるより、編集さんに渡ってから手が入ることの
方が多いのです。そうなると、原稿に埋めてしまうとどうしようも
ないような。

> 断片的な引用で説明文を書くという方式です。

この「引用」は、copy&paste を伴いませんか?

> 皆さんどうしてるんでしょうね。

その昔、某氏のJava3Dの本の原稿とかを見て、原稿に埋めこみかと
思ってたんですが。出版社同じですし。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


136 Re^3: 変な質問(文字列) コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/09/10 (月) 03:48
 http://member.nifty.ne.jp/maebashi/
> > 読んでなかったはずはないんだけどなあ... とほほ。
>
> う。とほほですね。
> 確かに以前読んでます。

いえ、この「とほほ」はあくまで私の話です。
# 正誤表を参照。

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


135 Re^2: ソースコードの版管理 コメント数:  3件
  Shin   | shin@sk-jp.com 2001/09/09 (日) 02:38
 http://www.sk-jp.com/
> 入稿の段階で、ソースは行番号付きで原稿に埋め込まれています。
> ここを自動化すれば良いのでしょうが、行番号を本文中で参照して
> いるような場合にはその対応も要るよなあ、と思いつつ、
> ずるずると手で入れてしまっています(別環境で原稿を書くことも
> ありますし)。

そうそう。世にある書籍には他にソースコード中に矢印とか範囲を示す
絵を書いて「ココ」とか書いたりしてるのもありますけど、あの辺も自動化
してるんでしょうかねぇ^^。

> # 「ポインタ完全制覇」の最初のうちは、「変数名にhogeを使うかなあ」
> # とか、そのあたりの「迷い」があって、ついつい原稿にコピーした
> # ソースを手でいじっちゃうことがあって、それが起因で発生した
> # 問題もありました。

私の場合やはり迷ったあげくソースを原稿に埋めるのはやめました^^;
断片的な引用で説明文を書くという方式です。
皆さんどうしてるんでしょうね。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


134 Re: ソースコードの版管理 コメント数:  4件
  (ぱ)   | maebashi@cse.co.jp 2001/09/08 (土) 16:44
 http://member.nifty.ne.jp/maebashi/
> 本とダウンロードしたソースファイルが異なるって言うのは
> 前橋さんレベルでもソースコードの版管理は難しいって証明なのでしょうか。

私は見てのとおりポカミスが多いので、なるべく自動化して
ミスを減らそうと思ってはいるのですが... なかなか。

入稿の段階で、ソースは行番号付きで原稿に埋め込まれています。
ここを自動化すれば良いのでしょうが、行番号を本文中で参照して
いるような場合にはその対応も要るよなあ、と思いつつ、
ずるずると手で入れてしまっています(別環境で原稿を書くことも
ありますし)。

とはいえ、少なくともコンパイル→テストしてから埋め込んでいる
はずなので、今回のミスはちょっと謎です。

いずれにせよ、すみませんでした。

# 「ポインタ完全制覇」の最初のうちは、「変数名にhogeを使うかなあ」
# とか、そのあたりの「迷い」があって、ついつい原稿にコピーした
# ソースを手でいじっちゃうことがあって、それが起因で発生した
# 問題もありました。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


133 Re^2: 誤り指摘 コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/09/08 (土) 16:34
 http://member.nifty.ne.jp/maebashi/
すみません、間違って書きかけで投稿してしまいましたので
続きです。

> あと同p293 book_kanri.c のコメント l482 はここでは一応dummyでなくな
> っている(と思う)ので、ゴミと見なせる気がします。

そうですね。これも正誤表に載せておきます。

コメントの短所が本で
> 言われたとおりそのまま出たような...

それを証明するためにあえて間違えた... わけではありません。
単なるポカです。ごめんなさい、ごめんなさい、ごめんなさい。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


132 Re: 誤り指摘 コメント数:  1件
  (ぱ)   | maebashi@cse.co.jp 2001/09/08 (土) 16:31
 http://member.nifty.ne.jp/maebashi/
出張などあって反応が遅くなりました。すみません。

> 体当り〜のp275 realloc.c l11 のgetcの引数が抜けているのですが、
> 多分fpが抜けているのだと思います。(ダウンロードしたsourceではありました
> )

その通りです。うちに帰ったら正誤表に載せておきます。

> あと同p293 book_kanri.c のコメント l482 はここでは一応dummyでなくな
> っている(と思う)ので、ゴミと見なせる気がします。コメントの短所が本で
> 言われたとおりそのまま出たような...
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


131 Re^2: 変な質問(文字列) コメント数:  0件
  レプラコーン   | sailis@annie.ne.jp 2001/09/06 (木) 21:41
 http://www.annie.ne.jp/~sailis/pvon/
> 何をしたいか、日本語で述べよ。って感じ。
どれも表現が違うだけですね。

> 「なにも書かないを表示する」か????
何も書かないを表示する、というか、
エラーメッセージ処理関数が引数固定なので、
上流の関数から呼ぶときには
何かしらの値を与える必要があるのです。
# こういう仕様のところは結構多いですね・・・
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


130 Re^2: 変な質問(文字列) コメント数:  1件
  レプラコーン   | sailis@annie.ne.jp 2001/09/06 (木) 21:33
 http://www.annie.ne.jp/~sailis/pvon/
> 読んでなかったはずはないんだけどなあ... とほほ。

う。とほほですね。
確かに以前読んでます。

「&a」は文字列へのポインタでもあるということですね。
文字列の定義にも反していないですし。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


129 Re^3: 変な質問(文字列) コメント数:  0件
  レプラコーン   | sailis@annie.ne.jp 2001/09/06 (木) 21:28
 http://www.annie.ne.jp/~sailis/pvon/
私は改善3ですね。
文字列処理って'\0'をしっかり意識しないで
プログラムを組む人が結構多いですし。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


128 ソースコードの版管理 コメント数:  5件
  本多   | manybook@msc.biglobe.ne.jp 2001/09/05 (水) 22:38
本とダウンロードしたソースファイルが異なるって言うのは
前橋さんレベルでもソースコードの版管理は難しいって証明なのでしょうか。

それとも本で使う程度のサンプルコードなんか版管理を
まじめにやってないのかしら?:-P

今日、一緒に仕事をしている人が
「Aさんがソースコードをバックアップもとらずにデバッグ用に書き換えていて
元のコードが復元できませ〜ん。".bak"ってファイルを作っておいてねって
約束しておいたのに」
なんて言い出していたりして。cvsの使い方教えたんだけどなぁ。

「makeするディレクトリに余計なSCCSとかCVSって言う名前の
ディレクトリがあるのは気持ち悪いから、必ずにこのディレクトリは削除してる」
なんて言い出す人もいるし(;_;)

CVSで管理している全部の版のファイルを
自分のディレクトリに分けて別管理している人もいるし。
そのくせ管理できなくなってるし。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


127 誤り指摘 コメント数:  2件
  costa 2001/09/05 (水) 17:40
しょぼい書き込みばかりですみません。
体当り〜のp275 realloc.c l11 のgetcの引数が抜けているのですが、
多分fpが抜けているのだと思います。(ダウンロードしたsourceではありました
)
あと同p293 book_kanri.c のコメント l482 はここでは一応dummyでなくな
っている(と思う)ので、ゴミと見なせる気がします。コメントの短所が本で
言われたとおりそのまま出たような...


【新規投稿】 【この投稿にリプライ】 【投稿者削除】


126 Re: 変な質問(文字列) コメント数:  2件
  (ぱ)   | maebashi@cse.co.jp 2001/09/05 (水) 01:40
 http://member.nifty.ne.jp/maebashi/
> それとも単にスカラ変数の領域を指すポインタであって、
> 文字列を指すポインタとは違うと考えればいいでしょうか?

JIS X3010 6.3.6
| 配列でないオブジェクトへのポインタは、要素型として
| そのオブジェクトの型をもつ長さ 1の配列の最初の要素
| へのポインタと同じ動きをする

読んでなかったはずはないんだけどなあ... とほほ。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


125 Re^2: 変な質問(文字列) コメント数:  1件
  REC   | tabe@mug.biglobe.ne.jp 2001/09/04 (火) 23:58
 http://ncosweb.h2o-lp.co.jp
> おまけで、
>   ・printf("") ;
>   ・printf("%s","") ;   
> も。
おまけのおまけ、
★★★文字列の初期化★★★。
頼むから、
sprintf(string_buffer,"\0") ; 
  // \0 不要。このコードがあれば、文字列を理解していない証拠。
って書かないで。(データベース系になぜか多い)
改善1:sprintf(string_buffer,"") ; // sprintf は遅い
改善2:strcpy(string_buffer,"") ; // 関数コールは遅い
改善3:memset(string_buffer,'\0',sizeof(string_buffer)); 
    // 全部クリアする必要があるの?
改善4:string_buffer[0]='\0' ;// 基本だ!!
私RECは、改善4を推奨する。
   理由;処理速度が速くて、打ち込み量が少ないから。
   明日出荷で、何も考えたくない時は、
   改善3を使う
   (何度も関数コールされてstring_bufferが汚れている時)。
以上。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


124 Re: 変な質問(文字列) コメント数:  3件
  REC   | tabe@mug.biglobe.ne.jp 2001/09/04 (火) 23:34
 http://ncosweb.h2o-lp.co.jp
難しい話は、おいておいて、
> ヘンテコリンなコードについて質問です。
>  char a = '\0';
>  printf("%s",&a);
も、
>  char a[] = "";
>  printf("%s", a);
も、目くそ鼻くそだと思う。
おまけで、
  ・printf("") ;
  ・printf("%s","") ;   
も。
何をしたいか、日本語で述べよ。って感じ。
「なにも書かないを表示する」か????
> 因みに
>  char a[1] = '\0';
> はどうでしょうか。
>  char a[1] = "";
> と同義になるのでaは文字列へのポインタと言えるような気がしますけど・・・。
=>恐らく、
  自動変数の場合と、
    (代入命令が生成される)
  外部変数の場合で生成コードが違う。
    (静的エリアが取られそのアドレスが。。。わからん)  
  UNIX系ならば(LINUX gcc含む)
%cc −S quest.c
  Solarisならば
  %cc -c ques.c
%dis quest.o
で、多分なんとなく謎が解けるのでは。
窓は知らない。
以上:
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


123 変な質問(文字列) コメント数:  7件
  レプラコーン   | sailis@annie.ne.jp 2001/09/04 (火) 19:16
 http://www.annie.ne.jp/~sailis/pvon/
ヘンテコリンなコードについて質問です。
# なんか教えて君みたい。:-)

 char a = '\0';
 printf("%s",&a);

というコードにおいて、
「&a」は文字列を指すポインタに分類されるのでしょうか?
それとも単にスカラ変数の領域を指すポインタであって、
文字列を指すポインタとは違うと考えればいいでしょうか?
# なんか最近変なコードによく逢うような・・・;-<

以下のように修正させたいのですが、
どう説得していいものか困っています。

 char a[] = "";
 printf("%s", a);

因みに
 char a[1] = '\0';
はどうでしょうか。
 char a[1] = "";
と同義になるのでaは文字列へのポインタと言えるような気がしますけど・・・。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


122 Re^5: 今日のできごと コメント数:  0件
  本多   | manybook@msc.biglobe.ne.jp 2001/09/02 (日) 16:40
> i=ZERO;のところでしびれればよいの?
えぇ。これを見たとき私はしびれちゃいましたが...

> 1) char i ;
> /* ループカウンタに遅いCHAR使ってる!!*/
あ〜そう言うのみたことあるなぁ。
defineでループの終了条件を
#define HOGE_HOGE_MAX 100→200って
変えたら無限ループになっちゃって無駄に悩んだことが(^^;)

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


121 Re^5: 「入門書に書いてあった」に一票 コメント数:  0件
  レプラコーン   | sailis@annie.ne.jp 2001/09/02 (日) 11:33
 http://www.annie.ne.jp/~sailis/pvon/
> int hoge;
> char piyo[] = "piyopiyo";
>
> in("%d", hoge, 1, 4, 5);
> in("%s", piyo, "hogehoge", "hoge", "piyo");

あとから気づきましたが、変数の個数情報が欠損してました。
in("%4d", hoge, 1, 4, 5);
in("%4s", piyo, "hogehoge", "hoge", "piyo");
ですね(汗
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


120 Re^4: 「入門書に書いてあった」に一票 コメント数:  1件
  レプラコーン   | sailis@annie.ne.jp 2001/09/02 (日) 11:14
 http://www.annie.ne.jp/~sailis/pvon/
> #define RANGE(a,R1,b,R2,c) (((a) R1 (b)) && ((b) R2 (c)))
> if ( RANGE( 0, <=, i, <, HOGE_HOGE_MAX) ) {
> ...
> }

私も似たような感じのマクロを作ったことがあります。
#define between(val, min, max) (((val) >= (min)) && ((val) <= (max)))

他にはあると便利かなと思ったのが、SQLの「in」です。
こちらは作ってませんが、可変引数を使えばすぐできますよね。
int hoge;
char piyo[] = "piyopiyo";

in("%d", hoge, 1, 4, 5);
in("%s", piyo, "hogehoge", "hoge", "piyo");
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


119 Re^5: 今日のできごと コメント数:  0件
  レプラコーン   | sailis@annie.ne.jp 2001/09/02 (日) 11:05
 http://www.annie.ne.jp/~sailis/pvon/
ループカウンタにcharはしびれますね。

define関連では、リテラル禁止だからと言われた新人が、
欲しい値をしたシンボルをどこからか探してきて、
  a[AAA_SYS_ERR] = '\0';   /* ターミネート */
ということをしていたところもありました。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


118 Re^4: 今日のできごと コメント数:  2件
  REC   | tabe@mug.biglobe.ne.jp 2001/09/01 (土) 13:21
 http://ncosweb.h2o-lp.co.jp
i=ZERO;のところでしびれればよいの?
> for(i=ZERO;i<HOGE_HOGE_MAX;i++){
> ...
> }
> しびれるでしょ?(^^)
俺なら、
1) char i ;
/* ループカウンタに遅いCHAR使ってる!!*/
2) #define HOGE_HOGE_MAX 0x256
/* 0xだって?、256だって? */
とかの、隠し情報でしびれます。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


117 Re^3: 「入門書に書いてあった」に一票 コメント数:  2件
  本多   | manybook@msc.biglobe.ne.jp 2001/09/01 (土) 08:10
> > もっと、かわいいの知ってる。
> > if('0x41' <= ch <= '0x5A') {
> > ★ダブルで、お楽しみください。
> 誰か、この数学的表現にも、突っ込みをいれて。

ちなみに私はこういう数学的な式は間違っているんだけど
わかりやすいと思うので、↓みたいなdefineを導入してます。
#define RANGE(a,R1,b,R2,c) (((a) R1 (b)) && ((b) R2 (c)))
if ( RANGE( 0, <=, i, <, HOGE_HOGE_MAX) ) {
...
}
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


116 Re^3: 今日のできごと コメント数:  3件
  本多   | manybook@msc.biglobe.ne.jp 2001/09/01 (土) 08:01
> > #define ZERO 0
> > となっていたりしました(^^;)。
> ってするな!!(読み手はイチ、ニ、サンと発音するから、何の有用情報なし)
> 0,1だけは「べた」で使った方が判りやすい場合がほとんど。
> 駄目な例の典型は
>  memset(buf,(int)NULL,sizeof(buf) );

そのソースコードにはこんなコードがあります。
for(i=ZERO;i<HOGE_HOGE_MAX;i++){
...
}
しびれるでしょ?(^^)
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


115 Re^2: 「入門書に書いてあった」に一票 コメント数:  3件
  REC   | tabe@mug.biglobe.ne.jp 2001/09/01 (土) 00:00
 http://ncosweb.h2o-lp.co.jp
> もっと、かわいいの知ってる。
> if('0x41' <= ch <= '0x5A') {
> ★ダブルで、お楽しみください。
誰か、この数学的表現にも、突っ込みをいれて。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


114 Re^2: 今日のできごと コメント数:  4件
  REC   | tabe@mug.biglobe.ne.jp 2001/08/31 (金) 23:56
 http://ncosweb.h2o-lp.co.jp
> #define ZERO 0
> となっていたりしました(^^;)。
カーニハン博士の最新作、
 プログラム書法
でも、出てましたね。
#define 一 1
#define 二 2
#define 三 3
ってするな!!(読み手はイチ、ニ、サンと発音するから、何の有用情報なし)
0,1だけは「べた」で使った方が判りやすい場合がほとんど。
駄目な例の典型は
 memset(buf,(int)NULL,sizeof(buf) );
 マジックナンバーは絶対駄目と先輩が言った。
 NULLはマクロだから良い。
 あれ、コンパイラが文句言う。
 なんだか判らないから、キャストしよう。
 コンパイラが黙った。
 俺は正しい。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


113 Re^3: 今日のできごと コメント数:  0件
  REC   | tabe@mug.biglobe.ne.jp 2001/08/31 (金) 23:42
 http://ncosweb.h2o-lp.co.jp
> どうやったら耳を傾けてもらえますかね。
> 大抵、説明すると「妙なところで細かいですね」と苦笑いされます。
> # 私はこういうところでデータの型を意識するのは大切だと思ってるんですが。
> strcmp(hoge, NULL)
> と書いていたので修正をしてくださいと返したら、
> 本人いわく、「正常に動くから・・・」
1)見せてあげましょう。
  main() {
strcmp(hoge,NULL);
}
が、solaris2.6や、Linuxでゲロはいて死ぬのを。
2)読よんであげましょう。
  a)「ホゲがヌルポインターならば」なら、
   if(hoge == NULL) と書け
  b)「ホゲがカラならば」なら
   if(hogen[0] == '\0')と書け
  お前のコードは何と読むのだ
   「文字列比較、ホゲとヌル」
  かと、レビューの時に朗々と、読んであげましょう。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


112 Re^2: 今日のできごと コメント数:  1件
  レプラコーン   | sailis@annie.ne.jp 2001/08/31 (金) 19:26
 http://www.annie.ne.jp/~sailis/pvon/
> 駄目。
> ローカルルールを持ち込むべきでない。
やはり、地道にいくしかないですか。
どうやったら耳を傾けてもらえますかね。
大抵、説明すると「妙なところで細かいですね」と苦笑いされます。

# 私はこういうところでデータの型を意識するのは大切だと思ってるんですが。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


111 Re^6: 「入門書に書いてあった」に一票 コメント数:  0件
  レプラコーン   | sailis@annie.ne.jp 2001/08/31 (金) 19:19
 http://www.annie.ne.jp/~sailis/pvon/
> 6.1.3.3 補足規定
> | 2文字以上を含む又は基本実行文字集合で表現できない
> | 文字若しくは拡張表記を含む単純文字定数の値は、処理系
> | 定義とする。

引用、ありがとうございます。
実装依存ではなく処理系依存なんですね。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


110 Re: 今日のできごと コメント数:  5件
  本多   | manybook@msc.biglobe.ne.jp 2001/08/31 (金) 08:22
> やっぱりヘッダファイルに
> #define NULL_PTR  ((void *)0)
> #define NULL_STR  ("")
> #define NULL_CHR  ('\0')
> と作ったほうがいいのでしょうかね。
そういえば、私の知っているシステムでは「定数は必ずdefineしなければならない」
っていうルールになっていて、それはそれで理解できるのですが
#define ZERO 0
となっていたりしました(^^;)。
そのシステムはあまり文字列を扱わなかったんだけど
扱ってたら似たようなことしてたかもしれませんね(^^)
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


109 Re^5: 「入門書に書いてあった」に一票 コメント数:  1件
  (ぱ)   | maebashi@cse.co.jp 2001/08/31 (金) 00:45
 http://member.nifty.ne.jp/maebashi/
> シングルクォートで2バイト文字を囲うのが可能なことを考えると、
> エンディアンとの関係で実装依存なような気もしますがどうなんでしょうね。

規格にありますよ。
# 用意していたら、先に書かれてしまいましたが...

6.1.3.3 補足規定
| 2文字以上を含む又は基本実行文字集合で表現できない
| 文字若しくは拡張表記を含む単純文字定数の値は、処理系
| 定義とする。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


108 Re^3: 「入門書に書いてあった」に一票 コメント数:  0件
  REC   | tabe@mug.biglobe.ne.jp 2001/08/31 (金) 00:36
 http://ncosweb.h2o-lp.co.jp
> int a='0x41';
> printf("0x%08x\n",a);
本多さん。頭良すぎ。
とにかく、よくある間違いは。
INTでなく、CHAR。
つまり。
 char c1 = '0x31' /* 1 */
char c2 = '0x31' /* 1 */
char c3 = '0x30' /* 0 =>110番 */
で、確かに動く(処理系だ)から怖いな。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


107 Re: 正誤表の誤? コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/08/31 (金) 00:34
 http://member.nifty.ne.jp/maebashi/
> ポインタ制覇の正誤表に関して、p228で抜けていたのはstring.hの
> 方だと思います.

指摘ありがとうございます。直しておきました。

# ソースの修正の方はあっているのに補足の文が間違ってました...
# とほほ。

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


106 Re^5: 「入門書に書いてあった」に一票 コメント数:  0件
  REC   | tabe@mug.biglobe.ne.jp 2001/08/31 (金) 00:28
 http://ncosweb.h2o-lp.co.jp
> うちの環境でも同じく「0x30783136」と表示されました。
>
> 余談ですが、X68000とかでは
> int a='あ';
>
> switch(a) {
> case 'あ':
>   ...
>   break;
> default:
>   break;
> }
> などが常套テクとして広まってました。(VCでもできます。)
>
> シングルクォートで2バイト文字を囲うのが可能なことを考えると、
> エンディアンとの関係で実装依存なような気もしますがどうなんでしょうね。

これは、実装依存です。
ARM(C++のバイブル)に書いてます。
   
「タバコと酒を飲んで、早死にするのは合法です。」程度の意味で、合法です。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


105 Re: 今日のできごと コメント数:  2件
  REC   | tabe@mug.biglobe.ne.jp 2001/08/31 (金) 00:24
 http://ncosweb.h2o-lp.co.jp
駄目。
ローカルルールを持ち込むべきでない。
> あるシステムで
> strcmp(hoge, NULL)
> と書いていたので修正をしてくださいと返したら、
> #define AAA_SYS_NULL  0x00
>
> strcmp(hoge, AAA_SYS_NULL)
> と返ってきました。
> 本人いわく、「正常に動くから・・・」
>
> やっぱりヘッダファイルに
> #define NULL_PTR  ((void *)0)
> #define NULL_STR  ("")
> #define NULL_CHR  ('\0')
> と作ったほうがいいのでしょうかね。

0、NULL,’¥0’、””を理解できない人が、

教科書(K&R2,C-FASQ,ARM)に書いていない事を理解できるはずがない。
地道に教えるべき。
NULLは、ヌルポインターと発音せよ。ポインターだよ、ポインター。
””は、gcc −Sでアセンブラコードを見せる、
    ほら、領域が取られてここだよ。
    ¥0は自分で書くなよ。
ってな感じで。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


104 今日のできごと コメント数:  9件
  レプラコーン   | sailis@annie.ne.jp 2001/08/30 (木) 20:35
 http://www.annie.ne.jp/~sailis/pvon/
あるシステムで
strcmp(hoge, NULL)
と書いていたので修正をしてくださいと返したら、
#define AAA_SYS_NULL  0x00

strcmp(hoge, AAA_SYS_NULL)
と返ってきました。
本人いわく、「正常に動くから・・・」

やっぱりヘッダファイルに
#define NULL_PTR  ((void *)0)
#define NULL_STR  ("")
#define NULL_CHR  ('\0')
と作ったほうがいいのでしょうかね。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


103 Re^4: 「入門書に書いてあった」に一票 コメント数:  3件
  レプラコーン   | sailis@annie.ne.jp 2001/08/30 (木) 20:21
 http://www.annie.ne.jp/~sailis/pvon/
うちの環境でも同じく「0x30783136」と表示されました。

余談ですが、X68000とかでは
int a='あ';

switch(a) {
case 'あ':
  ...
  break;
default:
  break;
}
などが常套テクとして広まってました。(VCでもできます。)

シングルクォートで2バイト文字を囲うのが可能なことを考えると、
エンディアンとの関係で実装依存なような気もしますがどうなんでしょうね。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


102 Re^3: 「入門書に書いてあった」に一票 コメント数:  4件
  本多   | manybook@msc.biglobe.ne.jp 2001/08/30 (木) 18:26
> int a='0x41';
> printf("0x%08x\n",a);
> とやると、私の環境では「0x30783136」と表示されました。

失礼。0x30783431でした。
書き込みと実験で文字列を間違えてしまいました(^^;)
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


101 Re^2: 「入門書に書いてあった」に一票 コメント数:  6件
  本多   | manybook@msc.biglobe.ne.jp 2001/08/30 (木) 18:15
> もっと、かわいいの知ってる。
> if('0x41' <= ch <= '0x5A') {

''で囲めるのは1文字分だけ、それ以外はエラーになると思い込んでいたのですが
意外と(意外でもなんでもない?)エラーにはならないのですね。

int a='0x41';
printf("0x%08x\n",a);

とやると、私の環境では「0x30783136」と表示されました。
こういう結果を得られるのは規格でそのように規定されているんでしたっけ?
処理系依存?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】

Copyright(C) 1999 NIFTY Corporation
All Rights Reserved.