5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語なら、俺に聞け! Part 〈52〉

1 :ぬるぽ:03/03/10 14:54
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しませう。
質問する前には最低限Googleで検索を。

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

コンパイラを探しているなら >>2- を。

上記を逸した場合の結果は激しく未定義だゴルァ!!

  ∧_∧
 ( ´∀`)< ぬるぽ

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/

2 :ぬるぽ:03/03/10 14:54
【コンパイラ】
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/

【ライセンスや機能などに問題あり】
Microsot 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

3 :デフォルトの名無しさん:03/03/10 14:54
































4 :ぬるぽ:03/03/10 14:55
【過去ログ】
51 http://pc2.2ch.net/test/read.cgi/tech/1046104909/
50 http://pc2.2ch.net/tech/kako/1044/10449/1044938752.html
49 http://pc2.2ch.net/test/read.cgi/tech/1042646178/
48 http://pc3.2ch.net/tech/kako/1041/10411/1041127646.html
47 http://pc3.2ch.net/tech/kako/1040/10400/1040048202.html
46 http://pc3.2ch.net/tech/kako/1039/10393/1039328710.html
45 http://pc3.2ch.net/tech/kako/1038/10384/1038405432.html
44 http://pc3.2ch.net/tech/kako/1037/10377/1037796472.html
43 http://pc3.2ch.net/tech/kako/1037/10372/1037281411.html
43 http://pc3.2ch.net/tech/kako/1037/10371/1037134356.html
42 http://pc3.2ch.net/tech/kako/1037/10371/1037101156.html
41 http://pc3.2ch.net/tech/kako/1036/10368/1036876790.html
40 http://pc3.2ch.net/tech/kako/1036/10366/1036673739.html
39 http://pc3.2ch.net/tech/kako/1036/10364/1036409391.html
38 http://pc3.2ch.net/tech/kako/1035/10357/1035729526.html
37 http://pc3.2ch.net/tech/kako/1035/10356/1035623265.html
36 http://pc3.2ch.net/tech/kako/1035/10352/1035211039.html
35 http://pc3.2ch.net/tech/kako/1034/10343/1034337064.html
34 http://pc3.2ch.net/tech/kako/1033/10332/1033240509.html
33 http://pc3.2ch.net/tech/kako/1032/10326/1032606064.html
32 http://pc3.2ch.net/tech/kako/1031/10319/1031905402.html
31 http://pc3.2ch.net/tech/kako/1030/10307/1030786546.html
30 http://pc3.2ch.net/tech/kako/1030/10307/1030786546.html
29 http://pc3.2ch.net/tech/kako/1029/10296/1029605182.html
28 http://pc3.2ch.net/tech/kako/1028/10284/1028495798.html
27 http://pc3.2ch.net/tech/kako/1027/10271/1027160374.html

5 :ぬるぽ:03/03/10 14:55
26 http://pc.2ch.net/tech/kako/1026/10260/1026048820.html
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
23 http://pc.2ch.net/tech/kako/1023/10230/1023024817.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1020/10207/1020756993.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
15 http://pc.2ch.net/tech/kako/1016/10165/1016519243.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1013/10139/1013990673.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1008/10083/1008300863.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
7 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
6 http://piza2.2ch.net/tech/kako/999/999617524.html
5 http://piza2.2ch.net/tech/kako/994/994908590.html
4 http://piza.2ch.net/tech/kako/992/992357382.html
3 http://piza.2ch.net/tech/kako/989/989929288.html
2 http://piza.2ch.net/tech/kako/979/979529893.html
1 http://piza.2ch.net/tech/kako/967/967985026.html

6 :デフォルトの名無しさん:03/03/10 14:56
もう新スレの時期か。
1000直前だということに気づかなかったぞ(藁

7 :デフォルトの名無しさん:03/03/10 14:57
  ( ・∀・)   | | ガガガガッ 人
 と    )    | |    人  <  >__Λ∩
   Y /ノ    .人   <  >__Λ∩Д´)/
    / ) .人 <  >__Λ ∩Д´)/   / ←>>1
  _/し' <  >_Λ∩Д´)/   / ←>>2
 (_フ彡 V`Д´)/   / ←>>4
            / ←>>5

8 :デフォルトの名無しさん:03/03/10 14:58
>>1
なんて事を・・・

9 :デフォルトの名無しさん:03/03/10 15:01
メインフレームってどんなものかいまいち分からないんですが。あと大型汎用機ってのも。

10 :デフォルトの名無しさん:03/03/10 15:01
>>9
スレ違い。
ここは、ぬるぽのスレです。

11 :デフォルトの名無しさん:03/03/10 15:17
Part 50 が sat 落ちしてるのに、Part 49 がまだ生きてるというのが何とも・・・。

12 :デフォルトの名無しさん:03/03/10 15:17
スレ立て乙ー
  ( ・∀・)   | | ガガガガッ 人
 と    )    | |    人  <  >__Λ∩
   Y /ノ    .人   <  >__Λ∩Д´)/
    / ) .人 <  >__Λ ∩Д´)/   / ←>>1
  _/し' <  >_Λ∩Д´)/   / ←>>2
 (_フ彡 V`Д´)/   / ←>>4
            / ←>>5


13 :デフォルトの名無しさん:03/03/10 16:47
sat 落ち・・・何か、(・∀・)イイ!!

14 :デフォルトの名無しさん:03/03/10 17:22
C言語を使ったプログラムで
練習として簡単なWebサーバを立ち上げたいのですが、
右も左もわかりません・・・

どこか参考にすべきHPなどはありますでしょうか?

15 :デフォルトの名無しさん:03/03/10 17:23
system("/usr/local/apache/bin/apachectl start");


16 :デフォルトの名無しさん:03/03/10 17:29
>>13
ワラタ

>>14
取りあえずSocketについて調べたら?

17 :デフォルトの名無しさん:03/03/10 17:33
>>14
WebサーバをCで作る、ということでしょうか?
WebサーバにアクセスするソフトをCで作るということでしょうか?

18 :デフォルトの名無しさん:03/03/10 17:41
>右も左もわかりません・・・

そういや、召還ワードのひとつだったな

19 :14:03/03/10 17:52
>>16
わかりました。Socketの勉強をしてみます。

>>17
Cで作る、ということです。

20 :デフォルトの名無しさん:03/03/10 17:54
>19
この答え方はネタっぽいな。
あるいは、日本語の右も左もわからないかだが。

21 :デフォルトの名無しさん:03/03/10 17:55
>>19
Cで 「何を」 作りたかったんだろう

22 :14:03/03/10 17:58
WebサーバをCで立ち上げるっていうのは
そういうことではないんでしょうか・・・?

23 :デフォルトの名無しさん:03/03/10 18:04
ApacheなどのようなWebサーバを作成、という事ですか?
本家ですら、何年もかけて、多くの人数をかけて日々バージョンアップや
バグフィクスを繰り返しているというのに・・・

24 :デフォルトの名無しさん:03/03/10 18:11
>>14
まあ、VBですら簡易HTTPサーバは作れるから、気長に作りなされ。
セキュリティとか難しいことを考えなければ、意外になんとかなるぞ。

25 :デフォルトの名無しさん:03/03/10 18:14
ひょっとして、CでCGIを書きたいとか!?

26 :デフォルトの名無しさん:03/03/10 18:39
漏れんとこの CGI、C で書いてあるけど何かマズい?

27 :デフォルトの名無しさん:03/03/10 18:54
>>26
いや、そういう問題じゃなくてw

>>14はどこへ逃げた?

28 :デフォルトの名無しさん:03/03/10 19:00
Webサーバ立ち上げというと
ドメイン取得、ネットワーク構成を決める
ハードを買って来て組み立て、ケーブル接続
OSインスコ、起動、ネットワーク設定、テスト
こんな感じ



29 :デフォルトの名無しさん:03/03/10 19:01
>>28
お前の会社には今後見積もり取らんことにするよ。

30 :デフォルトの名無しさん:03/03/10 19:04
>>14
要するに、ローカルな環境にWebサーバ立てて、Cで組んだCGI動かしたいんだろ?

こちらへどうぞ↓

C言語CGI専用スレッド
http://pc2.2ch.net/test/read.cgi/php/988918264/l50


31 :デフォルトの名無しさん:03/03/10 19:38
 ∧_∧ 
 (´∀` )       ∧∧
   ̄ ̄    ==== ( ・∀・)つ0===フ
 ⊂ ̄ ̄⊃ ,/| === ̄ ̄
 ノ ノ ノ   | |    ( ⊃/ 
(_ノ )   | | ∧∧し⊃
       ⊂(・∀・ )       ∧∧
           ̄ ̄  ==== ( ・∀・)つ0===フ スレタテオツカレ!!>>1>>2
          \ ⊂)     ( ⊃/
           ⊂ J      し⊃
                   '"'""

32 :デフォルトの名無しさん:03/03/10 19:55
LSI C-86 試食版というコンパイラが雑誌の付録についてたんだけど
インストール方法がよくわからない。誰か教えて。

33 :デフォルトの名無しさん:03/03/10 19:58
>>32
まずはぐぐれ。話はそれからだ。

34 :デフォルトの名無しさん:03/03/10 19:59
>>32
雑誌って、Cマガだろ?

いまさらそんなの入れるな。
せめてBCCにしとけ。

どうしても入れたければ、ググれ。

35 :デフォルトの名無しさん:03/03/10 19:59
インストール方法もちゃんと載せないようなクソ雑誌を買ったにせよ、
展開してパスを通すだけの脳味噌がないにせよ、>>32には無理。

36 :デフォルトの名無しさん:03/03/10 20:01
>>35
冷たいねアンタ

37 :デフォルトの名無しさん:03/03/10 20:29
>>36
冷たく思うかもしれないけどそれが>>32のためになる。
本当は俺は温かい心の持ち主なのだ。


38 :デフォルトの名無しさん:03/03/10 20:33
>>37
冷たいねアンタ

39 :デフォルトの名無しさん:03/03/10 20:36
>>38
冷たく思うかもしれないけどそれが>>36のためになる。
本当は俺は温かい心の持ち主なのだ。


40 :デフォルトの名無しさん:03/03/10 20:38
ウザイ。
次。

41 :デフォルトの名無しさん:03/03/10 20:39
>>40
冷たいねアンタ

42 :デフォルトの名無しさん:03/03/10 20:42
リピート厨が今日日のはやりですか

43 :デフォルトの名無しさん:03/03/10 20:45
VisualC++というものを友人に借りたんだけど
インストール方法がよくわからない。誰か教えて。

44 :デフォルトの名無しさん:03/03/10 20:47
>>45
冷たいねアンタ

45 :デフォルトの名無しさん:03/03/10 20:47
>>43
帰れ。

46 :デフォルトの名無しさん:03/03/10 20:48
>>44
逝ってよし!

47 :デフォルトの名無しさん:03/03/10 20:50
>>43
まずCD-Rにコピれ。話はそれからだ。

48 :デフォルトの名無しさん:03/03/10 20:51
>>44>>45 藁田

49 :デフォルトの名無しさん:03/03/10 21:53
>>47 市ね。

50 :デフォルトの名無しさん:03/03/10 21:55
>>49
お前には迷惑かからないだろ?
それともマイクロソフトの社員なのか?

51 :デフォルトの名無しさん:03/03/10 22:03
>>50
> それともマイクロソフトの社員なのか?
そうですが何か?

52 :デフォルトの名無しさん:03/03/10 22:07
>>51
じゃあ死ね

53 :デフォルトの名無しさん:03/03/10 22:13
>>52
一平民の言うことなんか誰が聞くか(w

54 :52:03/03/10 22:15
>>53
つーか死ねと言われて死ぬやつはいねぇ。

55 :デフォルトの名無しさん:03/03/10 22:16
一つ聞いても良いですか.Cで#includeするヘッダファイルと
コンパイルオプションの対応はどこで調べればよいのでしょう.
math.hなら-lmだとか、なにか変換規則でもあれば別ですが、
表みたいなものがどこかにあるのでしょうか.お教えください.

56 :52:03/03/10 22:18
>>55
まて。
-lm(gccだよね?)はリンクオプションだぞ。
インクルードファイルのあるディレクトリを指定するなら-I<Dir>でいけることが多いんじゃない?

57 :デフォルトの名無しさん:03/03/10 22:19
>>56
死ね

58 :52:03/03/10 22:28
>>57
オマエモナー

59 :デフォルトの名無しさん:03/03/10 22:31
>>57-58

自殺サイトで知り合った二人。

60 :55:03/03/10 22:32
>>56 おお、レスありがとうございます. >>57は私ではありません.
gccです. math.hなどの場合#include <hoge>とした場合の話です.
stdio.hならなにも要らず、math.hなら-lmが要るなど.
man ld, man gccでも特に無いようです.Cの言語仕様書に書いてある
のでしょうか?


61 :デフォルトの名無しさん:03/03/10 22:40
>>59
そしてお前が主犯

62 :52:03/03/10 22:44
>>60
分かっているよ。>>52-54あたりからの流れだw

ヘッダーファイルじゃなくてリンカーに標準じゃリンクしてくれないライブラリをリンクしてくれという
オプションのことでしょ?それの一覧がどこにあるかはわからないなぁ。
-lにライブラリのファイル名のlibと.aを取り除いたものをつければいいんじゃないかな?


63 :60:03/03/10 22:48
>>62
死ね

64 :52:03/03/10 22:49
>>63
知ったかだったらスマソ

65 :デフォルトの名無しさん:03/03/10 22:52
>>64
オマエモナー

66 :55, 60:03/03/10 23:06
>>62 ああ、すいません、man ldはやってみまして、
lib"hoge".{so.a}なら-lhogeだというのは書いてあったん
ですが、それだと、math -> libm.soという変換がやはり
出来るためのテーブルがどこかにないと困ることになりま
すよね... man mathでmath.hは出てくるんですが、そこにも
math.hで定義される関数のオブジェクトはlibm.soにあるとは
一言も書かれていないんです.

67 :デフォルトの名無しさん:03/03/10 23:09
>>66
/usr/libあたりから自分で探す

68 :デフォルトの名無しさん:03/03/10 23:19
ガムバレガムバレガムバレ

69 :デフォルトの名無しさん:03/03/10 23:20
インクルードファイルとライブラリモジュールの名前に関連性はないよ。
同じにしているライブラリも在るってだけ。
例えばxmp画像を扱うライブラリはlibxpm.aでインクルードはxpm.hだけど。
大きなライブラリだと多対一だしね。

70 :デフォルトの名無しさん:03/03/10 23:23
borland の import32 とか?

71 :デフォルトの名無しさん:03/03/10 23:23
C++なんですが。

class unko{
char* func(int c);
};

char* unko::func(int c){
int k = new int[c];    // ←A
  ・
   ・
  return k; // ←B
}

-----------------------------
int main(int argc,char* argv[]){
unko un;
un.fun(4);
}

としてますが、Aのメモリー解放をどこでしたら良いのでしょう?
というのも、return で返すときにしようしている。



72 :デフォルトの名無しさん:03/03/10 23:23
>>69
libc.aがいい例だな。

73 :デフォルトの名無しさん:03/03/10 23:25
>>71
C++ならC++のスレで
それにしても阿呆だなぁ。

74 :71:03/03/10 23:25
×int k = new int[c];    // ←A
○char k = new char[c]; // ←A


75 :デフォルトの名無しさん:03/03/10 23:26
strdupは使用者がfreeで解放しろと言っているね。

76 :デフォルトの名無しさん:03/03/10 23:26
char* k だべさ

77 :デフォルトの名無しさん:03/03/10 23:26
>>73
おしえて〜。


78 :71:03/03/10 23:29
>>76
ああ、そうだった。君が正解。
mallocは使ったことないのでよろぴく。>>75


79 :デフォルトの名無しさん:03/03/10 23:30
>>78
return後もその領域を参照するなら、その関数とは別のところで解放しないとだめだろ。

80 :55, 60, 66:03/03/10 23:31
>>69 ががーん.分かりました.必ずしも何らかの命名規則によって変換
出来るようなものではないということですね.
一応私もgoogleなどで探してみたんですが、こういう(私からみれば
それこそ無いと致命的と思われる)ものが転がっていないという
ことはすなわちコンパイラ(リンカー)依存だということですかね?
#include ""ではなくて#include <>として使う標準ヘッダ(?)の関数が
自由自在に自分で探せて、使えるようになるだけでも出来ることが
広がりそうなんですが.

81 :デフォルトの名無しさん:03/03/10 23:33
man

82 :デフォルトの名無しさん:03/03/10 23:33
>>79
サンプル例をよろしく。


83 :デフォルトの名無しさん:03/03/10 23:36
何様のつもりだろう。板違いのくせに。

84 :デフォルトの名無しさん:03/03/10 23:36
じゃなくてスレ違い

85 :デフォルトの名無しさん:03/03/10 23:37
しっかりドキュメントしていればどこでもいいんじゃない?
main の中でも、unko クラスに破棄専用のメソッドを作っても。

86 :55, 60, 66, 80:03/03/10 23:38
http://cham.ne.jp/piro/p_stdfunc.html
などでCの標準関数一覧は見つけました(本にも載っている)が、コン
パイル時につける-lmなどのオプションとの相関はやはり無いようです.
ちょっと基本的質問のような気がしてきましたのでもう少し自分で
調べてみます.明日も学校があるのでもう寝ます.ありがとうござい
ました.

87 :71:03/03/10 23:38
>>85
あっそうなんだ。ありがとう。



88 :デフォルトの名無しさん:03/03/10 23:40
>>86
そりゃそうだ。
仕様ではファイル名は一部のヘッダーファイルしか定義されていないからね。

89 :デフォルトの名無しさん:03/03/10 23:53
char buf[]="192.168.0.1/24";
int ipaddr;
int subnetmask;

という状態で、bufにあるデータをipaddrとsubnetmaskへ分ける最も効率の
良い方法をアドバイスください。

私は、
int i;
char addr_tmp[20];
と追加して、
for(i=0; i<strlen(buf); i++)
if(buf[i] == '/')
buf[i] == 0x20;

として、スラッシュをスペースに変え、

sscanf(buf, "%s%d", adr_tmp, subnetmask);
inet_atonで、アドレスを数値に変えてます。

こんなんでいいでしょうか?
なんかスラッシュをスペースに変えてるところが無駄に思えるんですが。。



90 :55,60,66,80,86:03/03/10 23:58
>>88 ありがとう.math.h <-> libm.soの対応表は
また探します.すくなくともgcc-3.2.2のtar.gzの中には
無かったです.みんなどうしているんだろうか.
朝練もあるんでもう寝ます...


91 :デフォルトの名無しさん:03/03/11 00:01
>>90
アーカイブの中身をリスティングするとか・・・常識とか・・・

92 :デフォルトの名無しさん:03/03/11 00:01
試してないけどこれじゃあかんかな
char* p = strchr(buf, '/');
if (p) {
subnetmask = atoi(p+1);
*p = '\0';
strcpy(addr_tmp, buf);
}


93 :デフォルトの名無しさん:03/03/11 00:02
>>89
スペースに置き換えなくてもいいでしょ。
sscanf(buf, "%s/%d", adr_tmp, subnetmask);
これでいけない?

94 :デフォルトの名無しさん:03/03/11 00:03
スペースを0x20なんて書き方するなよ。

95 :93:03/03/11 00:04
おいおい。
%[^/]/%d
こうだった(鬱

96 :89:03/03/11 00:06
>>92
ちょっと試してみます。
>>93
そう思ってましたが、なぜか最初の%sで全ての文字列を取得してしまいます。
どうやら、スペース、タブ、改行以外は区切り文字にできないようです。

>>94
ホントはデファイン切ってあるんだけどね。


97 :93:03/03/11 00:07
>>96
そうそう。うっかりしていた。
だから/を含まない文字列と/と数字列に分けるようにしてみた。試していないけど。>>95

98 :97:03/03/11 00:12
ダメみたい。。。スマソ
確かこんな感じの書き方があったと思ったんだが。

99 :55,60,66,80,86,90:03/03/11 00:12
gccの中みても意味ないのかもしれません.binutils-2.13.2.1
の中も見ましたがやはりありませんでした.
>>91さん,そのライブラリの中身をリスティングとはどうやるの
ですか!? 本当にもう寝ます.

100 :97:03/03/11 00:13
あ、やっぱりできた。sscanfの第一引数を間違えていただけだった。

101 :89:03/03/11 00:13
>>98
いけました!!
かなりグッドです。
どうやら、私の書いているsscanfにもミスがありました。
subは&subで渡すといけました!!



102 :89:03/03/11 00:21
ちなみに>>92さんのを試してみましたが、
コアダンプしてしてしまいました。
なぜかな。。


103 :デフォルトの名無しさん:03/03/11 00:22
>>99
lib*.aというアーカイブに関数名.oというオブジェクトファイルがたくさん入っていると思うから
それから探せばいいかなと・・・現実的じゃないけど。

104 :55,60,66,80,86,90,99:03/03/11 00:23
最後に一つだけ.>>91 さん,ひょっとしてnmですか!
たしかに関数名っぽいのがずらずら出てきた
これと*.hの中身を比べてどの*.hがlib*.soに対応して
いるのかを自分でひまな時調べて表にしておけば行け
そうです.-lmなどのオプションは結局謎のままでしたが.

105 :デフォルトの名無しさん:03/03/11 00:25
そんなコマンドがあったのか・・・
ldd(共有ライブラリへの依存関係を表示するコマンド)も最近知ったばかりだしな・・・

106 :デフォルトの名無しさん :03/03/11 01:03
ar --help
man ar

107 :デフォルトの名無しさん:03/03/11 05:28
>>104
そういったことが本格的に必要なら、autoconfを使うことを考えた方がいい。

あるいは、最近はgtk-configとかpkg-configなんて仕組みでオプションを提供
する仕組みもある。

$ gtk-config --cflags
-I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include

$ gtk-config --libs
-L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm

$ pkg-config gnome --cflags
-DNEED_GNOMESUPPORT_H -I/usr/include/gnome-1.0
-I/usr/lib/gnome-libs/include -I/usr/include/gtk-1.2
-I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include

$ pkg-config gnome --libs
-L/usr/lib -lgnome -lgnomesupport -lesd -laudiofile -lm -lglib


108 : ◆8/MtyDeTiY :03/03/11 09:48
みんな、assert() って使ってるカイ?

109 :ヽ(´ー`)ノ:03/03/11 10:02
使ってるけど?デバグの時に便利だよ。

110 :デフォルトの名無しさん:03/03/11 13:42
あたぼうよ。
あれ使わずしてバグが取れるかってえんだ、べらぼうめ。

111 :デフォルトの名無しさん:03/03/11 13:51
貧弱な坊やだった僕も、assert()を知ってからたった一週間で

112 :デフォルトの名無しさん:03/03/11 14:07
abort() うざい

113 :デフォルトの名無しさん:03/03/11 15:33
デバッグはprintfにかぎるよヽ(´ー`)ノ

114 :デフォルトの名無しさん:03/03/11 16:15
私はfprintf()だなぁ。

115 :55,60,66,80,86,90,99,104:03/03/11 17:05
>>107さん.ありがとう.autoconfで本格的にというのはまだ先だと思うので
すが、役立ちます.<>で指定するようなヘッダでもstdio.hのように何もgcc実行時にoptionが必要ないものがあったかと思うと、その一方でmath.hのように
-lmが必要だったりする、という一見規則がない(しかもその規則を書いた
文書が見当たらない)Cの(UNIXの?ANSI Cの?)header、リンカのシステムが
疑問だったのです.gtk-configやpkg-configの開発者の人たちはこれらの
規則を分かっていると思われるのでこれらの中身を調べて見ます.
多分math.hがあれば-lmを足す、という計算をしている部分があるはずですね.



116 :デフォルトの名無しさん:03/03/11 17:19
>>115
> 多分math.hがあれば-lmを足す

全然違う・・・

117 :デフォルトの名無しさん:03/03/11 17:22
>>115
ヘッダーファイルは切り離して考えろって。

118 :デフォルトの名無しさん:03/03/11 17:37
>>115
とりあえずman 3 introしる。




119 :55,60,66,80,86,90,99,104,115:03/03/11 18:12
>>116さん、違うんですか?(--;)
>>117さん、-lmなどのオプションはヘッダファイルをインクルード
したかではなく,どの関数を使ったかで決まる、という意味ですか?
>>118さん、おお、あなたは神です.Vine Linuxでman 3 intro
としたら、こんなのがありました.
(3M) These functions are contained in the arithmetic library
libm. They are used by the f77(1) FORTRAN compiler by
default,but not by the cc(1) C compiler, which needs
the option -lm.
(3M) 数学ライブラリ libm を構成する関数です。f77(1)コンパイラ
ではデフォルトで使われますがcc(1)コンパイラではそうでは
ありません.(=自動的にはリンクされません。Cコンパイラで
-lmオプションが必要です.
とそのものずばりがありました!

120 :デフォルトの名無しさん:03/03/11 18:17
なんで strtol の第二引数に const が付いてないんだ!!!

121 :デフォルトの名無しさん:03/03/11 18:26
constなんぞ使うのは若造

122 :55,60,66,80,86,90,99,104,115,119:03/03/11 18:26
しかも自分のPCのLinuxでman 3 introだとあまり他の記述は無い
ですが、大学の計算機センターのSolarisでman -s 3 introすると、
libmなら-lm, libmailなら-lmail, libmpなら-lmp, libnvpairなら
-lnvpair, などなど(実に50種類も!)ときちんと載っていました.
あとman sinとすれば(Linuxでは載っていなかったですが)
cc [ flag ... ] file ... -lm [ library ... ]とありました.
もちろん私が蛸だったのですが、man gcc, man ldなどで
SEE ALSO intro(3)と書いてあればこんなに時間を取られなかった
のになあ...sectionの概要はintroを引けというのは常識という
ことのようですね.

123 :デフォルトの名無しさん:03/03/11 18:28
>120
委員会がどこにconstをつけるべきかで悩んだからconstはついてません(w

124 :bloom:03/03/11 18:35
http://www.agemasukudasai.com/bloom/

125 :デフォルトの名無しさん:03/03/11 23:26
C言語なら俺に聞いてみなよ。

126 :デフォルトの名無しさん:03/03/12 00:12
mallocがリエントラントかどうかを判断するにはどうすりゃいいでしょう。
マニュアル読むんじゃなくて、コンパイル時にマクロかなんかで判断させたい。

127 :デフォルトの名無しさん:03/03/12 00:14
>>126
>>1
> 標準Cではできない事の質問は使用している開発環境のスレへGo!

スレ違いです。

128 :デフォルトの名無しさん:03/03/12 00:20
特定の環境ではなくて、移植性に関する問題だろう。
残念ながら簡単に調べる方法は知らないが。

129 :デフォルトの名無しさん:03/03/12 00:27
仮に分かるとしてもそれを保護する方法が環境依存なんだからだめだろう


130 :デフォルトの名無しさん:03/03/12 00:35
なにやら一部のスレが混乱中みたいだけど、ここはマターリヽ(´ー`)ノ

131 :C言語:03/03/12 00:37
C言語ですが、何か?

132 :デフォルトの名無しさん:03/03/12 00:48
おまいらはC以外にどんなプログラミング言語がつかえる?

133 :デフォルトの名無しさん:03/03/12 00:52
仕事がきたら、それにあわせて使う。

134 :デフォルトの名無しさん:03/03/12 00:54
>>132
ないから今織田信長を勉強中。

135 :デフォルトの名無しさん:03/03/12 00:58
>>134
マゾっすか?

136 :デフォルトの名無しさん:03/03/12 01:03
try{
本能寺
}
catch(光秀){
MessageBox(_T("是非も無し"));
}

137 :デフォルトの名無しさん:03/03/12 01:03
>>135
日本人だからな!

138 :デフォルトの名無しさん:03/03/12 01:04
abort()を入れるべきか・・・

139 :デフォルトの名無しさん:03/03/12 03:31
人生(五十年) {
if (下天 == 夢幻) {
}
}




140 :デフォルトの名無しさん:03/03/12 13:24
>>126
無理ぽ。確実にreentrantなmallocが欲しければ自分でラッピングすべし。

141 :デフォルトの名無しさん:03/03/12 14:05
今更なんですが.....
>>32
http://www.vector.co.jp/soft/dl/win95/prog/se037541.html

142 :デフォルトの名無しさん:03/03/12 14:29
質問です。
printhってなんですか?

143 :デフォルトの名無しさん:03/03/12 14:35
>>142
plinthの誤植

144 :デフォルトの名無しさん:03/03/12 15:23
>>141
でもLSI-Cって、ANSIとの互換性にあちこち問題があるんだけど……
intも16bitだしスモールモデルしか扱えないし……

145 :デフォルトの名無しさん:03/03/12 16:07
>>144
試食版はね。<スモールモデルのみ

いまどき、64KBで制限されるって言われてもねぇ。

146 :デフォルトの名無しさん:03/03/12 16:53
つうか今時LSI-C(略

147 :デフォルトの名無しさん:03/03/12 16:56
つうか今時(略

148 :デフォルトの名無しさん:03/03/12 17:38
あるコマンドをやるとダイアログが出るように
してるのですが、それが別ウインドウの裏に隠れて、見えないときがあるのです。
それを改善するためにダイアログを常にアクティブにしたいのですが、
どのようにソースに組み込んだらいいのでしょうか?
どなたか教えてください。
よろしくお願いします。

149 :デフォルトの名無しさん:03/03/12 17:41
>>148
まずは>>1の内容を読んで下さい。
OSすら書いてないのにどう答えろと・・・

150 :デフォルトの名無しさん:03/03/12 17:41
>>148
激しくすれ違い。
それに、GUI環境によって答えが変わるので最低限環境を書かないと話が進まない。
まぁ、「常にアクティブ」ではなくて「最前面に配置する」設定があると思われ。

151 :148:03/03/12 17:43
すいません、OSはXP Homeです。
環境は、VisualStudio.NET2002です。
どうかよろしくお願いします。

152 :デフォルトの名無しさん:03/03/12 17:43
>>1を嫁
> GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo!

153 :デフォルトの名無しさん:03/03/12 17:54
>>148
まず日本語を勉強しろ。

154 :デフォルトの名無しさん:03/03/12 21:04
最前面の間違いだろうが、
もしも常にアクティブになったらウザイよなー
それ閉じるまで他に何も出来んじゃん。

155 :デフォルトの名無しさん:03/03/12 21:21
最前面てことなら SetWindowPos() だな。

156 :デフォルトの名無しさん:03/03/12 21:44
SetWindownullPos()

157 :デフォルトの名無しさん:03/03/12 22:35
>>156


158 :デフォルトの名無しさん:03/03/12 22:55
システムモーダルの事か?

159 :デフォルトの名無しさん:03/03/12 23:00
話を続けるのも気が引けるが、
9x系はウインドウ開いたら一番上にくるが、
2000/XP系は必ず一番上にはこないで点滅のみ、
という仕様のことでは

160 :デフォルトの名無しさん:03/03/12 23:20
ドサクサマギレニ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/  
 (_フ彡        /  ←>>156



161 :デフォルトの名無しさん:03/03/12 23:27
なんとなく流しちゃってましたが、160の突っ込みでやっと気づきました。
ありがとう160。
ありがとう156。氏ね。

162 :デフォルトの名無しさん:03/03/13 09:27
ものすごく(゚ξ∴д。)グヒャな質問ですが、
標準関数だけでファイルのサイズを取得するにはどの関数ですか?

WinAPIならGetFileSizeとか標準関数でなければ_fstatなどあるようですが。。。

163 :デフォルトの名無しさん:03/03/13 09:47
>>162
len = fseek(file,0,SEEK_END); とか。

164 :デフォルトの名無しさん:03/03/13 13:03
>>163
stat()でもいいじゃん。

165 :デフォルトの名無しさん:03/03/13 13:27
>>163
それじゃだめだろ。
fseekしたあとにftell

>>164
標準関数じゃない。

166 :デフォルトの名無しさん:03/03/13 21:25
#include <iostream>
using namespace std;
int main()
{
cout << "abc";





return 0;
}
error LINK 2019 未解決の外部シンボル
fatal error LINK 1120 外部参照が未解決です。
と出て本文にはフォーカスがかからないのですが、どういうエラーなのでしょうか?

167 :デフォルトの名無しさん:03/03/13 22:19
>>166
error thread 5963 スレ違いの質問です。

168 :デフォルトの名無しさん:03/03/13 22:21
>>167
ほう、C言語には関数名間違いによるリンカエラーがないと。そうおっしゃる?


169 :デフォルトの名無しさん:03/03/13 22:22
>>162
C には 「ファイルサイズ」 という概念が定義されていない。
素直に環境依存の方法を取った方がいい。

170 :デフォルトの名無しさん:03/03/13 22:23
>>168
166 は C 言語じゃない。

171 :デフォルトの名無しさん:03/03/13 22:25
>>170
もうしゃべるな。恥の上塗り。

172 :デフォルトの名無しさん:03/03/13 23:00
(´-`).。oO(…)

173 :デフォルトの名無しさん:03/03/13 23:01
>>171
( ´д)ヒソ(´д`)ヒソ(д` )

174 :デフォルトの名無しさん:03/03/13 23:15
つーか、モロにマルチだったという説

175 :デフォルトの名無しさん:03/03/13 23:45
うむ。マルチ放置。

176 :デフォルトの名無しさん:03/03/14 11:48
昔かじったCをはじめから再勉強するにはどの参考書がいいですか?


177 :デフォルトの名無しさん:03/03/14 12:36
>>176
前橋のポインタ本

178 :デフォルトの名無しさん:03/03/14 19:28
ポインタとカーソルは違うものですよ、奥さん。

179 :デフォルトの名無しさん:03/03/14 19:39
じゃあ、マウスポインタをマウスカーソルと言い換えても普通に通じるのは
何でですか?

180 :デフォルトの名無しさん:03/03/14 19:50
>>178
ガッ

>>179
何を言っとるんだね君は。

181 :デフォルトの名無しさん:03/03/14 20:06
>>180
ガッ

>>180
何って、戯れ言。

182 :デフォルトの名無しさん:03/03/14 22:51
>>179
通じませんよ?

183 :デフォルトの名無しさん:03/03/15 00:56
int *hoge;
hoge = (int *)malloc(sizeof(int));
free(hoge);

とやって、4行目以降ですでにhogeがfreeされているって事を知ることは出来ます?

184 :デフォルトの名無しさん:03/03/15 01:00
if (hoge)

185 :デフォルトの名無しさん:03/03/15 01:00
無理

186 :184:03/03/15 01:07
ごめん嘘書いた。

187 :デフォルトの名無しさん:03/03/15 01:09
>>183==>>126

188 :デフォルトの名無しさん:03/03/15 01:22
#define myFree(x) {if (x){free(x);x=NULL;}}

int *hoge;
hoge = (int *)malloc(sizeof(int));
myFree(hoge);
if (hoge) {
 fprintf(stderr, "メモリ使用中だっちゃ\n");
}

189 :デフォルトの名無しさん:03/03/15 01:34
>>188
freeはぬるぽを渡しても大丈夫(なにもしない)からマクロのifは不要。

190 :デフォルトの名無しさん:03/03/15 08:18
>>189
知ってるけど、別にいいじゃんか。


191 :デフォルトの名無しさん:03/03/15 09:01
>>189
ガッ

192 :デフォルトの名無しさん:03/03/15 10:11
>>190
if文のコストしらねーのかボケ!

193 :デフォルトの名無しさん:03/03/15 10:29
>>192
大抵の環境では最適化を有効にすれば関係無くなると思うんだが。

194 :193:03/03/15 10:30
あぁ、だからと言って「if 文入れてもイイじゃん」とは思わないが。

195 :デフォルトの名無しさん:03/03/15 10:45
もしNULLでコールされる可能性があるような場合は
if文のコストより関数オーバヘッドの方がでかいと思う。

でもそんな何クロックレベルの話ししてもしょうがないだろう。
テンケー的な机上の議論だね。

おれもfreeと=NULLは必ずセットで書くよ。(マクロは使わないけど)
NULLチェックすれば有効かどうかわかるもんね。

196 :188:03/03/15 10:51
どもです。「freeしたものがNULLになればわかるのに」と思ってはいたんですが、
NULLを代入すればいいというのには気づきませんでした。言われてみれば・・・なんですが
完璧に盲点。おかげさまで助かりました。

197 :デフォルトの名無しさん:03/03/15 10:52
あ、ミス。183です。

198 :デフォルトの名無しさん:03/03/15 14:07
漏れ以外に、if付ける派は
居るかい?


199 :188:03/03/15 14:55
仕事で使っているマクロとはちょっと違うけど、あんなもんです。
つまり私もif付ける派ってことで。

200 :制御屋さん見習中:03/03/15 18:13

質問です。

gcc(windows版)を使っていて、以下のwarningがでます。

Warning : assignment makes pointer from integer without cast.

これはどのようないみなのでしょうか?




201 :デフォルトの名無しさん:03/03/15 18:18
>>200
int型にint型でないものを代入しようとしている。

202 :デフォルトの名無しさん:03/03/15 18:22
if は使わない派。NULL じゃなくても不定ポインタかもしれないし(w
チェックしてもあまり意味が無いような。

203 :デフォルトの名無しさん:03/03/15 18:45
if使うのはたいていfreeのリファレンス読んだこと無い奴が多い。
NULLの代入はポインタを再利用するときだけだろ。

204 :デフォルトの名無しさん:03/03/15 19:08
どっちでもいいことだ

205 :デフォルトの名無しさん:03/03/15 19:11
>>203
ま、関数コールのコストとifかますコストを考えて
ifをかます判断もありえるわけだけど。

でもこのコスト差が効いてくるのってfreeに渡すポインタが
ほとんどぬるぽのときになんだよな。
あんまり考えられるシチュエーションじゃない。

ぬるぽじゃない場合がほとんどであればかえって余計なifの
コストがかかってくるわけで。

というわけでおれはifで先にぬるぽを引っ掛けたりしないな。

206 :デフォルトの名無しさん:03/03/15 19:12
ていうか、free自体使わない

207 :デフォルトの名無しさん:03/03/15 19:18
>>206
OSが全部解放するからいらないと(w
この話続けてもfjみたいに泥沼になるだけ

208 :デフォルトの名無しさん:03/03/15 19:20
プロなら万が一に備えてif(p) free(p)し、mallocを使わずcallocにすべき。

209 :デフォルトの名無しさん:03/03/15 19:25
>if(p) free(p)
でどんな万が一が防げるの?

210 :ヽ(´ー`)ノ:03/03/15 19:29
>>208
なぜ calloc がそこで出てくる?


211 :デフォルトの名無しさん:03/03/15 19:30
>>210
callocの方が通っぽいからヽ(´ー`)ノ

212 :デフォルトの名無しさん:03/03/15 19:32
>>201
違うだろ。
キャストなしにint型をポインタにしようとしているんだろ。

213 :デフォルトの名無しさん:03/03/15 19:33
C歴5年にしてついにmallocを使っちゃいました。どきどき

214 :デフォルトの名無しさん:03/03/15 19:44
>>209
万が一内部でNULLチェックを怠っている処理系があるかもしれない。

>>210
百が一アロケートしたバッファの未初期化領域を参照してしまうバグがあるかもしれない。

215 :デフォルトの名無しさん:03/03/15 19:45
通はmallocもfreeもつかわない

reallocオンリー、これ

216 :デフォルトの名無しさん:03/03/15 19:47
標準ライブラリくらい信用しないとやってられねぇよ。

217 :デフォルトの名無しさん:03/03/15 19:48
とあるプロジェクトで#define malloc(size) calloc(1, size)したら直ってしまったバグがあり
今もそのマクロが有効であることは機密事項である。

218 :ヽ(´ー`)ノ:03/03/15 19:49
>>213
お前は5年間何をしていたのかと小一時間問い詰めたい。

>>214
そんなの言い出したら calloc だってどんなバグがあるか分からんだろ。
ワケワカメな事言ってるなぁ。

219 :デフォルトの名無しさん:03/03/15 19:49
>>214
規格を無視した実装のことまで考えてられなくない?
そんなこと言ったら free() 以外の標準関数のほとんどは(ry

220 :デフォルトの名無しさん:03/03/15 19:51
>>218
はげどう。
きちんと0に初期化してくれているかどうか心配だ。

>>219
はげどう

221 :デフォルトの名無しさん:03/03/15 19:53
もっともメジャーでもっとも合理的な命名規則教えて

222 :デフォルトの名無しさん:03/03/15 19:53
callocはmallocに比べると随分遅いだろ。
まあ、その遅さが実際に問題になることはそうはないとおもうが。


223 :デフォルトの名無しさん:03/03/15 19:54
>>221
ループカウンターにはiという名前をつける。複数ある場合は、j,kと。

224 :デフォルトの名無しさん:03/03/15 19:58
>>223
Fortranなら。

225 :221:03/03/15 19:59
>>223
個別の規則じゃなくってハンガリアンとかまとまったものが知りたいです

226 :デフォルトの名無しさん:03/03/15 19:59
>>225
別スレにどうぞ。

227 :221:03/03/15 20:04
>>226
これって言語に依存した話だと思うんだけど

228 :デフォルトの名無しさん:03/03/15 20:13
しません。

229 :ヽ(´ー`)ノ:03/03/15 20:21
>>221
とりあえず一通り読んでみたら?
 http://pc2.2ch.net/test/read.cgi/tech/1011026963/

どうせ宗教問題になるのが目に見えてるから、「好きなの使え」で
イイと思うよ。多人数でやる場合は仲間内で意見の統一が取れてれば良い。
実際問題、C で色んなライブラリを使ったソフトウェアを作る場合、
各々のライブラリの命名規則がバラバラなんてザラ。

Java や Win32API のように、推奨されている命名規則があるなら
それを使うべきだし、あっちの API とこっちの API の命名規則が
違うなんてことはあんまりない。

個人的には意味の分かる命名…かな。openssl のコードとか。
まぁいずれにせよ、ここでやるのは適切じゃないと思われ。


230 :デフォルトの名無しさん:03/03/15 20:24
>>221
>もっともメジャーでもっとも合理的な命名規則
んなの、「リンネの2命名法」に決まっとるがな。

231 :デフォルトの名無しさん:03/03/15 20:32
PC/AT 互換機の内蔵ブザーを鳴らしたいのですが
ポート番号がわかりません。
DOS 使用です。
御存じの方、教えて下さい。


232 :デフォルトの名無しさん:03/03/15 20:33
>>222
遅さが問題になった時は、すぐに malloc に書き換える事が出来る。
最初から malloc だった場合はそうはいかない。
ロジックを根本から考え直す必要が出てくる。

これが本当のプロの仕事というものだ。

233 :デフォルトの名無しさん:03/03/15 20:39
#include <stdio.h>
void main(void){
fputc('\a',stderr);
}

main関数がvoidなのは、やる気がないから(笑
実際は、マクロにしてやるといいと思われ。

234 :ヽ(´ー`)ノ:03/03/15 20:39
>>230
ググって色々読んでみたけど面白かったよ、ありがとう。

>>232
最初から malloc だったら、そもそも遅さが問題になる事は無いと思うんだが。
普段は malloc、必要に応じて calloc。これのどこに問題があるっていうの?
わざわざ遅い処理を無駄に行う事もないだろう。

235 :デフォルトの名無しさん:03/03/15 20:39
>>230
これからのプログラマはラテン語が必修科目ってこと

236 :デフォルトの名無しさん:03/03/15 20:39
>>232
?何のこっちゃ

237 :デフォルトの名無しさん:03/03/15 20:43
gccはコンパイラだけで、プリプロセッサやリンカーは他のソフトを使っているということ??

238 :デフォルトの名無しさん:03/03/15 20:46
callocを使った。
遅さが問題になった
malloc に書き換えた
解決した

……このロジックをとりあえず根本から考え直す必要が(笑)

239 :制御屋さん見習中:03/03/15 20:48
200での質問の続きです。

int i, j, k, n;
matrix a;
a = new_matrix(n, n);
メイン関数は上記です。

関数は以下。
この警告は、無視していいのですか?

matrix newmat(int nrow, int ncol)
{
int i;
matrix a;

a = malloc((nrow + 1) * sizeof(void *));
if (a == NULL) return NULL; /* 記憶領域不足 */
for (i = 0; i < nrow; i++) {
a[i] = malloc(sizeof(SCALAR) * ncol);
if (a[i] == NULL) {
while (--i >= 0) free(a[i]);
free(a); return NULL; /* 記憶領域不足 */
}
}
a[nrow] = NULL; /* 行の数を自動判断するための工夫 */
return a;
}


240 :制御屋さん見習中:03/03/15 20:48
続き

matrix new_matrix(int nrow, int ncol)
{
matrix a;

a = newmat(nrow, ncol);
if (a == NULL) error("記憶領域不足.");
return a;
}

宜しくおねがいします。

241 :デフォルトの名無しさん:03/03/15 20:49
www.sra.co.jp/public/sra/product/wingnut/gcc/gcc-j.html

我々は、"GCC" をコンパイラシステム全体を指す名前として使う。
もう少し正確には、このコンパイラの言語非依存部を指す。
例えば、「GCC」の動作に影響する最適化オプションと言ったり、
あるいは単に「コンパイラ」と言ったりすることもある。

242 :デフォルトの名無しさん:03/03/15 20:50
RTOSシステムじゃ要求仕様からしてその程度の違いが
致命的なことってあるよね。
でもそーゆーのはヒープなんざ使わんでシステムコールでとる罠。

つーわけで処理速度の話し意味ないってw

243 :デフォルトの名無しさん:03/03/15 20:52
mallocも内部でシステムコールを呼んでいると思うけど・・・brkとか。

244 :デフォルトの名無しさん:03/03/15 20:53
>>239
ところで、関数のプロトタイプ書いた?

245 :デフォルトの名無しさん:03/03/15 20:59
if(abc==0)

246 :デフォルトの名無しさん:03/03/15 21:00
>>239
matrixって何よ!っていう話と思われ。
わけがわからないものはint型と無理に解釈するコンパイラもあるし。

247 :デフォルトの名無しさん:03/03/15 21:02
>>246
無理じゃなくて規格でそうなっているはず(宣言のない関数の戻り値の型のことでしょ?)。

248 :制御屋さん見習中:03/03/15 21:13
すみません、ソース全部乗っけれなかったので、

matrix.h

#ifndef MATUTIL
#define MATUTIL

#include <stdio.h>
#include <stdlib.h>
#ifndef SCALAR
#define SCALAR float
#endif
typedef SCALAR *vector, **matrix;

です。

で、自己レス。
>>244さんの言うとうりでした。

ところで、さらに質問です。
大規模(大人数)プログラムで、
ある機能を追加するような、サブルーチンを
作る状況があったとします。。

そんな時、例えば、func.cと新規にファイルを作って作ったとします。
このとき、プロトタイプ宣言とか、#defineとかは、全部func.cで閉じたほうが良いのでしょうか?

今回、確認の為に、適当にmain関数をつくって確認したため、先に質問した質問警告がでて、困りました。
うまい開発方法を教えてください。
識者の方宜しくお願いします。


249 :246:03/03/15 21:14
規格でそうなってたのか……

250 :デフォルトの名無しさん:03/03/15 21:16
>>248
言っている意味がよくわからんが、他のファイルからも呼び出される関数の宣言や他のファイルでも使われる変数、型の定義はヘッダーファイルですべき。


251 :デフォルトの名無しさん:03/03/15 21:17
>>234
>最初から malloc だったら、そもそも遅さが問題になる事は無いと思うんだが。
そうではない。後々問題となりそうな部分を「早期に」発見することが出来る。

calloc で遅さが問題になった時には
・ロジックを根本から考え直す
・malloc に書き換える
という2つの選択肢がある。
基本的には前者の方法で対策を取るが、
納期対応等、非常時の場合は後者の選択をすること「も」できる。

malloc の場合にはそうはいかない。

252 :250:03/03/15 21:17
すべきというか、しないと面倒だ。

253 :デフォルトの名無しさん:03/03/15 21:17
>>248
> プロトタイプ宣言とか、#defineとかは、全部func.cで閉じ
そんなことしたらほかのソースで使えないと思う。

254 :デフォルトの名無しさん:03/03/15 21:17
プロトタイプ宣言は.hで。


255 :デフォルトの名無しさん:03/03/15 21:18
>>254
staticな関数のプロトタイプ宣言は.cで。

256 :デフォルトの名無しさん:03/03/15 21:21
>>251
もういい、しゃべるな。

257 :250:03/03/15 21:21
extern int i;とかは変数の「定義」じゃなくて「宣言」だな(鬱

258 :デフォルトの名無しさん:03/03/15 21:28
>>251
メモリ確保に malloc() しか使わないなら、そもそもメモリ確保について何も
考えなくてよく、ロジックの再検討に集中できる。
検討事項が多く挙がれば挙がるほど、そのプログラムの品質は低いという事だ。

259 :制御屋さん見習中:03/03/15 21:30
>>250,252,253.254

ありがとう御座います。

こうですか?

header.hに
/* includeするファイル*/
#include <stdio.h>

/* 定義文*/
typedef SCALAR *vector, **matrix;
typedef float matNL[N][L];

#define N 10 /*10×10行列とする*/

/* プロトタイプ宣言*/
void error(char *message);
vector newvec(int n);

func.cに
#include " header.h"
を宣言して、関数色々記述。

と、いう感じですか?

260 :デフォルトの名無しさん:03/03/15 21:31
>>247
どうして戻り値の型の話になるんだ?
239 の以下のコードは、matrix が宣言されていない限り規格では通らない。

> matrix a;


>>249
なってない。
騙されるな、247 にはこう書いてあるだろう。

> (宣言のない関数の戻り値の型のことでしょ?)

261 :デフォルトの名無しさん:03/03/15 21:31
>> プロなら万が一に備えてif(p) free(p)し、mallocを使わずcallocにすべき。
>> calloc で遅さが問題になった時には
*初期化*で速度が遅くなったとき、なんの*ロジック*を考え直すのでしょうか?
設計からやり直すようなのって、プロじゃないような


262 :デフォルトの名無しさん:03/03/15 21:32
>>260
MATLABじゃないの?

263 :260:03/03/15 21:34
ごめん。

264 :262:03/03/15 21:34
ごめん、これ。
http://www.sra.co.jp/people/miyata/algorithm/matutil.txt


265 :デフォルトの名無しさん:03/03/15 21:35
>>260
>>248でそれが原因だったと言っているが。

266 :デフォルトの名無しさん:03/03/15 21:36
>>259
>/* includeするファイル*/
>#include <stdio.h>

includeはプログラムごとにした方が良くないか?

あと、規模にもよるが、定義文とプロトタイプ宣言は分けた方がいいかも。


267 :デフォルトの名無しさん:03/03/15 21:38
>>266
俺もヘッダーファイル内でincludeはあまり好きじゃないけど、関数の引数や戻り値にsize_t等を使う場合はしかたないんだよね。。。

268 :デフォルトの名無しさん:03/03/15 21:40
/* typedef int * pint; */
pint p;

こう書いた場合、pをint型にしちゃう処理系があるの?エラーにしないで?

269 :デフォルトの名無しさん:03/03/15 21:40
>>267
ああ、意図していることがわかった。
スマソ

270 :デフォルトの名無しさん:03/03/15 21:42
ちょっと派生した疑問だけど、
.hでincludeする場合と.cでincludeする場合ってどう切り分けるべきなんだろう?
普段は汎用クラスは.hでinclude、依存関係のあるクラスは.cでincludeしてるんだけど
そんな感じでいいのかな?何か哲学とかある?

271 :267,269:03/03/15 21:45
>>270
うちはそんな感じですが。
つか、コーディング規約でそうなってます。

272 :デフォルトの名無しさん:03/03/15 21:47
>>270
ヘッダでのインクルードは、最小限にする。

273 :デフォルトの名無しさん:03/03/15 21:56
abort と exitってどう使い分けますか?

malloc失敗したときなんかはどっちを呼んだらいいか判らなくて
悩んでいます。何をもって異常としていいんだろう。

もうひとつ
cygwinのgcc3.2.3だと
#include <stdlib.h>
main(){
 abort();
}
はsegmentation fault(Core dumped)になります
不思議です。

マジレスきぼん

274 :デフォルトの名無しさん:03/03/15 22:00
>>273
異常終了ならexit(1);でいいよ。

275 :デフォルトの名無しさん:03/03/15 22:01
http://www.microsoft.com/japan/developer/library/vccore/_crt_abort.htm

abort 関数は、ストリーム バッファのフラッシュや atexit 関数、
_onexit 関数の処理を行いません。

abort 関数のメッセージの行き先は、実行中のアプリケーションのタイプ
に応じて決まります。コンソール アプリケーションでは、必ず stderr に
メッセージが送られます。シングルスレッドまたはマルチスレッドの
Windows アプリケーションでは、abort は Windows の MessageBox API
を呼び出して、[OK] ボタン付きのメッセージ ボックスにメッセージを
表示します。ユーザーが [OK] をクリックすると、プログラムをただちに
打ち切ります。



276 :デフォルトの名無しさん:03/03/15 22:02
うちはAborted (core dumped)って出るけど。
SIGABRTじゃないの?

277 :デフォルトの名無しさん:03/03/15 22:04
環境
Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/2.95.3-5/specs
gcc version 2.95.3-5 (cygwin special)

結果
$ ./abort
Aborted (core dumped)


278 :デフォルトの名無しさん:03/03/15 22:05
∧_∧
 ( ´∀`)< ふろぽ

279 :デフォルトの名無しさん:03/03/15 22:05
ずれた(T_T)

280 :273:03/03/15 22:05
>>274
さんくす
本見てもexit()は正常終了としか書いてなかったんでパニックになってた
目から鱗 アホでした俺

281 :273:03/03/15 22:16
あげてしまった
>>275
なるほどatexitは必ず実行されるわけじゃないんですね

>>276
うちでは何故かsegmentation faultです。たぶんこちらの環境
の何かがおかしいんだと思います不思議
gcc version 3.2 20020927 (prerelease)

hoge@none /cygdrive/d/myprog/myerr
$ ./a
Segmentation fault (core dumped)

282 :デフォルトの名無しさん:03/03/15 22:59
void f1();
void f2();
void f1() { f2(); }
void f2() {}
int main(int argc, char* argv[]) { return 0; }

上記コードを gcc3.2で

$gcc -gcoff foo.c

としてコンパイルしたら

Assembler messages:
Fatal error: C_EFCN symbol out of scope

というエラーが出てコンパイルできません。なにが問題なのでしょうか?

283 :デフォルトの名無しさん:03/03/15 23:12
$gcc -gcoff foo.c >& /dev/nullpo

284 :デフォルトの名無しさん:03/03/15 23:15
>>283
ガッ

285 :デフォルトの名無しさん:03/03/15 23:21
>>284 めざといな

286 :デフォルトの名無しさん:03/03/16 00:58
ISO_IEC 9899_1999

 7.20.4.1 The abort function
  Synopsis
    1 #include <stdlib.h>
       void abort(void);
  Description
    2 The abort function causes abnormal program termination to occur, unless the signal
       SIGABRT is being caught and the signal handler does not return. Whether open streams
       with unwritten buffered data are flushed, open streams are closed, or temporary files are
       removed is implementation-defined. An implementation-defined form of the status
       unsuccessful termination is returned to the host environment by means of the function
       call raise(SIGABRT).
  Returns
    3 The abort function does not return to its caller.

>>276
正解。

>>281
atexit() を呼ぶとは、規格には全く書いていない。

287 :デフォルトの名無しさん:03/03/16 01:42
>>282
どこもおかしくない。gccがタコなだけだろ。

フリーのコンパイラなんか使うから時間を無駄に使うことになる。

288 :デフォルトの名無しさん:03/03/16 02:02
>>282
漏れんとこの gcc-2.95.1 ではそんなエラーは出ない。

289 :ヽ(´ー`)ノ:03/03/16 02:04
>>282
同じく、3.2.2ではそんなエラーは出ないよ。新しいバージョンに上げてみたら?


290 :デフォルトの名無しさん:03/03/16 02:46
ごめん、もう眠いよ……

Using COFF on cygwin target

I'm trying to debug my program built with GCC (Cygwin) using the Microsoft
Visual C++ debugger. This debugger claims to understand COFF, which GCC
should be able to generate using the -gcoff option.

The assembler, however, fails with the error described below.


/usr/lib/gcc-lib/i686-pc-cygwin/2.95.3-5/../../../../i686-pc-cygwin/bin/as.e
xe -v -o Debug\gdbserver\utils.o /cygdrive/c/TEMP/ccUN6YHU.s
GNU assembler version 2.11.90 (i686-pc-cygwin) using BFD version 2.11.90
/cygdrive/c/TEMP/ccUN6YHU.s: Assembler messages:
/cygdrive/c/TEMP/ccUN6YHU.s:1421: Fatal error: C_EFCN symbol out of scope
:
:
:

とのこと。なお、cygwinの2.95.3-5 でも同じ症状がでました。

291 :デフォルトの名無しさん:03/03/16 02:57
私の予想では……
これは、gccによる問題ではない、けれどもアセンブラの問題ではないかと思う。
C_EFCNは、binutilsでしか用いられないエラーメッセージある。
その意味は「物理的な関数の終端」である。この理由は、エラーを受け取った場所
で、すでに関数名として定義されているのと同じ名前の、アセンブラのcommonな
変数についてのデバッグstuffを読み込んだことである。
これは、どの関数がここで終了しているのかを見つけさせるものであるが、
その場合すでに(同じ名前の別の)関数は終了しているのである。
であるから、アセンブラーはこれをエラーとして表示する。

私の予想では、これはcoff debug formatに対するreal gurus
の制限に関する返答の1つでは無いかと思う。

If you want my guesses here they are -

This is not a problem with gcc, but may possibly be a problem
in the assembler (unlikely though).
C_EFCN is an internal #define used by binutils that just happens
to show up in the error message. It means 'physical end of function'.
The reason you are getting the error is that the assembler is
reading the debug stuff for your common variable, but it thinks that
the name for that is already associated with a function.
So, it goes to find what function it is currently in to end it, but the function has already been ended. So, you
hit an error condition in the assembler.

My guess as to the response from one of the real gurus 'limitation of coff
debug format'.

http://groups.google.com/groups?q=C_EFCN&hl=en&lr=&ie=UTF-8&selm=6jf79l%248gv%241%40rosenews.rose.hp.com&rnum=6

292 :デフォルトの名無しさん:03/03/16 02:59
最近 Google のページを開こうとすると内部エラーで IE が落ちる

293 :デフォルトの名無しさん:03/03/16 03:01
>>292
激しく基地外

294 :デフォルトの名無しさん:03/03/16 03:05
>>292
OS再インストロールしてみてね
それでダメなら、Memoryを交換してみてね
それでダメなら、HDを交換してみてね
それでだめなら、マザーボードとCPUも交換してみてね



295 :292:03/03/16 03:07
サウンドカードを交換したら直りますた。

296 :( ´∀`)< ぬるぽ:03/03/16 13:06
( ´∀`)< ぬるぽ
ストリームは結局
PCアーキテクチャのIOとか周辺機器を繋いでる「バス」そのもの
だと考えて宜しいのか?

297 :デフォルトの名無しさん:03/03/16 17:37
オーキードーキー

298 :デフォルトの名無しさん:03/03/16 19:37
>>296
だめ。

299 :デフォルトの名無しさん:03/03/16 21:07
(1)
    unsigned int x = 1;
    char *p = (char *)&x;
    printf("%x %x %x %x\n", p[0], p[1], p[2], p[3]);

(2)
    unsigned int x = 1;
    char buf[256];
    char *p = buf;
    while (i < CHAR_BIT * sizeof (unsigned int)) {
        *p++ = x << i++ & ~(~0U >> 1) ? '1' : '0';
        if (i % CHAR_BIT == 0)
            *p++ = ' ';
    }
    *--p = '\0';
    printf("%s\n", p);


上の2種類の方法で x の値を表示させると、(1)は 1 0 0 0 、(2)は 00000000 00000000 00000000 00000001 と、
それぞれ別のバイトオーダーで表示されてしまいます。
どうしてこの様になってしまうのでしょうか?

コンパイラはgcc2.95.4です。

300 :299:03/03/16 21:17
すみません。(2)の i は 0 に初期化されています。

301 :デフォルトの名無しさん:03/03/16 21:28
>>299
ソース読む気ないけど、リトルエンディアンの関係でしょ。

302 :デフォルトの名無しさん:03/03/17 01:08
 

303 :デフォルトの名無しさん:03/03/17 01:08
>>299
実際には 301 の言う通りなんだけど、本当の原因は unsigned int 等の内部表現が
C では規定されていないから。
環境によって結果が多いに変わる可能性があるので、特定の内部表現に頼ったコード
はなるべく書かないのが望ましいね。
もちろん、特定環境でしか動かさないプログラムなら依存しまくってもいいけど、
将来に移殖の必要が出た時に苦心する事になるよ。

304 :.. ◆rGsyzf.Kp2 :03/03/17 05:45
初心者でスマソ。
ポインタで宣言した変数"list"で
「&list」 っていうのはどういう意味なのでしょか?

305 :デフォルトの名無しさん:03/03/17 05:48
ぜんかくあんぱさんどlist

306 :デフォルトの名無しさん:03/03/17 05:49
>>304
たとえば、
char *list;
って定義したときの&listか?
listはポインタ型の変数でlistにはアドレスを収めることができる。
そのアドレスを収めるアドレスが&listだ。

って、混乱しそうな説明だなあ。とにかく何か変数を定義したら、
どっかメモリーに収める領域が確保される。
その収める領域(アドレス)を得るために&演算子が用意されている。

307 :.. ◆rGsyzf.Kp2 :03/03/17 05:56
あ〜!なるほど。。
だからポインタのポインタに渡すときつかわれるのですね。。
こんな質問にこたえてくださって感謝

308 :デフォルトの名無しさん:03/03/17 15:02
>>298
ちょっと考えてみたんだが

Cはメモリ以外のIO装置の全てをファイルと認識し
ストリームを結合してそれらを操作する。
そのストリームとは物理的なバスのことではなく、
UNIXなどのOSが仮定する概念的なインターフェイスである

こんなんで合ってますか?

309 :制御屋さん見習中:03/03/17 16:28
>>304便乗

私も、質問です。

float **a;

とした場合、A[10][10]]などの配列を
どうやって示してあげれば良いのですか?

a=&A ×
a=&A[][10]  ×

でした。

310 :デフォルトの名無しさん:03/03/17 16:33
>>309
キャストでもしないかぎりは無理。
ポインタをfloat (*a)[10];と定義すべし。

311 :制御屋さん見習中:03/03/17 17:06
>>310
たすかります。

キャストするにはどうすればよいです?
ポインタは、float **aですでに決まっています。
(mallocで、a[10][10]等、確保する予定)

それと、A[10][10]を参照させたいのです。

お願いします。

312 :デフォルトの名無しさん:03/03/17 17:09
>>311
mallocで100 * sizeof(float)するとか2ループ使って地道に確保するとか。

313 :デフォルトの名無しさん:03/03/17 17:27
>>311
まず float *[10] を確保する。
次にループを回してそれぞれに float [10] へのポインタを代入する。

float **a;
a = (float *[10])malloc(sizoof(float *[10]));
for (i = 0; i < 10; i++) {
a[i] = (float [10])malloc(sizeof(float [10]));
}

mallocの返り値がNULLかチェックを忘れずに。また freeはこれと
逆順で。

314 :デフォルトの名無しさん:03/03/17 17:34
>>311 まあこれでいけそうだ。freeは省略してある。

float A[10][10];

int main(void)
{
float **a;
int i;

if ((a = (float **)malloc(sizeof(float *[10]))) == NULL) exit(1);
for (i = 0; i < 10; i++)
a[i] = (float *)&A[i];

A[1][2] = 345.678;
A[3][4] = 567.891;

printf("%f %f\n", a[1][2], a[3][4]);

return 0;
}

315 :デフォルトの名無しさん:03/03/17 17:34
>>308
>Cはメモリ以外のIO装置をファイル〜

それは「C」がではなく「UNIX(系OS)」がやってることで、、、


316 :デフォルトの名無しさん:03/03/17 17:37
>>301
>>303
レスありがとうございます。

この場合、通常はリトルエンディアンだけれども、ある条件 (この場合はシフト
演算子のオペランドになった時でしょうか) の時にはビッグエンディアンに変換
してから操作を行っている、 ということでしょうか?

317 :デフォルトの名無しさん:03/03/17 17:38
>>311 普通の二次元配列との互換性を無視するならこんな感じ。
同じくfreeは省いた。

int main(void)
{
float **a;
int i, j;

if ((a = (float **)malloc(sizeof(float *[10]))) == NULL) exit(1);
for (i = 0; i < 10; i++)
if ((a[i] = (float *)malloc(sizeof(float [10]))) == NULL) exit(1);

a[1][2] = 345.678;
a[3][4] = 567.891;

printf("%f %f\n", a[1][2], a[3][4]);

return 0;
}

318 :デフォルトの名無しさん:03/03/17 17:41
>>316
演算子の評価対象になった場合はビッグエンディアンもリトルエンディアン
もないだろ。宣言してある「型」であくまでアクセスされる。
これを一旦メモリに入れるとエンディアンが問題になる。

319 :デフォルトの名無しさん:03/03/17 17:41
>>311
ポインタへのポインタと、2次元配列は全く異なるものだよ。

float *ppf, af[10][10];
という定義があったとしようppfはまっとうな値が入ってるとして、
たとえばppf[2][1]とやったときと、af[2][1]とやったときにコンパイラが
どう評価するかというと

ppf→| ppf[0](floatを指すポインタ) |
    | ppf[1](floatを指すポインタ) |
    | ppf[2](floatを指すポインタ) |→| ppf[2][0] |
                       | ppf[2][1] | ← これ


af
| af[0][0] | af[0][1] | af[0][2] | af[0][3] |……| af[0][9] |
| af[1][0] | af[1][1] | af[1][2] | af[1][3] |……| af[1][9] |
| af[2][0] | af[2][1] | af[2][2] | af[2][3] |……| af[2][9] |
   :   ↑これ
   :
| af[9][0] | af[9][1] | af[9][2] | af[9][3] |……| af[9][9] |

こうなるわけ。たまたま一次元の配列とポインタは似たような表記で
扱うことが可能だけど、それは1次元だけの話で、それ以上はケアしてくれない。
だってppfなんてコンパイラにとっては単にポインタをさすポインタでしかないわけで、
10*10の情報とかそんなのはどこにもないからね。

だから、mallocするとかして実体をさすように自分でケアしてやらなきゃいけない。

320 :デフォルトの名無しさん:03/03/17 17:41
>316
違う。

321 :デフォルトの名無しさん:03/03/17 17:43
>>316
だから、整数型の内部表現は関係無い。
>> は小さくなる方に、<< は大きくなる方にシフトする。

322 :デフォルトの名無しさん:03/03/17 17:58
>>316
そのへんがスッキリしないなら、
アセンブラやるといいよ。
少し齧る程度でいいからさ。

323 :制御屋さん見習中:03/03/17 18:08
>>312 ,313,314,317,319

SPECIAL ThanX!

どうもありがとう御座います。
この辺は、私には難しいです。

よ〜く、読みなおして試してみます。

324 :デフォルトの名無しさん:03/03/17 18:31
>>319
どうでもいいが、
float **ppf;
…念のため。

325 :319:03/03/17 18:46
>>324
あ。ほんとだ。鬱だ死脳

326 :デフォルトの名無しさん:03/03/17 20:01
データを格納する領域をあらかじめmallocしておいて、
そこに対するポインタでデータを取り出してるんですが、
データの数が多くなってmallocした領域が足りなくなった場合に、
reallocで拡張するとメモリ上の位置が変わってしまって、
データに対するポインタがうまく動かなくなってしまいます。
こういう時ってどうすればよいのでしょうか?
どなたかご教授願います。


327 :デフォルトの名無しさん:03/03/17 20:07
>>326
reallocが返すポインタを元に計算し直せ。

328 :デフォルトの名無しさん:03/03/17 20:11
連結リストにするとか

329 :デフォルトの名無しさん:03/03/17 20:18
dNode *dList::find_Node(const dNode &searchNode,dNode *pStart=NULL,
int (*compare)(const dNode*,const dNode*)
=dNode default_compare);
エラー;' が、識別子 'default_compare' の前に必要ですとでるんですけど
エラーがでないようにしたいんです。
どうすればいいか教えてください。


330 :デフォルトの名無しさん:03/03/17 20:20
これってCですか?

331 :デフォルトの名無しさん:03/03/17 20:23
あ、ごめんなさい間違えました
C++だった

332 :デフォルトの名無しさん:03/03/17 21:02

よろしい おちるまえにぬるぽのちから とくとめにやきつけておけ


333 :デフォルトの名無しさん:03/03/17 21:24
キミノアタマニヤキツケテヲケヨ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>332

334 :273:03/03/17 23:24
CYGWINバージョンあげてみたりReinstallしてみたり
Cygwinフォルダ全部消して再インストールしたりしてみたけど
abort()はやっぱりsegmentation faultですた。
いろいろコンパイルしてみてわかったのですが意味不明のsegfaultは
abort()だけでもないみたいです。
もう、Windows98インストールしなおすしかないみたいです;;
なんでだろ…。
鬱だし脳

335 :デフォルトの名無しさん:03/03/18 00:09
他人事だが >334 がんがれ

336 :デフォルトの名無しさん:03/03/18 02:44
299以降でリトルエンディアン、ビッグエンディアンの話が出てたので
便乗質問させていただきます。

303氏が、
>環境によって結果が多いに変わる可能性があるので、
と書いてましたが、この場合の「環境」とは何を指すのでしょうか?
OSやコンパイラに依存するのか、
はたまたマザーボードやメモリに依存するのかが分かりません。
ご教授お願いします。


337 :デフォルトの名無しさん:03/03/18 03:10
CPUとか。

338 :336:03/03/18 03:15
>337氏
レスありがとうございます。


339 :デフォルトの名無しさん:03/03/18 03:17
ttp://www.ffortune.net/comp/history/cpu-motorola.htm などなど。
途中で切り替えられるようなCPUもあったっけかな、SHとか<記憶曖昧
あと、ファイルフォーマットや通信パケットなどで
リトル/ビックエンディアンどちらかきめてるとか

340 :デフォルトの名無しさん:03/03/18 03:36
>>339
PowerPCもエンディアンを変えられたはず。

341 :デフォルトの名無しさん:03/03/18 03:40
蛇足
ttp://www.psytec.co.jp/tips/0503/
ttp://www.microsoft.com/japan/developer/library/vccore/_core_windows_sockets.3a_.byte_ordering.htm

342 :デフォルトの名無しさん:03/03/18 04:30
ネットワークは確かビッグエンディアン
だけど C の整数型の内部表現の話とは全く関係無い

343 :デフォルトの名無しさん:03/03/18 09:12
>>339
途中で、て…

344 :デフォルトの名無しさん:03/03/18 11:58
Cにおける疑問をビット単位で整合性をとりたいヤシは
アセンブラでCPUの勉強をyれ
オレモダガナー

345 :デフォルトの名無しさん:03/03/18 11:58
4月から大学でC言語を学ぶことになりました。
そこで、C言語を習得するのに役に立った参考書やサイトなどを教えてもらえませんでしょうか?
よろしくお願いします。

346 :デフォルトの名無しさん:03/03/18 12:03
参考書ならダイテル兄弟のテキストがお勧めかな
アメリカの大学でも採用されてるし
サイトはテキストで体系的な理解を得てから
断片的にリファレンスするのがいいと思われ

347 :デフォルトの名無しさん:03/03/18 13:19
>>345
大学でCを勉強してきたと自称する奴のほとんどが現場で使えないと言う事実があるので、
講義を聞き流して課題をコピーするだけならやめたほうがいい。
自力で勉強する気があるなら、講義で疑問に思ったことはここで聞くといい。
いろんな考えがあることも含めていい勉強になる。

348 :デフォルトの名無しさん:03/03/18 13:39
プログラム入門の課題は10分以内に終わらせよう。

349 :デフォルトの名無しさん:03/03/18 13:42
>>342
今の下位層のプロトコルは大抵ビッグエンディアンだし、基本的には、ね。
だが、ストリーム中のデータに関しては上位層の責任範囲だから関係なし。

350 :デフォルトの名無しさん:03/03/18 14:26
>>349
すみません、モトローラ方式がビッグエンディアンでしたっけ?未だにごっちゃ。

351 :345:03/03/18 16:45
>>347
そうなんですか!?大学だけに頼らないで勉強していきます!

352 :デフォルトの名無しさん:03/03/18 16:48
>>351
頑張れ。大学のプログラム関係の授業は単位稼ぎと思え(る位になっとけ)。

353 :342:03/03/18 17:56
>>349
わかってる、>>341 が貼ってくれたリンクに全部書いてある

354 :デフォルトの名無しさん:03/03/18 18:09
仕事でやっているやつもたいしたことないけどな!

355 :デフォルトの名無しさん:03/03/18 18:53
専門行ってる奴が一般人の俺にプログラムの宿題頼んでくるんだけど

356 :デフォルトの名無しさん:03/03/18 19:21
何かマ板向けのネタになってきた

357 :デフォルトの名無しさん:03/03/18 19:44
エディタを作っています。
エンコーディングの自動判別をしたんですが、何か良い方法はありますか?

358 :デフォルトの名無しさん:03/03/18 19:48

 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |     ヌノレポ    |
 |_________|
    ∧_∧ .||
   ( ´∀`)||
   /   づΦ



359 :デフォルトの名無しさん:03/03/18 20:03
>>357
jcode.plでぐぐれ。

360 :デフォルトの名無しさん:03/03/18 20:03
>>359
移植せぇと言うのか・・・残酷だな。

361 :デフォルトの名無しさん:03/03/18 20:05
>>360
ハァ?


362 :デフォルトの名無しさん:03/03/18 20:08
ネットにそれっぽい C のソースがあったから探せばいいと思う。

363 :デフォルトの名無しさん:03/03/18 20:09
ちなみに漏れの better C で書いた CGI で SJIS/EUC/JIS を処理するルーチン
書いたけど、コードスタイルの関係であんまり晒したくない。

364 :デフォルトの名無しさん:03/03/18 20:14
Cだったらnkfのソース見たほうがいいかも。
まんまぱくれるかもしらんし(w

あ、ライセンスにはきぃつけえよ

365 :デフォルトの名無しさん:03/03/18 20:16
>>364
GPLじゃないの?

366 :デフォルトの名無しさん:03/03/18 20:25
>>365
ちゃいます。nkf.cのコメント部分で利用条件についてかいてあるけど

** このソースのいかなる複写,改変,修正も許諾します。ただし、
** その際には、誰が貢献したを示すこの部分を残すこと。
** 再配布や雑誌の付録などの問い合わせも必要ありません。
** 営利利用も上記に反しない範囲で許可します。
** バイナリの配布の際にはversion messageを保存することを条件とします。
** このプログラムについては特に何の保証もしない、悪しからず。

これだけ。GPLじゃないです。

367 :デフォルトの名無しさん:03/03/18 20:44
残すだけでいいのか。
じゃあこぴっちゃおう。

368 :デフォルトの名無しさん:03/03/18 22:23
すんません
フラッシュでバッファのデータを吐き出したとき
ファイルからの読み出しデータの場合はどんな処理がされるんですか?

369 :デフォルトの名無しさん:03/03/18 22:53
>>368
質問の意味がわからん。
もし、入力用に開いたストリームに対して fflush() 使った場合を訊いているなら、
その動作は


     未  定  義


なのでよろしく。

370 :デフォルトの名無しさん:03/03/18 22:57
激しく未定義キタ━━━━━(゚∀゚)━━━━━!!!!


でも VC++ だと 「入力バッファをクリア」 になるけどナー。

371 :デフォルトの名無しさん:03/03/18 23:11
プログラム作ってください、C++でお願いします。叩き煽りは無用です。

372 :デフォルトの名無しさん:03/03/18 23:14
じゃあ放置で

373 :デフォルトの名無しさん:03/03/18 23:15
>>371
ほれ
int main()
{
}


374 :371:03/03/18 23:15
解決しました。ありがとうございました。

375 :デフォルトの名無しさん:03/03/18 23:19
カレントディレクトリにあるファイルを調べるにはどうしたらよいのですか?
自作する場合はfopenでa,b,...,aaaa,aaab,...見たいに繰り返して何文字かの
ファイル名でオープンしていき、成功(有る)なら表示して、失敗(無い)なら
飛ばすみたいなのを考えているのですが。system("dir")はただ表示されるだけ
みたいですし。

376 :デフォルトの名無しさん:03/03/18 23:20
>>375
標準関数だけじゃ無理。
UNIXならopendir〜readdirで。 dirとか言っているからUNIXじゃないかも。。。

377 :デフォルトの名無しさん:03/03/18 23:22
>>375
Win32ならFindFirstFileとかかね。

378 :デフォルトの名無しさん:03/03/18 23:23
>>375
標準 C ではディレクトリという概念が定義されていません。
ディレクトリを走査したいならコンパイラ付属のリファレンス等を見て、環境依存の
方法を探してください。
あなたの言う、全種類の名前を網羅するよう方法は全くお奨めできません。
それによってテストされるファイル名の数はどりくらいになるか見当つきますか?

379 :デフォルトの名無しさん:03/03/18 23:24
どりくらい
どりくらい
どりくらい
どりくらい

380 :デフォルトの名無しさん:03/03/18 23:25
371です。ひどすぎます、もう来ません。

381 :デフォルトの名無しさん:03/03/18 23:27
>>380
そいつぁ良かった。

382 :デフォルトの名無しさん:03/03/18 23:29
いや、そろそろネタっぽいんだけど

383 :デフォルトの名無しさん:03/03/18 23:43
どりくらいが? ネタ?

おまえ考えすぎ!

384 :デフォルトの名無しさん:03/03/18 23:46
いや、この文脈で 371 の件だと受け取られないとは思わなかったけれども

385 :デフォルトの名無しさん:03/03/18 23:47
>>382-384
ネタですか?

386 :デフォルトの名無しさん:03/03/19 00:08
>>384
「そろそろ」って ? >>371 の件だったら、「はじめから」だろ。

387 :デフォルトの名無しさん:03/03/19 00:14
戦争反対に署名しよう!(戦争開始20日10時までに、色々な板にコピペしてください。あなたのご協力を切望します。)

http://www.thepetitionsite.com/takeaction/224622495
1.Sign This Petition!の所に名前(ローマ字)を入れボタンを押す。
2.フォームに必要事項(赤字で(required)と書かれた所)を記入し、ボタンを押す。
「E-MAIL ADDRESS」には適当なアドレスを、「STATE」には「(NON USA)」、「COUNTRY」は「Japan」を、「WHY I'M SIGNING THIS PETITION」には、戦争反対声明文を入れよう!(例:No More War!!)
3.下の「Add my Signature」ボタンを押せば、署名完了!
参考:http://xmas.site.ne.jp/topics/20010922/Petition.html

388 :デフォルトの名無しさん:03/03/19 00:15
ここ C のスレだしなぁ…放っとこうかなぁ…けど一応ツッコミ入れとかないとなぁ…
>>373
main() オーバーロードすんな。

389 :デフォルトの名無しさん:03/03/19 00:18
>>388
( ゚д゚)…

390 :デフォルトの名無しさん:03/03/19 00:23
371 よりもネタっぽい人が現われたわけですが・・・

391 :357:03/03/19 00:23
解答してくれた方、ありがとうございます。
内部エンコーディングを UCS-4 あたりにしようと考えているんですが、
いくつか捜してみましたがエンコーディングの認識の付いたものがないんです。
認識部分だけ nkf を参考にして自前で実装した方が良いでしょうか?

392 :デフォルトの名無しさん:03/03/19 00:36
>>391
適当でイインジャネーノ?
どのみち100%の精度で認識なんて、絶対無理なんだし。

393 :デフォルトの名無しさん:03/03/19 00:41
>>391
詳しく見てないけど、この辺は?
http://terry.jiubao.org/kanji/

394 :デフォルトの名無しさん:03/03/19 00:42
SJISとEUC-JPのどちらでも使われているところだけで書かれているファイルをnkfに渡したらどう判断するんだろう。

395 :デフォルトの名無しさん:03/03/19 00:45
やってみれ
多分スレ違い

396 :デフォルトの名無しさん:03/03/19 01:10
IEでも自動判別で誤認識するよねぇ

397 :デフォルトの名無しさん:03/03/19 02:22
>>358
ガッ

398 :375:03/03/19 03:35
>>376-378
お答えありがとうございました。一応できました。
#include <stdio.h>
#include <windows.h>
int main(void)
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind=FindFirstFile("D:\\MyCppFiles\\ファイル、ディレクトリ研究\\*.txt",&FindFileData);
if(hFind==INVALID_HANDLE_VALUE)
printf("見つかりませんでした");
else
{
do printf("%s\n",FindFileData.cFileName);
while(FindNextFile(hFind,&FindFileData));
FindClose(hFind);
}
return 0;
}

399 :デフォルトの名無しさん:03/03/19 05:32
>>391
UCS-4はエンコーディングではない


400 :デフォルトの名無しさん:03/03/19 06:49
>>400
UCS-400はgetではない

401 :デフォルトの名無しさん:03/03/19 08:16
1つの文が複数行になる場合、
2行目以降をインデントしない書き方は邪道ですか?

if ( nHoge1== nHoge1 + nHoge2 + nHoge3 ||
nHoge3 == nHoge1 + nHoge2 + nHoge3 ) ←この行
  return 0;

402 :デフォルトの名無しさん:03/03/19 08:33
見にくいと思う。ちなみに漏れはcc-mode(bsd style)まかせなのでこんな感じ
やね。

if (nHoge1== nHoge1 + nHoge2 + nHoge3 ||
  nHoge3 == nHoge1 + nHoge2 + nHoge3)
  return 0;



403 :デフォルトの名無しさん:03/03/19 10:47
まとめて圧縮をかけてもフロッピーで複数枚になるような
サイズのディレクトリを、プログラム中でやりとりしなければ
ならないのですが、皆さんならどう作成しますか?

データサイズをみながらマウントして、情報を読み書きして、
アンマウントして・・・とか正直にいくのが正解なんですかね、
イチから作るとなると激しく面倒な気がするんですが・・・
(´Д`;)

アドバイスや、先人たちの知恵(ライブラリ等)をご存知で
したら教えてください。ちなみにLinuxです。


404 :デフォルトの名無しさん:03/03/19 11:24
(´-`).。oO(なんでこのスレなんだろう…)

405 :デフォルトの名無しさん:03/03/19 12:33
(´-`).。oO(いまどきフロッピーって…)

406 :デフォルトの名無しさん:03/03/19 13:17
ふつうtar。

407 :オシエテちゃん:03/03/19 13:32
HyperCardのwin版ってないのでしょうか?
お願い!詳しい人教えてくださいな!

408 :デフォルトの名無しさん:03/03/19 14:14
2次元配列で混乱してきました。
int A[5][3];の宣言の意味するところは

int型の3個の要素を持つ配列を保持する5個の配列ですか?
それとも
int型の5個の要素を持つ配列を保持する3個の配列ですか?
A[0]はどんなものを保持するんですかね?

409 :デフォルトの名無しさん:03/03/19 14:17
>A[0]はどんなものを保持するんですかね?

&A[0][0]

410 :デフォルトの名無しさん:03/03/19 14:17
>>407
それって C 言語と関係あるの?
それって C 言語と関係あるの?
それって C 言語と関係あるの?
それって C 言語と関係あるの?
それって C 言語と関係あるの?
それって C 言語と関係あるの?
それって C 言語と関係あるの?
それって C 言語と関係あるの?


  そ れ っ て C 言 語 と 関 係 あ る の ?




411 :デフォルトの名無しさん:03/03/19 14:18
>>409
じゃあA[1]は
&A[1][0]でいいですか?

412 :デフォルトの名無しさん:03/03/19 14:19
>>408
前者。A[0] は int[3]

413 :デフォルトの名無しさん:03/03/19 14:22
>>411
イイ



414 :412:03/03/19 14:23
ただし A[0](=int[3]) は単項 & か sizeof のオペランドになるとき以外は
int[3] の先頭要素を指すポインタになる

415 :408:03/03/19 14:29
さんくすなるほどだいぶわかりました
A[0]->□□□
A[1]->□□□
A[2]->□□□
A[3]->□□□
A[4]->□□□
みたいなかんじですね

416 :デフォルトの名無しさん:03/03/19 14:31
あと、A[0] と A はアドレスは同じ所を表すが
型が int * と int ( *)[3]で違う

417 :デフォルトの名無しさん:03/03/19 14:32
質問です
関数getsの引数は配列へのポインタしかとらないんですかね
例えば、宣言時に文字列リテラルで初期化した
charへのポインタを引数にして、入力ストリームから読み込んだデータで
初期化した文字列を上書きさせたりとかはできないんですか?


418 :408:03/03/19 14:34
あひゃ
A[0]がint ( *)[3]でAがint *ですか?

419 :デフォルトの名無しさん:03/03/19 14:43
>>417
getsの引数はcharへのポインタだが。
それと、文字列リテラルは書き換えることは出来ない。

420 :デフォルトの名無しさん:03/03/19 14:44
>>417
文字列リテラルを書き変えてはいけないでせう
>>418
逆ぽ

421 :デフォルトの名無しさん:03/03/19 14:45
>>418 ぎゃく。
A[0]がint * じゃないとA[0][2]見たいに出来ないじゃん

422 :418:03/03/19 14:53
どうもたびたびスマンコ
今度こそかなりわかりました
int (*)[3]
っていうのが良く分かんなかったので
int (*)[3]はpointer to array[3] of int ですね

423 :デフォルトの名無しさん:03/03/19 15:03
>>419
引数は確かにcharへのポインタなんですが
そのポインタが指す先のオブジェクトのメモリ領域が用意されてないと
メモリ破壊が起こるらしいっす
だから結局
引数には配列へのポインタしかとれないってことなんすかね?

424 :デフォルトの名無しさん:03/03/19 15:10
>>422
かしこい!

425 :デフォルトの名無しさん:03/03/19 15:22
>>423
#include<stdio.h>
int main(void)
{
    char ch;
    printf("改行してください。\n");
    gets(&ch);
    return 0;
}
メモリ破壊が起こるかどうかは入力による。

426 :デフォルトの名無しさん:03/03/19 15:27
>>423
charへのポインタならなんでもいいんだけど、安全に動作させたかったら書き込める領域を指すポインタを渡す。

427 :デフォルトの名無しさん:03/03/19 15:34
>>425
>>426
おお!

了解であります!

428 :デフォルトの名無しさん:03/03/19 15:36
文字列リテラルを書換えるなんてもっての他だわ

429 :デフォルトの名無しさん:03/03/19 15:38
ぬるぽを叩くなんてもっての他だわ

430 :デフォルトの名無しさん:03/03/19 15:38
Win2000にセキュリティホールだってさ。

431 :デフォルトの名無しさん:03/03/19 15:42
  セキュリティホール・・・
  (; ・∀・)  |  | 
 と    )  |  | スカッ
   Y /ノ  / /
    / )  / /Λ__Λ ?
  _/し' // ( ´∀`)>>429
 (_フ彡    (    )


432 :デフォルトの名無しさん:03/03/19 15:47
>>431
IISらしい
http://www.kahoku.co.jp/news/2003/03/2003031801000485.htm

433 :デフォルトの名無しさん:03/03/19 15:52
>同社によると、欠陥を放置した場合、攻撃者が
>攻撃対象コンピューターを停止させたり任意の
>プログラムを実行するなど、事実上乗っ取ることが可能。
>欠陥の中でも最大深刻度の「緊急」と位置付けている

18日発表ったら昨日か。頼むよM$。

434 :デフォルトの名無しさん:03/03/19 16:08
処理系=コンパイラ
実装=コンパイル
と認識してしまっていいんでしょうか?

435 :357:03/03/19 16:19
返事が遅れました、みなさんありがとう。

>>399
すみません、文字セットですよね。

みなさんはこういう対応はどうしてるんでしょう…。iconv や wchar.h じゃ
不十分だと思うんですが…。
// locale が絡んでくるから「多言語化」はできないですよね?

436 :デフォルトの名無しさん:03/03/19 16:20
個人的には、処理系っていうとハードソフトひっくるめたコンパイル環境ってイメージだな。
実装は原語implementでしょ?コンパイルとは違う。

437 :デフォルトの名無しさん:03/03/19 17:55
>>435
stdlibでは駄目だが、iconvならエンコーディングを自分で指定すれば
問題はないのでは?


438 :デフォルトの名無しさん:03/03/19 20:19
for(i=0;i<strlen(player[st[sWin].player].winmes[winatr]);i++)
これって使い方あってる?

439 :デフォルトの名無しさん:03/03/19 20:21
その行だけを出されたところで何も判断できないわけだが

440 :438:03/03/19 20:30
上の文章でエラーが
'<' : signed と unsigned の数値を比較しようとしました。
といって弾かれるのです。


441 :デフォルトの名無しさん:03/03/19 20:31
あまり重要でない警告。

442 :デフォルトの名無しさん:03/03/19 20:32
警告とエラーの区別くらいつけようよ。

443 :デフォルトの名無しさん:03/03/19 20:48
ってことは
あのコードまじで使ってるのか。
かっちょいいな


444 :デフォルトの名無しさん:03/03/19 20:48
http://www003.upp.so-net.ne.jp/Libra/

445 :デフォルトの名無しさん:03/03/19 20:51
>>440
i を unsigned に汁

446 :デフォルトの名無しさん:03/03/19 20:51
警告メッセージの意味がわからないならまずコンパイラのリファレンスを調べろ。
リファレンスを調べ方がわからないと言うならばお手上げだ。

447 :デフォルトの名無しさん:03/03/19 20:52
条件がマトリョーシカみたいだな。

448 :デフォルトの名無しさん:03/03/19 21:02
>>447
wマトリョーシカ辞書引きそうになった。
http://www.geocities.co.jp/HeartLand-Keyaki/2341/encyclopedia/matryosh.htm
ロシアのあれな

449 :デフォルトの名無しさん:03/03/19 21:04
マジョーリカはマジョーがえる

450 :デフォルトの名無しさん:03/03/19 21:42
Cの書籍でvoid main(void)と書いている本の執筆者はタコと思って
いいんでしょうか?

451 :デフォルトの名無しさん:03/03/19 21:50
すいません
標準入力ストリームからバッファに溜められたデータは
改行文字を読み込んでプログラムへ送られる時に
改行文字まで読み込むんですか
それとも改行文字はバッファに残すんでせうか?

452 :デフォルトの名無しさん:03/03/19 21:59
>>438
間違ってるとは言わんけど、ホントに毎回 strlen() 呼ぶ必要があるか確認した方がいい。

453 :デフォルトの名無しさん:03/03/19 23:04
for(II=0;II<kekka;II++){

}
のあとに
IIの数値を継続させたまま
for文を作るにはどうすればいいですか?


454 :デフォルトの名無しさん:03/03/19 23:05
IIに何も代入しなければいいじゃない。。。
for(;II<kekka;II++)とか

455 :デフォルトの名無しさん:03/03/19 23:08
>>453
意味がわかりません。
スコープって知ってますか?

456 :デフォルトの名無しさん:03/03/19 23:09
>>453の質問の意味がわからないのはオレだけか?

457 :454:03/03/19 23:10
>>455>>456
ループを抜けたあとにまた似たようなループをつくりたいんじゃないかと・・・
で、forではIIを0に初期化しなければならないと思いこんでいるとか。

458 :デフォルトの名無しさん:03/03/19 23:17
>>456
俺も...。
ついでに、>>455 で唐突にスコープが出てくるのもよくわからん。

459 :デフォルトの名無しさん:03/03/19 23:18
俺は意味は分かったがループ変数名が気持ち悪い派。

460 :デフォルトの名無しさん:03/03/19 23:22
>>459
よく意味わかったね。すごいよ。
変数名は確かに変。意味があるならイイけど…
Tがどっかにでてきてると思うと今日は寝れないなぁ〜

461 :デフォルトの名無しさん:03/03/19 23:23
IIって2のことだろ

462 :デフォルトの名無しさん:03/03/19 23:24
つまりC++であれば
for(int II=0;II<kekka;II++){
というのが許されて、スコープはfor文内なわけで・・・
まぁここはC言語スレなわけだが。
ところで453はどこへ?w


463 :デフォルトの名無しさん:03/03/19 23:26
またC++か

464 :デフォルトの名無しさん:03/03/19 23:30
for (void* XI = 0; XI < XII; XI++)


465 :デフォルトの名無しさん:03/03/19 23:31
>>464
ガッ

466 :デフォルトの名無しさん:03/03/19 23:37
なぜガッ?w
void*の++でコンパイリュエリャー

467 :デフォルトの名無しさん:03/03/19 23:38
>>466
void *XI=0 ←ぬるぽだから。

468 :デフォルトの名無しさん:03/03/19 23:38
>>466
Cスレだからだと思われ(w

469 :デフォルトの名無しさん:03/03/20 00:19
>>451
改行文字はバッファに残す。

470 :デフォルトの名無しさん:03/03/20 00:33
#define timesdo(num) for(int i=0;i<(num);i++)
main(){
 timesdo(5){
  printf("あぼーん\n");
 }
}

471 :それやるなら、こうだろ:03/03/20 00:42
#define foreach(__var, __begin, __end, __statement) do { \
 int __var; \
 for (__var = __begin ; __var < __end ; __var++) { \
  __statement; \
 } \
} while(0)


int main(int argc, char** argv) {
 foreach (i, 0, argc, printf("%s\n", argv[i]));
}


472 :デフォルトの名無しさん:03/03/20 00:48
い、int??

473 :デフォルトの名無しさん:03/03/20 04:41
int i=3;
func((i++)*2);

こう書いた場合、funcには必ず6が渡されますよね? 未定義とか処理系依存ではないですよね?

474 :デフォルトの名無しさん:03/03/20 05:56
>>473
funcが関数であればいいんだが、
マクロで引数が2回以上評価されるかもしれない。

475 :デフォルトの名無しさん:03/03/20 06:04
>>473
変数に対して副作用があるコードは、副作用完了点までにその変数が再び出現
しなければいい。

476 :453:03/03/20 07:41
みなさまありがとうございます。

これからやってみます。

変数名のIIはiもIもiiも別の処理に使ってしまったので、
IIを使うことになったのです。



477 :デフォルトの名無しさん:03/03/20 08:12
>>476
うわぁ……

478 :デフォルトの名無しさん:03/03/20 09:50
>>476
君にこそハンガリアンが必要だ。

479 :デフォルトの名無しさん:03/03/20 09:56
ファイルポインタとファイル位置指示子で混乱してきました
ファイルポインタはOSが割り当てたバッファ用のメモリ領域の先頭位置を指してて
ファイル位置指示子はそのメモリ領域で現在プログラムが読み込んでいる位置を指しているもの
という風に解釈してるんですが
>>469
残した改行文字は自動的にフラッシュされるんでしょうか?


480 :デフォルトの名無しさん:03/03/20 10:02
ファイルポインタが指しているのはファイルの情報を収めた構造体でしょ。

481 :デフォルトの名無しさん:03/03/20 10:19
>>480
あ、そうでしたか・・・
ちょっと頭冷やしてきます

482 :デフォルトの名無しさん:03/03/20 11:14
>>479
質問の意味が全くわからない。
「フラッシュ」 という言葉が何を指しているのかは不明だけど、fflush() の事を言って
いるなら >>369
で、「自動的に」 の意味が皆目見当つかない。

あと、読み込み専用に開かれているストリームの場合は、データは一方通行で巻き戻し
(fseek() や rewind() 等) が出来ず、従ってそもそもデータ位置を記録していない
場合もある。

483 :デフォルトの名無しさん:03/03/20 11:33
>>482
了解しました。
自動的はプログラムで明示的にしなくてもで
フラッシュはfflush()のことをいいたかったです
表現が曖昧でもうしわけないです


484 :デフォルトの名無しさん:03/03/20 13:08
int  **int_ptr,
    num;

*int_ptr = num;

ぬるぬるいんぽ。

485 :デフォルトの名無しさん:03/03/20 13:30
>>482
> あと、読み込み専用に開かれているストリームの場合は、データは一方通行で巻き戻し
> (fseek() や rewind() 等) が出来ず、
(゚Д゚)ハァ?

486 :デフォルトの名無しさん:03/03/20 13:34
>>485
そこで切らずに最後まで読んでくれよ。

487 :デフォルトの名無しさん:03/03/20 13:56
>>482
> あと、読み込み専用に開かれているストリームの場合は、データは一方通行で巻き戻し
> (fseek() や rewind() 等) が出来ず、従ってそもそもデータ位置を記録していない
(゚Д゚)ハァ?

488 :デフォルトの名無しさん:03/03/20 14:49
ワラタ

489 :デフォルトの名無しさん:03/03/20 15:51
何でvoid main(void)なんて書いてる本が多いのでしょうか?

490 :デフォルトの名無しさん:03/03/20 16:15
>>489
説明するのが面倒だからだと思います。

491 :デフォルトの名無しさん:03/03/20 16:17
規格のことを良く知らないライターさんが書いてるからではなかろうか。
void main(void) が動かない処理系があっても全然おかしくないわけだし。
初めから int main(void) と書いとけば間違いないのになと思うけど。

492 :デフォルトの名無しさん:03/03/20 16:26
>>450もみたけど
void main(void)
本の価値を決めてしまうほど
重要でもない気がする

493 :デフォルトの名無しさん:03/03/20 16:27
>>490
説明するのが面倒とは?

494 :デフォルトの名無しさん:03/03/20 16:30
ただ、void main(void)でANSI C準拠ですみたいなことは言わないで欲しい。
void main(void)でのサンプルコードをUNIXで動作確認しただと??
(((( ;゚Д゚)))ガクガクブルブル

495 :デフォルトの名無しさん:03/03/20 16:39
別に大した問題じゃない。
警告がでりゃintにしときゃいい。
本当にステータスを返す必然性があるのならintにすりゃいい。
そんな事よりもっと大事な事は一杯あっぺよ。

496 :デフォルトの名無しさん:03/03/20 16:41
言語リファレンスだったら多少問題かもしれんけどな。

497 :デフォルトの名無しさん:03/03/20 16:48
まあしかしいきなりやられると内容に一抹の不安を覚えることは確かだ(w

498 :デフォルトの名無しさん:03/03/20 16:54
しかし参考書の類で書いてしまうのはマズイと思うのー

499 :デフォルトの名無しさん:03/03/20 17:00
>>498
同意。
特に入門書で、いきなり規格外のやり方を教えるのはいかがかと・・

500 :デフォルトの名無しさん:03/03/20 17:26
DOSってどうやってつかうんでしょうか?

501 :デフォルトの名無しさん:03/03/20 17:28
サービス停止攻撃?使うというものではないような。。

502 :デフォルトの名無しさん:03/03/20 17:28
  ∧_∧
 ( ´∀`)< ぬるぽ

503 :デフォルトの名無しさん:03/03/20 17:29
気合いと共に腰だめに構えて相手に突き立てる

504 :デフォルトの名無しさん:03/03/20 17:29
 スルナ!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        / ←>>502

505 :デフォルトの名無しさん:03/03/20 17:32
   | \
   |Д`) ダレモイナイ・・ヌルポ スルナラ イマノウチ
   |⊂
   |


     ♪  Å
   ♪   / \   ヌルポ ヌルポ
      ヽ(´Д`;)ノ   ヌルポ
         (  へ)    ヌルポ ヌルポ
          く       



   ♪    Å
     ♪ / \   ヌルポ ヌルポ
      ヽ( ・∀・)ノ  ヌルポ
         (へ  )    ヌルポ
             >    

506 :デフォルトの名無しさん:03/03/20 17:34
   A A ウーリャリャリャリャリャリャリャ
  ( ・∀・)   | | |
 と    )    川 ボコビシバキドカグシャ
   Y /ノ    人 ☆
    / )  ☆<  >__Λ∩
  _/し' //. V☆Д )/
 (_フ彡        /  ←>>505

507 :デフォルトの名無しさん:03/03/20 17:36
>>501
いや、cやるならDOSつかえと、言われましたもので・・・

508 :デフォルトの名無しさん:03/03/20 17:37
>>507
Linuxでも使え

509 :デフォルトの名無しさん:03/03/20 17:41
ぬるぽの起源はCニダ

510 :デフォルトの名無しさん:03/03/20 17:45
>>508
Windowsじゃだめなんですか?

511 :デフォルトの名無しさん:03/03/20 17:48
>>510
駄目

512 :デフォルトの名無しさん:03/03/20 17:56
>>510
やっぱLinuxだべ。

513 :デフォルトの名無しさん:03/03/20 17:58
WindowsでCは邪道ということですか?

514 :デフォルトの名無しさん:03/03/20 18:01
>>513
Linux+gccでやれば問題なし

515 :デフォルトの名無しさん:03/03/20 18:38
MacOSX+gccでもいいでつか?

516 :デフォルトの名無しさん:03/03/20 18:45
マカーはC言語を使ってはいけません。

517 :デフォルトの名無しさん:03/03/20 18:50
>>515
いいと思われ

518 :デフォルトの名無しさん:03/03/20 18:59
間を取ってLindowsはどうだ?

519 :デフォルトの名無しさん:03/03/20 19:05
>>513
逆。
CにWindowsは邪道


520 :デフォルトの名無しさん:03/03/20 19:53
というか、CよかC++を勉強したほうが(グフッ

521 :デフォルトの名無しさん:03/03/20 20:22
LinuxにしたいけどCygwin使ってる漏れは糞ですか?

522 :デフォルトの名無しさん:03/03/20 20:33
>>521
エエんちゃう?
そもそも Cygwin って「Windowsの糞 cmd.exe なんか使ってられないんだよもん」
という Unix 使いや、「Unix 使ってみたいけど、ちょっと敷居が…」って人向けのものでしょ。


523 :デフォルトの名無しさん:03/03/20 21:16
ついにCを完全に死滅させることに成功し
来期からC++、Javaオンリーになりますた。
さようならC、ありがとうC君のことは永遠に忘れない。

524 :デフォルトの名無しさん:03/03/20 21:57
>>523
ボソおまえはCから逃れられない。

525 :デフォルトの名無しさん:03/03/20 21:58
Cygwin使ったこと無いからわからないんだけど、やっぱvoid main(void)で
エラー出るの?
技術評論社のとあるC言語の本はLinuxのgccを前提にしてるって書いてある
んだけど、void main(void)なんだよね。Linuxでも警告も出ないのってあるの?

526 :デフォルトの名無しさん:03/03/20 22:01
test.c:5: warning: return type of `main' is not `int'


527 :デフォルトの名無しさん:03/03/20 22:36
>>525
[user@host 22:29 user]$ cat test.c
#include <stdio.h>
void main(void) { }

[user@host 22:29 user]$ gcc test.c
test.c: 関数 `main' 内:
test.c:3: 警告: `main' の戻り値の型が `int' ではありません
[user@host 22:30 user]$ gcc --version
gcc (GCC) 3.2.2
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


528 :525:03/03/20 22:48
>>526-527
サンクス。

なぜあの本はLinuxでvoid main(void)を使って平気だったんだろう・・・?

529 :デフォルトの名無しさん:03/03/20 22:49
警告が出てもコンパイルは続行されるもん。

530 :デフォルトの名無しさん:03/03/20 22:53
警告なんて一切問題のない構文でも出るし。

531 :デフォルトの名無しさん:03/03/20 23:02
警告なら無視しちゃってもいいってことですか?

532 :デフォルトの名無しさん:03/03/20 23:07
void* main(void) { return 0; }


533 :デフォルトの名無しさん:03/03/20 23:08
          | | ガガガガガッ   .人
  ( ・∀・)   | |       人  <  >__Λ∩
 と    )    | |    人  <  >__Λ∩Д´)/
   Y /ノ    .人   <  >__Λ∩Д´)/   / ←>>532
    / ) .人 <  >__Λ ∩Д´)/   / ←>>532
  _/し' <  >_Λ∩Д´)/   / ←>>532
 (_フ彡 V`Д´)/   / ←>>532
            / ←>>532

534 :デフォルトの名無しさん:03/03/20 23:10
gccなら-Wallでワーニングが出なくなるまでやらなきゃ……


535 :デフォルトの名無しさん:03/03/20 23:14
普通、alias gcc="gcc -Wall" だろ。

536 :デフォルトの名無しさん:03/03/20 23:14
if(a=b())
こう書いただけでも警告がでるんだが・・

537 :デフォルトの名無しさん:03/03/20 23:19
いや、alias gcc="gcc -Wall -ansi -pedantic"だろ。

538 :デフォルトの名無しさん:03/03/20 23:20
void main(void)の奴ってWindowsでしかCやったこと無い奴なんじゃないの?

539 :デフォルトの名無しさん:03/03/20 23:28
HINSTANCE main(DWORD dwArgCount, LPSTR* ppArgs)

540 :デフォルトの名無しさん:03/03/20 23:39
K&Rのソースって
main(){
}
が多いけど
-Wall でやると
何かエラーでない?

541 :デフォルトの名無しさん:03/03/20 23:41
整数値を返していないだけだろ。

542 :デフォルトの名無しさん:03/03/20 23:54
>>537
普通、makefile に CFLAGS=-Wall -ansi -pedantic って書くだろ...。
ここ最近 gcc なんか直接起動したことないぞ。

543 :デフォルトの名無しさん:03/03/21 00:02
makefile中ではaliasは無効なの?
そうでなければ別に……

544 :デフォルトの名無しさん:03/03/21 00:04
make使うほど大きなプログラムは書かないもーん

545 :デフォルトの名無しさん:03/03/21 00:12
>>536
if ((a = b()) { }
if (a = b()) だと a == b() と間違える場合があるから、複数の式に分けるか
() で括って、明示的に示せという事らしい。

>>542
ちょっと遊びで書いたコードとかコンパイルする時に使うかな、俺は。

>>543
普通 makefile 内では alias きかん。


546 :デフォルトの名無しさん:03/03/21 01:15
>>545
ちょっとしたプログラムでも、
たとえば abc.c なら、
% make abc
を実行しているよ。そうすりゃ自動的に、
gcc abc.c -o abc
としてくれるからね。
a.out にしたくないから、いつでも make を使う。

547 :デフォルトの名無しさん:03/03/21 08:47
>>538
void main(void)で書かれている書籍って割と多い気がする。
googleで検索しても間違いだって書いてあるページが割とある。
だからそう言う本は避けて買えばいいんじゃない?
void main(void)系で書かれてる本で良本なのってある?

548 :デフォルトの名無しさん:03/03/21 09:41
>>547
モノの本質を見ろと。

549 :デフォルトの名無しさん:03/03/21 11:05
>>547
そういう本って (特に入門本・初心者本) delete[] とすべきところで
delete と書いていたり、説明を曖昧にして危ういのが多い。(また C++
の話かと言われそうだ)。しっかりした本を選ぼうと思ったら、それも
ひとつの判断材料にはなると思う。

550 :デフォルトの名無しさん:03/03/21 11:10
>>549
そもそも参考文献スレにいかずに何調子に乗ってんの?うざいんですが。


551 :デフォルトの名無しさん:03/03/21 11:19
>>550
void main(void) で本出してしまった人ですか?

552 :デフォルトの名無しさん:03/03/21 13:19
>>551
大丈夫、そう言う本出す奴に限って部下か学生にサンプルプログラム書かせて
同僚辺りに文章書かせて自分は口出すだけだから何が問題か判ってないから。

553 :デフォルトの名無しさん:03/03/21 13:39
void main()
{
printf("おまえらそんなことで熱くなるなよ\n");
}



554 :デフォルトの名無しさん:03/03/21 13:51
どーでもいいじゃんよー
そんなちっせぇことにこだわんなよー
極初心者が↓これ見たらそんだけでムツカシソーって思うかも知らんからじゃねーのー
int main(int argc, char* argv[])

555 :デフォルトの名無しさん:03/03/21 14:07
>>554
int main() でいいだろう(w パラメータ付けなくても。最初に int main()
を教えて、関数を学ぶときに main は誰が呼ぶかに言及すればいいんだよ。

556 :デフォルトの名無しさん:03/03/21 14:30
char* argv[] <- 実際、最初はこれが難しかった

557 :デフォルトの名無しさん:03/03/21 14:51
FILE* main(FILE* pfile, FILE** ppfile)で良いだろ


558 :デフォルトの名無しさん:03/03/21 14:52
>>482
>あと、読み込み専用に開かれているストリームの場合は、データは一方通行で巻き戻し
>(fseek() や rewind() 等) が出来ず、従ってそもそもデータ位置を記録していない場合もある

いろいろ考えてみたんですが、こういうことでしょうか?
ファイルのデータ量がバッファ領域の完全バッファ量を超えた場合
超えた部分は吐き出されて、次の部分のデータを新たにバッファ領域に読み込むから
その場合、ファイル位置指示子が示している位置はファイル全体からの相対的な位置ではなく、
バッファ領域に読み込まれた部分における先頭位置からの位置となるから
正確にファイルの位置を指しているわけではない


559 :デフォルトの名無しさん:03/03/21 16:10
1:int *p;
2:int* p;

2で書く奴キモい

560 :デフォルトの名無しさん:03/03/21 16:11
2はC++erの書き方だーね。
漏いらはint * p;

561 :デフォルトの名無しさん:03/03/21 16:11
おまえらまだまだだね

int* *p;

これが最高にキモい

562 :デフォルトの名無しさん:03/03/21 16:14
2chのCスレで散々がいしゅつなFAQと宗教戦争ネタいい加減どっかにまとめたら?

563 :デフォルトの名無しさん:03/03/21 16:19
>>559
1 の方がキモイ。char ch[] とかもう見てらんない。

>>562
お前キモイ。いい加減どっかにまとめたら、なんてもう見てらんない。

564 :デフォルトの名無しさん:03/03/21 16:28
#define pointer *

int pointer pn;

565 :制御屋さん見習中:03/03/21 16:53
ネタではありません、質問です。

関数の返り値で、
return OK;
または
return ERROR;

としたいです。

このとき、普通
OKは0で、ERRORは1にするのが
良いでしょうか?

それとも逆でしょうか?
(どちらも違う?)

566 :デフォルトの名無しさん:03/03/21 16:54
>>565
ERRORは-1で。ネタではありません。

567 :デフォルトの名無しさん:03/03/21 16:55
>>565
悪いけどネタにしか見えない。
ゴメン

568 :デフォルトの名無しさん:03/03/21 16:56
>>565
単に成功失敗なら
#define TRUE 1
#define FALSE 0
で成功したらTRUE失敗したらFALSEを返す。

エラーの種類がいろいろなら0が成功0以外が失敗。

569 :デフォルトの名無しさん:03/03/21 16:57
普通これくらいは数値をそのまま書くと思うけど・・・

570 :デフォルトの名無しさん:03/03/21 16:59
普通自前かライブラリでBOOLくらい定義していると思うけど・・・

571 :制御屋さん見習中:03/03/21 16:59
まじめです、本当。

OKは 0で
ERRORは -1
にしとけば、良いですか?

K&Rでは、OKは0で、ERRORは1
です。


572 :デフォルトの名無しさん:03/03/21 17:00
>>571
数字をそのまま書けって。
エラーの種類がいろいろあるなら話は別だけど。

573 :制御屋さん見習中:03/03/21 17:00
間違い!

ERROR は-1でした。
すみません!!

574 :制御屋さん見習中:03/03/21 17:04
みなさん、すみません。

>>568さんのを
頭に入れつつ、
数字を書きます。

プログラムを提出(仕事ね)
するので、混乱しないよう、
数字にしときます。



575 :デフォルトの名無しさん:03/03/21 17:04
>>574
プロかよっ!!

576 :デフォルトの名無しさん:03/03/21 17:04
>>574
関数の説明のコメントは忘れずに。

577 :制御屋さん見習中:03/03/21 17:06
>>575
見習中です。まじで。

>>576
コメントは沢山いれろと
上司に言われました。

578 :デフォルトの名無しさん:03/03/21 17:07
>>577
おうむ返しは厳禁

579 :デフォルトの名無しさん:03/03/21 17:08
typedef enum { False = 0, True = !False } Boooool;
でも使っと毛。

580 :デフォルトの名無しさん:03/03/21 17:10
>>579
なんでTrue = 1にしないの?

581 :制御屋さん見習中:03/03/21 17:13
>>578

すみません、おうむ返しとは
どういう行為ですか?

あまり、マナーを分かっていないもので。

582 :デフォルトの名無しさん:03/03/21 17:14
>>581
http://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi?MT=%A4%CC%A4%EB%A4%DD+%A4%AA%A4%A6%A4%E0%A4%AC%A4%A8%A4%B7&sw=2

583 :デフォルトの名無しさん:03/03/21 17:14
>>569,572,574
数値直書きは現金。エラー複数返すときは#defineかenum使え。

584 :デフォルトの名無しさん:03/03/21 17:16
>>583
#include <stdlib.h>
int main()
{
return EXIT_SUCCESS;
}
とかやる人?

585 :デフォルトの名無しさん:03/03/21 17:18
ぬるぽ?

586 :デフォルトの名無しさん:03/03/21 17:18
>>584
>>583 じゃないが、俺やってるよ。

587 :デフォルトの名無しさん:03/03/21 17:18
>>585
ガッ


588 :デフォルトの名無しさん:03/03/21 17:18
漏れなら
HRESULT main()
{
 return S_OK;
}
ってやるな

589 :デフォルトの名無しさん:03/03/21 17:19
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>585

590 :デフォルトの名無しさん:03/03/21 17:19
>>586
ガーン・・・

591 :デフォルトの名無しさん:03/03/21 17:21
ふつー
#ifndef __cplusplus
typedef unsigned char bool;
#define true (1)
#define false (0)
#endif

592 :デフォルトの名無しさん:03/03/21 17:27
ちょっとききたいんだが
C FAQ 日本語訳
をちゃんと読んでいるやつはどれくらいいるんだ?

ちゃんと読んでたら議論するようなことじゃないようなことじゃないことばかりでとまどうよ


593 :デフォルトの名無しさん:03/03/21 17:28
>>592
読みますた

594 :デフォルトの名無しさん:03/03/21 17:32
確かに最後の行に戸惑いが覗える

595 :デフォルトの名無しさん:03/03/21 17:50
メモリの解放っていつやればいいんですか?

596 :デフォルトの名無しさん:03/03/21 18:03
>>595
いらなくなった時。

597 :デフォルトの名無しさん:03/03/21 18:14
>>558
関係ない。>>482後半は意味不明だから無視するように。

598 :デフォルトの名無しさん:03/03/21 18:21
>>597
stdinとかのことを言っているんだと思うけど。

599 :デフォルトの名無しさん:03/03/21 18:46
>>595
メモリが独裁者によって支配されたとき。


600 :デフォルトの名無しさん:03/03/21 18:48
>>599
root?

601 :デフォルトの名無しさん:03/03/21 19:12
>>598
sadom stdin


602 :デフォルトの名無しさん:03/03/21 19:22
scanfってキーバッファから入力データを読み出してるんですか?

603 :デフォルトの名無しさん:03/03/21 19:24
>>602
抽象化された標準入力からだと思います。

604 :デフォルトの名無しさん:03/03/21 20:04
RubyはCで作られているんだよ。

605 :デフォルトの名無しさん:03/03/21 20:06
RubyはRubyで作られているんだよ

606 :デフォルトの名無しさん:03/03/21 20:28
>>605
それはない。JavaはRubyでも作れるけどな。

607 :デフォルトの名無しさん:03/03/21 20:30
でもCはCで作られているよ

608 :デフォルトの名無しさん:03/03/21 20:30
>>598
読み込み専用のストリームは*stdinだけ*か?
また、デバイスやパイプに対するstdoutは?

609 :デフォルトの名無しさん:03/03/21 20:33
>>608
文盲?

610 :デフォルトの名無しさん:03/03/21 20:35
"とか"と言っているのに"のみ"に置き換えてしまう>>608の脳はどうなっているんでしょう。

611 :デフォルトの名無しさん:03/03/21 20:47
>>609,610
>>482か?
要するに「seekできない」という「デバイスに対する動作」を、stdinから読
み込み専用すべてに誤って過般化しているという問題なんだが。


612 :デフォルトの名無しさん:03/03/21 20:50
半角?くん、久々の登場です!

613 :デフォルトの名無しさん:03/03/21 20:53
半角?くん?


614 :デフォルトの名無しさん:03/03/21 20:56
はんかくはてなくん
はてなはんかくん

615 :ネニグレクト・ラーファ:03/03/21 20:57
何か質問があったら俺に聞けでつ。
最近HTMLがわかってきたでつ。
「世界の仕組み研究所」
ttp://www.geocities.jp/fieldabout/

616 :デフォルトの名無しさん:03/03/21 21:00
半角?くんって誰?

617 :デフォルトの名無しさん:03/03/21 21:01
ちょっとイかしたアウトロー

618 :デフォルトの名無しさん:03/03/21 21:02
>>617
>>610のこと?>>611のこと?

619 :デフォルトの名無しさん:03/03/21 21:04
半角二次元?

620 :デフォルトの名無しさん:03/03/21 21:50
( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>582

621 :デフォルトの名無しさん:03/03/21 21:52
>>582
そういう技もあったのか…

622 :デフォルトの名無しさん:03/03/21 21:53
ぬるぽ?

623 :デフォルトの名無しさん:03/03/21 22:07
ズレテンジャネーカ
  ( `Д´)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V・∀・)/
 (_フ彡        /  ←>>620

624 :デフォルトの名無しさん:03/03/21 22:14
ドリフのハンマーで頭殴ったときの効果音が好きだった。

625 : :03/03/21 23:09
質問です
かなり大きな数(読み方がわからないくらいのオーダーです)を
Cで扱うにはどうすればよいでしょうか。
よろしくお願いしいます。

626 :デフォルトの名無しさん:03/03/21 23:13
>>625
文字列

627 :デフォルトの名無しさん:03/03/21 23:17
>>625
多倍長ライブラリを使う。


628 :デフォルトの名無しさん:03/03/21 23:29
演算子のオーバーロードってできないの?

629 :デフォルトの名無しさん:03/03/21 23:31
う足す足すなら出来ます。

630 :デフォルトの名無しさん:03/03/21 23:49
リニアホイールなら出来ます。

631 :デフォルトの名無しさん:03/03/22 00:01
ヴォイジャーのワープコアなら出来ます

632 :デフォルトの名無しさん:03/03/22 02:09
ループの中でプロトタイプが
BYTE func(BYTE c); の;関数を何度も呼び出す場合
呼出し側でたとえば
while(1)
{
func(var) ;

}
このようにある時、
変数varがint型かBYTE型かでスピードが変わったりしますか?

633 :デフォルトの名無しさん:03/03/22 02:18
>>632
することもあるししないこともあります。
コンパイラの最適化やCPUアーキテクチャによって変わります。

一概にどう書けば速くなる、とは言えませんが、経験的には int で
積むのが素直で速いコードになる気がします。
でも最終的にはコンパイラの吐いたコード見て調べるしかないと思います。

634 :632:03/03/22 02:27
>>633
早速ありがとう。 勉強になるなぁ。

635 :デフォルトの名無しさん:03/03/22 02:31
>>633
>でも最終的にはコンパイラの吐いたコード見て調べるしかないと思います。
no.
コード見ただけで、キャッシュや、遅延分岐等の影響まで判断出来たら神。
実際に時間計るしかないってのが正解だと思われ。

もちろん言いたい事は解るし、他も概ね同意だけど。


636 :デフォルトの名無しさん:03/03/22 03:02
着弾凄い

637 :デフォルトの名無しさん:03/03/22 03:08
>>636
イラク?

638 :デフォルトの名無しさん:03/03/22 03:10
おお、燃えてる・・・

639 :デフォルトの名無しさん:03/03/22 03:23
燃えるイクラ

640 :デフォルトの名無しさん:03/03/22 03:23
最近のCGの進歩ってものすごいものがあるね。
光のエフェクトはいうまでもなく建物のモデリング・シェーディングや
煙の物理計算も信じられないほどリアル。

641 :デフォルトの名無しさん:03/03/22 03:28
お前の脳内イラクの人も大変だな

642 :デフォルトの名無しさん:03/03/22 03:31
>>640
CGの進歩というよりコンピュータの進歩

643 :デフォルトの名無しさん:03/03/22 10:21
>>632
結果をint変数に引き取る場合、一般的に戻り値はintのほうがタイトなコードになる。
;int i = func();
call func
mov r1(as int i), r0(ret)
and r1, 0xff ;戻り値がBYTEの場合のみ必要

ただし、関数側でBYTEからintに拡張する場合は結果的に同コスト。
;in func
;return b;
mov r0(ret), r1(as BYTE b)
and r0, 0xff ;戻り値がintの場合のみ必要
return (to caller)

なお、一般的には関数から定数を戻す場合はintで戻すほうがいいが、
CPUによってはBYTE定数のほうがタイトなコードになる場合もある。
;in func
;return -1;
mov r0(ret), 0xffffffff
; mov r0(ret), 0xff ;イミディエイト値の幅の差で命令長が短くなる
return (to caller)

644 :デフォルトの名無しさん:03/03/22 10:31
>>635
そんなことを言い出したら...

> 実際に時間計るしかないってのが正解だと思われ。

と言うのも怪しい。計る度に違うこともあるからね。

俺は、このスレ的には >>633 で正解だと思う。

645 :デフォルトの名無しさん:03/03/22 10:58
関数引数または戻り値にintより小さい整数型を使うと
パフォーマンスを損なう可能性があると言える。

漏れは、intより小さい整数型は構造体メンバか、ポインタが必要な場合にしか使わない。

646 :デフォルトの名無しさん:03/03/22 12:08
アセンブリて知っといた方がいいんすかね?
めんどくさいんで勉強したくないんすが
できれば無視してじゃばに行きたんすが

647 :デフォルトの名無しさん:03/03/22 12:19
>>646
先人たちのおかげで知らなくても生きてはいけそうです。
でも、かなり楽しそうな分野であることも間違いないです。

て言うか、アドレスとかビット演算とかって高級言語でも常識だから文法さえ覚えれば書けそうな予感。


648 :デフォルトの名無しさん:03/03/22 15:12
アドバイスおながいします。
バイナリのファイルを1バイトづつ読み込んで検証するプログラムを作ろうと思っています。
FILE *fp;
char buf = 0;
fp = fopen(file_location, "r")
while(fread(&buf, 1, 1, fp) != EOF) {
printf("%02X,",buf);

}
fclose(fp);
っていう感じでやろうと思ったんですが、これだとint型が僕の環境だと4バイトもあるので
bufの中身が4D000000みたいになってしまいます。(欲しいデータ4Dです)
でbufを1バイトのchar型にしたら少しうまく行ったのですが、
なんかおかしなやり方をしている気がします。
また、ファイルの終端の判断もおかしくて、一生終わりません。
終わり方はあとで考えるとして、1バイトのデータを読み込むためには
どのような方法がいいんでしょうか。


649 :デフォルトの名無しさん:03/03/22 15:14
>>648
unsigned charってとこじゃないの?

650 :デフォルトの名無しさん:03/03/22 15:20
>fp = fopen(file_location, "r")

fp = fopen(file_location, "rb")
とりあえずここはこうじゃないの?


651 :デフォルトの名無しさん:03/03/22 15:28
>>648
関数マニュアル fread をよく読め。
戻り値は EOF じゃなくて成功した要素数。

652 :デフォルトの名無しさん:03/03/22 15:30
おお!>>649さん、>>650さん、ありがとうございます。
この2点、書籍でも確認できました。まず変更してみます。
必要に迫られて作ってるのですが、先が思いやられるです(^^;)。

653 :デフォルトの名無しさん:03/03/22 15:33
>>651さん どうもです。
そうですよね、やっぱり。第3引数が1だからきっと1以外で終了
なんだろうなあと思ったんですが、止まらなくなったので
いろいろ試してたです。がんばります。

654 :デフォルトの名無しさん:03/03/22 15:38
>>653
こうしてみる。

fp = fopen(file_location, "rb");
// fp エラーチェックを入れる
while(fread(buf, 1, 1, fp) != 0)

1バイトずつ読むなら int c; while( (c = fgetc(fp)) != EOF ) で
いいと思うけども。

655 :デフォルトの名無しさん:03/03/22 15:46
>>653
そうだね。1以外で終了ってことはつまり1で続行するから。
while(fread(buf,1,1,fp)==1) だね。
がんばって。

656 :デフォルトの名無しさん:03/03/22 15:49
>>653さん ありがとさんです。
なるほど、fgetcでOKだったんですね。テキスト書類しか扱ったことが
なかったので、とりあえずfgetcとかchar型変数とか普通のやり方じゃ
だめなんだと思ってました。
とりあえず、unsigned charと終了条件の変更ですべてうまく行ったっぽいです。
"rb"に関しては変更しなくても何故かうまく行きましたが、とりあえず
ちゃんと変更しておきました。>>654さんのも今から試してみます。
ありがとうございましたー。

657 :デフォルトの名無しさん:03/03/22 15:57
普通"r"。

"rb"なんかにする必要があるのはへんなOSだけ。

658 :デフォルトの名無しさん:03/03/22 16:03
>>657
そうですね、移植性も気にせずとてもいいお考えだと思います。
あなたの前途を祝して、乾杯。


659 :デフォルトの名無しさん:03/03/22 16:04
>>656
バイナリはバイナリモードで開くと覚えておいて。
バイナリ指定をしないと、例えばバイナリで (0xD)CR (0xA)LF と
いうコードが出てきたとき、ライブラリが '\n' に変換する。
これはCでMicrosoftのテキストファイルを開くときに都合がいいけど
バイナリでこの処理されると困るから。

660 :デフォルトの名無しさん:03/03/22 17:50
fopen等でフルパスを与えられる事はこのスレのちょっと前に乗っていて分かった
のですが、一つ下、一つ上のディレクトリの指定の仕方があるなら教えてください。

661 :デフォルトの名無しさん:03/03/22 17:52
嫌ですっ!

662 :デフォルトの名無しさん:03/03/22 18:32
相対パスってことを言ってますか?
C言語以前の問題ですがw

663 :デフォルトの名無しさん:03/03/22 18:37
そうたい!

664 :デフォルトの名無しさん:03/03/22 18:43
>>662の中の人も大変だな。

665 :デフォルトの名無しさん:03/03/22 19:12
C言語極めたらプログラマーになれますか?

666 :デフォルトの名無しさん:03/03/22 19:15
>>665
安いコーダーとしてなら使ってもらえるんではないでしょうか?


667 :デフォルトの名無しさん:03/03/22 19:51
極めなくても、
プログラムを組む人をプログラマーと言いますが何か?

668 :デフォルトの名無しさん:03/03/22 20:31
他のスレで、レスがないのでここで聞いてみます。
すみません。教えてください。
C言語でAPIが呼ばれる毎に識別可能なメモリ領域を確保するには
どのようにしたらよいでしょうか。

669 :デフォルトの名無しさん:03/03/22 20:31
まろっくしてたりなくなったらりあろっく

670 :デフォルトの名無しさん:03/03/22 20:42
まほろまてぃっくしてたりなくなったらみなわまてぃっく

671 :デフォルトの名無しさん:03/03/22 20:45
>>670
荒らすな

672 :デフォルトの名無しさん:03/03/22 21:31
定数(例えば5)をファイルに書き出す時に
書き出すバイト数を決めておきたい場合(例えばsizeof(int))は、

int n=5;
fwrtie( &n, sizeof(int), 1, fp );

みたいに書くしかないんでしょうか。

673 :デフォルトの名無しさん:03/03/22 22:07
>>672
何を期待しているのかわからない。っていうか引数の順番それでよかったっけ?

674 :デフォルトの名無しさん:03/03/22 22:13
>>673
引数は正しい。
戻り値見てないとかは置いといて。

675 :672:03/03/22 23:00
5を、(例えば4バイトで)ファイルに書き出したい。
fprintfだとバイト数は指定できないからfwriteを使ったのだが。
それとも、fwriteの使い方間違ってる?



676 :デフォルトの名無しさん:03/03/22 23:07
ところで、
1: fwrite( &n, sizeof(int), 1, fp );
2: fwrite( &n, 1, sizeof(int), fp );
どっち使ってる?
戻り値チェックしないとして(w
処理系にもよると思うけど、関数内部で速度的な差とかあり?


677 :674:03/03/22 23:09
>>675
間違ってないよ。使う関数もfwriteで正解。
エンディアンとかで問題無ければ。

678 :デフォルトの名無しさん:03/03/22 23:18
挑戦age

679 :デフォルトの名無しさん:03/03/22 23:35
fwr t i e
には突っ込まないのか?

680 :デフォルトの名無しさん:03/03/22 23:58
ブロックバイト数×ブロック数だから1が正解。
sizeof struct×配列数を想定していると思われ、
処理速度等はディスクキャッシュとかに左右されるのでは?

あと、質問の例として出したコードに戻り値チェックしてないとか言うのは
揚げ足取り以外の何者でも無いですなw

681 :674:03/03/23 00:07
>>680
戻り値の事書かないで「全面的に正しい」なんて書いたら
揚げ足取られるの漏れの方だから(w

682 :デフォルトの名無しさん:03/03/23 01:01
>>676
関数内で size*n してるだけなので、
速度はまず変わらないと思われ。

683 :デフォルトの名無しさん:03/03/23 01:32
>>672
ファイルサイズ固定じゃなきゃいけないとか、
バイナリデータじゃなきゃいけないとか、
大きな値を格納するときに極力サイズを減らしたいとか、
簡単に見られちゃ困るとか、
そういった要請がないならテキストファイルにしとき。
つまり、fwrite(&n, sizeof(int), 1, fp);の代わりにfprintf(fp, "%d\n", n);な。

データが2次元的な構造なら
for (iy = 0; iy < height; iy++) {
 for (ix = 0; ix < width; ix++) {
  if (ix > 0) {
   fprintf(fp, ", ");
  }
  fprintf(fp, "%d", data[iy][ix]);
 }
 fprintf(fp, "\n");
}
とでもすればcsvファイルとしてエディタでもExcelでも読み書きできてデバッグに便利だ。

684 :660:03/03/23 03:35
できました。と言うか、実験もしない、具具ってもいませんでした。すいません。
HTML等と大体一緒なんですね。\\と2つ使うのを除いては。
・何も指定しないと今のフォルダ
・フォルダ名\\で今のフォルダにあるフォルダの中に入る
・..\\でそのフォルダの1つ上のフォルダに戻る

685 :デフォルトの名無しさん:03/03/23 05:14
HTML?

686 :デフォルトの名無しさん:03/03/23 05:17
URLのことかと。

687 :デフォルトの名無しさん:03/03/23 08:41
つーか、>>660 は「ファイルシステム」について調べた方がいいな。

688 :デフォルトの名無しさん:03/03/23 12:09
ディレクトリ区切りはMS-DOS系の場合、バックスラッシュ(\)なので
Cではエスケープして"dir\\file"とする必要がある。
ここで注意しないといけないのは、ShiftJisの2バイト目が'\\'と同じコードに
なる可能性があるのでディレクトリ区切りとファイル名の一部と区別がつけにくいこと。
某芝のMP3プレイヤのバグもこれが理由だった。

こんなOSいやだ。

689 :デフォルトの名無しさん:03/03/23 12:22
>>688
>ShiftJisの2バイト目が'\\'と同じコードになる可能性があるので

べつに区切り文字がなんであろうと同じ問題が起きるだろ?


690 :デフォルトの名無しさん:03/03/23 12:32
>>689
つーか OS の問題じゃねーだろ。
初期の DOS は忘れたけど、Windows になってからはそんな問題聴いたことがないよ。
問題があるのは、Shift-JIS に対応していないタコな処理系で日本語使おうとしているタコな >>688 だろ。

691 :デフォルトの名無しさん:03/03/23 12:35
ShiftJIS で二バイト目に '/' が来ることってあるんだっけか?

692 :デフォルトの名無しさん:03/03/23 12:47
>>691
あれ? 無いみたいだ 689のこと忘れてください・・・


693 :デフォルトの名無しさん:03/03/23 12:48
>>689
ディレクトリ記号をファイル名に使ってしまうOSなんて、DOS系以外知りませんが?
>>690
自前でフルパスを分解するような処理を書いたことないなら黙ってたら?
>>691
字は読める?


694 :デフォルトの名無しさん:03/03/23 12:49
>>691
>>689のこと言ってたのか、すまん。

695 :660:03/03/23 13:12
>>687
?。パスのやり方が違うのですか。うまく指定したフォルダにファイルを作れたのですが。

696 :デフォルトの名無しさん:03/03/23 13:14
>パスのやり方

はぁ?

697 :デフォルトの名無しさん:03/03/23 14:14
>>695
あきらかに君のレベルとは違う話してるので、気にしなくてよろしい。

698 :デフォルトの名無しさん:03/03/23 14:49
>>693
> 自前でフルパスを分解するような処理を書いたことないなら黙ってたら?

普通 ライブラリか API 使うだろ。

自分で書いたとしてもたいしたことないけどね。

699 :デフォルトの名無しさん:03/03/23 14:53
どうでもいいことで、煽ったり煽られたりするな

700 :デフォルトの名無しさん:03/03/23 14:56
>>688
DOSやWindowsでも"dir/file"でアクセスできる。

701 :デフォルトの名無しさん:03/03/23 15:36
setvbufはOSが割り当てるバッファとは別の場所に
バッファを設けるやつなんすか?

702 :デフォルトの名無しさん:03/03/23 15:42
>>700
入力は'/'だけじゃなくて'\\'も受け付けないといけなかったりするもんで。

703 :デフォルトの名無しさん:03/03/23 15:47
>>701
と、いうかプログラマが用意してやらないといけない。
その領域は少なくともクローズされるまでは確保されていなければならない。

704 :デフォルトの名無しさん:03/03/23 15:49
>>702
入力として外部から与えられるならプログラム中に書くように '\\' と二つにする必要はない
(これはいいよね?)。
その他の場合も普通の API ならプログラマが特に気にしないといけない実装になってる方がおかしい。
もしそういうAPIの環境下なら適当なwrapperをかけてやるといい。

705 :デフォルトの名無しさん:03/03/23 16:04
最近Cをはじめて、時々聞くのですが
「標準ライブラリ関数の自作」ってどうやるんですか?
最初からC言語側で用意されてる関数を自作ってことですよね?
たとえば、printf()やscanf()等の自作はどうやるのでしょうか?

知ってるかた、教えてください。よろしくお願いします。

706 :デフォルトの名無しさん:03/03/23 16:15
>>705
glibcというGNUライブラリで実装されているよ。
勉強になるから読んでみるといい。

(ニヤ

707 :706:03/03/23 16:17
実装というか、実装ソースが公開されている。ということで。

708 :デフォルトの名無しさん:03/03/23 16:21
>>705
printf/scanf 共に最小単位が一文字なんだから最後は(仮想的な)一文字入出力に行き着くのはわかるよね
そこまでは <stdarg.h> を使った可変長引数関数を作ることになる
そこから先の部分は(バッファリングの実装を含めて)環境依存になると思う

709 :デフォルトの名無しさん:03/03/23 16:57
キーボードからのバッファリングについて質問なんですが
バッファに読み込んだ1行データはプログラムが読み出したときに
バッファから開放されるんですか?
それともデータはバッファに残ってて、バッファ内の読み出し位置を示すポインタが
次の読み出し位置をポイントするだけなんでしょうか?

710 :デフォルトの名無しさん:03/03/23 17:10
>>709
普通後者

711 :デフォルトの名無しさん:03/03/23 17:39
>>710
礼を言う

712 :デフォルトの名無しさん:03/03/23 17:54
>>711
早く言ってよ。

713 :デフォルトの名無しさん:03/03/23 18:02
>>712
I LUV U BABY

714 :デフォルトの名無しさん:03/03/23 18:27
曲名じゃねーか。

715 :デフォルトの名無しさん:03/03/23 21:03
今Cを勉強している者なのですが、
例題とかを公開してるページってないでしょうか?
知っていたら是非教えて下さい。

716 :デフォルトの名無しさん:03/03/23 21:22


    ぐ    ぐ    れ


717 :デフォルトの名無しさん:03/03/23 21:55
ぐぐりましたが、参考書のオンラインショッピングしか出てきません。

718 :例題:03/03/23 22:32
int a;

719 :難問:03/03/23 22:53
「自身と同じ型の関数ポインタ」を返す関数の型って、どう書けば良い?
例えば↓で ? の部分に何を書いたら良いのか。

? hoge()
{
 return hoge;
}

一応 void* でもコンパイルは通るが、↓のようなコードは通らない。

phoge = hoge;
for( cnt=0; cnt<10; ++cnt )
  phoge = phoge();

720 :デフォルトの名無しさん:03/03/23 23:10
これはどう考えてもムリだということは一目瞭然と思われ。
phoge = phoge();

721 :デフォルトの名無しさん:03/03/23 23:26
>>719
直接に定義することはできない。
汎用の関数ポインターを返す関数を 用意して、
ポインターを渡すたびに関数の型にあわせて慎重にキャス トを行う。
または関数が構造体を返すようにする。
その構造体は、そ の関数へのポインターだけをメンバーに持つようにする。

以上はC FAQの引用である

あと、void *に関数ポインタをいれてはいけない。

722 :デフォルトの名無しさん:03/03/23 23:31
>>719
それってエラー出ないの?
そういうコトが起きる可能性があるから
同名変数の2重定義とか気をつけるんじゃない?

723 :デフォルトの名無しさん:03/03/23 23:51
>>722
何か勘違いしてませんか

724 :デフォルトの名無しさん:03/03/24 01:28
厳密に定義はできないんじゃないかな。
無理矢理キャストすればなんとでもなりそうだけど。

ちなみにgccだけど、void * で
 phoge = phoge();
は動いたよ。

725 :デフォルトの名無しさん:03/03/24 01:44
void *に保証されていることはオプジェクト(すなわちデータ)を指すポインタを格納できることだけだ。
関数ポインタをvoid *に変換することは移植性が高くない。(マシンによっては関数ポインタは非常に大きい。どのデータポインタよりも大きい)

しかしながら、すべての関数ポうん他派、呼び出す前に適切な型に戻す限り、互いに変換可能が保証されている。
だからどのようなものでよいからなんらかの関数型(普通はint (*)()かvoid (*)())を汎用の関数ポインタとして使えばよい。
オブジェクトへのポインタと関数へのポインタをかわるがわる保存する場所が必要なら、
移植性の高い解決策はvoid *と汎用の関数ポインタからなる教養態を使うことである。

これ嫁

726 :デフォルトの名無しさん:03/03/24 01:48
>>725
これの引用元は何?

727 :デフォルトの名無しさん:03/03/24 01:53
>>726
失礼、これの引用もとは C FAQ

ただしオンラインのFAQでは欠番だった。
本で出ているほうが欠番も少ないし、一つ一つ細かく、ちゃんとコード例も多い

728 :デフォルトの名無しさん:03/03/24 01:57
>>727
ありがとう

729 :728:03/03/24 02:00
ちょっと目から鱗だった。


730 :デフォルトの名無しさん:03/03/24 03:44
ちょっと目からぬるぽだった。

731 :デフォルトの名無しさん:03/03/24 03:56
ドウイウイミダヨ
          | | ガガガガガッ   .人
  ( ・∀・)   | |       人  <  >__Λ∩
 と    )    | |    人  <  >__Λ∩Д´)/
   Y /ノ    .人   <  >__Λ∩Д´)/   / ←>>730
    / ) .人 <  >__Λ ∩Д´)/   / ←>>729
  _/し' <  >_Λ∩Д´)/   / ←>>730
 (_フ彡 V`Д´)/   / ←>>730
            / ←>>730

732 :デフォルトの名無しさん:03/03/24 04:04
>>682
本当にそう思うか?
ディスクフルがもうすぐ起こる状態で第 2 引数と第 3 引数を入れ替えて実験
した事は無いか?

733 :デフォルトの名無しさん:03/03/24 10:10
>>732
どっちにしろ動きはOS依存。

734 :デフォルトの名無しさん:03/03/24 10:29
>>676
1 の方が早い実装があると思うがどうよ
(いやもちろん作為的に逆には出来るけど)
覚えてたら後で実験してみる

735 :デフォルトの名無しさん:03/03/24 10:34
最大の謎はなんでfwriteはあんなインターフェイスになっているかだ

fwrite( buffer, buffer_size, fp);

で別にいいじゃないのか?

736 :デフォルトの名無しさん:03/03/24 10:45
たとえば要素数が10個のint型の配列を書き込むときはそうした方が自然だから。callocと同じ。

737 :デフォルトの名無しさん:03/03/24 11:30
>>736
だとするなら、fwrite関数はそれを意味するように呼ぶべきだよね
実行効率を気にするよりも

738 :デフォルトの名無しさん:03/03/24 12:00
>>735
I/Oが単純なバイトストリームじゃない環境だと、動作が異なるという話を聞
いたことがあるような気がする。
そんなのもちろん使ったことないし、よく覚えてないが。


739 :デフォルトの名無しさん:03/03/24 12:11
>>734
してみたけど一緒だった。
考えてみりゃ早くなるなら早くなるように作るのが当然だわな

740 :デフォルトの名無しさん:03/03/24 12:57
int型year変数があり西暦が入っているのですが、sprintf一発で下2桁の年号
を文字列で取り出したいです。
可能なんでしょうか?
可能だとしたら、どのように指定すれば良いか教えて下さい。
宜しくおながいします。

741 :デフォルトの名無しさん:03/03/24 13:04
sprintf(buffer, "%d", year % 100);

742 :デフォルトの名無しさん:03/03/24 13:29
>741
即レス誠にありがとうです。解決です。

743 :デフォルトの名無しさん:03/03/24 14:05
int型の変数をchar型にキャストしたい時って、対象のchar型変数は
配列にする必要があるのでしょうか?ご教授お願いします。

744 :デフォルトの名無しさん:03/03/24 14:13
無い

745 :デフォルトの名無しさん:03/03/24 14:15
どうもありがとうございました。
やってみます。

746 :デフォルトの名無しさん:03/03/24 14:19
>>1
C言語ってなんですか?

747 :デフォルトの名無しさん:03/03/24 14:22
>>746
しね
http://www.google.com/search?hl=ja&inlang=ja&ie=Shift_JIS&q=C%8C%BE%8C%EA%82%C6%82%CD&lr=

748 :デフォルトの名無しさん:03/03/24 14:34
((提案なんだけど、(読みやすくするために))全ての式にカッコ(()←これね)を付けようよ。)
(i++);
((s)=((a)+(d[((org((i)))+(i))])));

749 :デフォルトの名無しさん:03/03/24 14:34
(((ちょっと)提案なんだけど、(読みやすくするために))全ての式にカッコ(()←これね)を付けようよ。)
(i++);
((s)=((a)+(d[((org((i)))+(i))])));

750 :デフォルトの名無しさん:03/03/24 14:36
>>748
i++ という式に括弧を付ける。
(i++);
(i++) というのは式なので、これに括弧を付ける。
((i++));
((i++)) とい(略。

春だからってイイ気分なのは構わんが、黙って ROM ってろ、ボケ。

751 :デフォルトの名無しさん:03/03/24 14:36
((あっ…)ごめんなさいね(二重カキコ(をしちゃったね)))

752 :デフォルトの名無しさん:03/03/24 14:38
ガクブルみたいだな。

753 :デフォルトの名無しさん:03/03/24 14:38
>>748
そういう奴はLispでプログラム書いてろ

754 :デフォルトの名無しさん:03/03/24 14:39
俺には正規表現のように見える。

755 :デフォルトの名無しさん:03/03/24 14:40
>>753
Lisp を貶めてるだけの馬鹿だと思われるので、Lisp 界に引きずりこまないでください。

756 :デフォルトの名無しさん:03/03/24 14:40
ここで「たくさん釣れた」がくるのに100ペリカ↓


757 :制御屋さん見習中:03/03/24 14:40
スレ違いな質問かもしれません。

(質)
組み込み系にCでプログラミングする際の
問題点等参考になるページありませんか?

特にタスク間のリエントラントについてなのですが。

お願いします。

758 :デフォルトの名無しさん:03/03/24 14:49
>>757
リエントラントならまず大域的なりソースにアクセスしない。する場合は
1)排他処理をきちんとする
2)該当リソースを管理するタスクを用いてタスク間通信でやりとりする
といった方法を採択する、位か。

>>756
100ペリカげと(w

759 :制御屋さん見習中:03/03/24 14:53
>>758
ありがとう!

大域的なリソースとは何ですか?
externな変数?ですか?

760 :756:03/03/24 15:10
>>758
> 100ペリカげと(w
外しちまったや(笑)。

>>759
> 大域的なリソースとは何ですか?
たしかにやってしまいがちな例は extern 変数だが、そうとは限らない。
例えば、君は制御屋さんみたいだからデバイスへのアクセスも行うことが
あると思うが、これも大域的なリソースだ。
というか、まずはググれ。ここで説明するよりも膨大な量の資料が
見付かるはずだよ。

761 :デフォルトの名無しさん:03/03/24 15:12
>>759
それはまぁ基本。排他もよく考えて使わないとロックする場合がある。
「見習い」ということでOJTみたいなことやってるなら多分スタックだけで
済むサブルーチンではないかと思うけど。

762 :制御屋さん見習中:03/03/24 15:24
>>760,761
助かります。

確かに、761のいうとうりなのです。
が、それじゃあ面白くないので、
OJTと並行して(マルチタスク(笑))
知識も持ちたいんですよ。

実はリエントラントも知らなかった
超初心者。見習より丁稚ですね。

組み込み Cでググって色々出てきました。

763 :デフォルトの名無しさん:03/03/24 15:29
>>762
OSの基礎本を買って読むとよろし。排他の必要性とかデッドロックの種類分けとか
ちゃんと載ってるから、それを踏まえておけば後は作るだけだ。

764 :制御屋さん見習中:03/03/24 15:34
>>763
OSですね。

参考文献ありましたら、教えて欲しいです。

先日 CQ出版 リアルタイム/マルチタスクシステムの
徹底研究
という本を買ったのですが、かなり難しかったです。


765 :デフォルトの名無しさん:03/03/24 15:35
strlen関数使わずに文字数数える方法ってありますか?

766 :デフォルトの名無しさん:03/03/24 15:38
きみにはむり

767 :スレ違いなので誰かいいスレ示してあげて:03/03/24 15:49
>>764
それはきっと具体的なコードとか示してるんじゃない?
もっと概念的なのでいいと思うんだけど。

> ttp://www.yfcbookshelf.com/operatingsystem's%20books1.htm

うわ、8800円かよ…まぁ会社で買ってもらえ(w
でも自分で買った方が身につくとは思うけど

768 :スレ違いなので誰かいいスレ示してあげて:03/03/24 15:51
>>765
1)指を折る
2)
unsigned l;
const char *p;
for (l = 0, p = "abc"; *p++; l++)
;
printf ("%u\n", l);

769 :デフォルトの名無しさん:03/03/24 16:09
>>768
サンクスです。

770 :デフォルトの名無しさん:03/03/24 17:07
いやいや sizeof("abc")-1 だろ。

771 :スレ違いなので誰かいいスレ示してあげて:03/03/24 17:12
あれ? それってポインタのサイズにならないんだっけ

772 :デフォルトの名無しさん:03/03/24 17:28
ネタにマジレスはカコワルイですよ。
ここはこう言うベキデス。

>>770
(・∀・)カエレ!!

773 :デフォルトの名無しさん:03/03/24 17:50
>771
$ cat t.c
int main()
{
printf("%d\n", sizeof("hello world."));
}
$ gcc t.c
$ ./a.out
13

774 :デフォルトの名無しさん:03/03/24 18:05
今、中学生でK&Rを買おうと思ってるんですが、
みなさんの意見を聞くと邦訳版より原著版の方がいいと聞きます。
英検2級あれば原著版読めるでしょうか?

775 : ◆8Bf1cDJWMA :03/03/24 18:25
>>774
中学生で英検2級?
オミソレ。

776 :デフォルトの名無しさん:03/03/24 18:35
春厨のくせに英検2級とはたいした能力ですな

と釣られてみるテスト

777 :774:03/03/24 18:57
原著版って結構PC用語出てきますか?
辞書で引ける範囲の単語だけだったら買うのですが・・。

778 :デフォルトの名無しさん:03/03/24 19:02
>>773
ほんとに13だったけど微妙だなあ

779 :デフォルトの名無しさん:03/03/24 19:08
いや、sizeof に対してはポインタに変換されないってちゃんと規格にあったす

780 :デフォルトの名無しさん:03/03/24 19:12
char buf[sizeof("255.255.255.255")];
とかよく使うけどな。

781 :デフォルトの名無しさん:03/03/24 19:13
>>780
利点がわかりません

782 :デフォルトの名無しさん:03/03/24 19:14
buf[16] って数値を直接入れるのが嫌じゃない?

783 :デフォルトの名無しさん:03/03/24 19:54
#define KEY_WORD "foo"
char buf[sizeof(KEY_WORD)];
とか?

784 :デフォルトの名無しさん:03/03/24 19:55
何かstatic_assertを思い出したよ

785 :デフォルトの名無しさん:03/03/24 19:59
>>782
char buf[] = "255.255.255.255";
じゃいかんのか?

786 :デフォルトの名無しさん:03/03/24 20:02
>>785
それはランタイム時に初期化コードを通る

787 :デフォルトの名無しさん:03/03/24 20:46
charの配列の要素数は256の倍数にしていますが。

788 :デフォルトの名無しさん:03/03/24 20:54
>>780
それするくらいなら、
#define MAX_IP_LEN 15
とかの方がマシだろ。意味分かんなくなるよ。

789 :デフォルトの名無しさん:03/03/24 20:59
い? それだと逆に「何故 15 なのか」ってのがわからないじゃん。

790 :デフォルトの名無しさん:03/03/24 21:10
>>789
はぁ?
buf[sizeof("255.255.255.255")] って書いてあるのと、
buf[MAX_IP_LEN] って書いてあるのとどっちが可読性がいいよ。
マクロの方にはコメントでも入れときゃいいじゃん。

791 :デフォルトの名無しさん:03/03/24 21:16
>>790
15 だったら buf[MAX_IP_LEN + 1] じゃね?
でも sizeof 使うのはいくらなんでもキモすぎ。

792 :デフォルトの名無しさん:03/03/24 21:18
#define MAX_IP_LEN sizeof ("255.255.255.255")

に何故考えが及ばん…

793 :デフォルトの名無しさん:03/03/24 21:24
sizeof か…。俺は数字を直接書く。
というか、sizeof 使った方法なんて思い付かない。


794 :デフォルトの名無しさん:03/03/24 21:54
#define VERY_BIG sizeof(MY_TIMPO)

795 :デフォルトの名無しさん:03/03/24 22:04
$ gcc 1047275669.c
1047275669.c: thread 内の `int main(int, char**)':
1047275669.c:>>794: 嘘(・A・)イクナイ
$


796 :デフォルトの名無しさん:03/03/24 22:07
最近のコンパイラ賢くなったよな。

797 :デフォルトの名無しさん:03/03/24 22:09
メンドクセェナ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/  
 (_フ彡        /  ←>>776

798 :デフォルトの名無しさん:03/03/24 22:11
>>795
そんな馬鹿な。まさか BCC5.5は・・・

エラー E2188 test.cpp 7: >>794 嘘(・A・)イクナイ (関数 main() )
*** 1 errors in Compile ***
** error 1 ** deleting test.obj

ほんまやぁ・・・

799 :デフォルトの名無しさん:03/03/24 22:14
% cat null.c
#include <stdio.h>
main(int argc, char **p){
 printf("%s\n",*p = NULL);
 /*
  ∧_∧
 ( ´∀`)< ぬるぽ
 */
}
% gcc null.c
a.c: In function `main':
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/  
 (_フ彡        /
% ./a.out
(null)
%

800 :デフォルトの名無しさん:03/03/24 22:16
printf("%dcm\n",VERY_BIG)
./a.out
8cm

801 :デフォルトの名無しさん:03/03/24 23:33
printf("%dcm\n",VERY_BIG)
a.exe
42.195km

802 :デフォルトの名無しさん:03/03/25 00:16
printf("%dcm\n",VERY_BIG)
./a.out
Segmentation Fault(core dumped)


803 :デフォルトの名無しさん:03/03/25 00:40
(´-`).。oO(>>802 のティムポはポインタでした…と)


804 :デフォルトの名無しさん:03/03/25 03:17
printf("%c",16)等の半角の罫線は環境依存ですか?

805 :デフォルトの名無しさん:03/03/25 03:38
>>804
端末依存です。

806 :デフォルトの名無しさん:03/03/25 03:39
(´-`).。oO(しかも>>802 のティムポは不正な場所を刺してた…と)

807 :デフォルトの名無しさん:03/03/25 04:33
ぬるぽキタ━━━━━(゚∀゚)━━━━━!!!!

808 :デフォルトの名無しさん:03/03/25 05:22
      | \
      |∀・) ダレモイナイ‥
      |⊂    ナグルナラ イマノウチ
      |

  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>807

809 :804:03/03/25 14:33
>>805
98/Meでは表示されるのですが、表示されないパソコンとかありますか?

810 :デフォルトの名無しさん:03/03/25 14:50
>>809
端末というか、端末の使用するフォントに禿しく依存。


811 :デフォルトの名無しさん:03/03/25 15:34
AT互換機の内蔵フォントなら基本的に同じ(IBM文字セット)
だからDOSなどのテキストモードを使うやつなら全部同じにでるはず。

812 :デフォルトの名無しさん:03/03/25 15:36
>>811
DOS/Vになった時点で・・・

813 :デフォルトの名無しさん:03/03/25 15:37
>>811
DOSの頃から自前のソフトウェアフォントを使うアプリケーションはあったわけだが

814 :デフォルトの名無しさん:03/03/25 15:39
>>812
だから、「テキストモード」に限定してあるのさ。
今時、そんなの使うOSなんてないかもね。


815 :デフォルトの名無しさん:03/03/25 15:53
2バイト文字を1バイトに圧縮する方法を教えて下さい。
明日までになんとかできるでしょうか?


816 :デフォルトの名無しさん:03/03/25 16:10
>>815
どんな事がしたいのか、ちゃんと書きましょう。

817 :デフォルトの名無しさん:03/03/25 16:34
>>815
2バイト文字の中からあなたの好きな255文字を選んでください。話はそれからです。

818 :デフォルトの名無しさん:03/03/25 18:58
>>815
2^n(k) 符号を使ってください。
基本は >>817 で、それをもっと高度にしたものです。
詳細は、電子情報通信学会の論文誌を読んでください。

819 :デフォルトの名無しさん:03/03/25 20:00
こちらはエぬティーティです。
お客様のお掛けになった電話番号は現在使われておりません。
ぽ ーという発信音がす る までしばらくお待ちください。

820 :809:03/03/25 20:29
>>810-814
お答えありがとうございました。

821 :デフォルトの名無しさん:03/03/25 22:40
質問おながいします。
バイナリファイルを扱うコードを書いているです。
以前ここで教わって、読み込む変数はunsigned char型にしましたです。
理由は1バイトづつ配列に入れたかったからであります。
普通文字列を扱うときは配列の最終要素を\0にするようなので、今回は文字ではないものの
処理の都合上、最後に\0を付けようと思ったのですが、バイナリデータを配列に飛び飛びで
格納すると間に\0が入ってしまうことがあって、うまくありませんでしたです。
例えば、00000006という、ひとかたまりのデータがあって、これを
unsigned char buf[5]に入れる場合、buf[0]が\0になってしまうので終端と区別が
つきません。上記の場合は4要素と分かっていますが、読み込んでみないとデータのサイズが
分からない場合が多々あるので困っています。そこで終端に印をつけるのはあきらめて、
先頭にデータサイズを記述しておけばいいのではないかと思いました。
という訳で解決です。..って、あれ?そうじゃなくて、何だかこの方法はとても
スマートでないような気がしてならないので、ご意見を聞かせていただければと
思う出ス。長文すみません。

ときに、NULLと\0の違いがわかりません。どう実験しても同じように振舞います。

822 :デフォルトの名無しさん:03/03/25 22:43
バイナリデータを文字列として扱ってはいけません。
一定バイト数ごと処理するか、読み込んだバイト数を覚えておいてその分処理すればよいです。


823 :デフォルトの名無しさん:03/03/25 23:01
>>822さん
なるほどです。ということは前述の方法で処理するほかないということですね。
どうもありがとうございます。

あと、もう一つお聞きしたいことがあるのです。
配列をcallocで必要サイズきっちりに用意すれば、おそらくsizeofでサイズが
わかると思うのですが、関数の引数で先頭のポインタだけを受け取って、
関数内でサイズを得る方法はありますか。

824 :デフォルトの名無しさん:03/03/25 23:09
>>823
alloc系で確保したメモリのサイズを知る手段はない。
自分で管理するしかない。
それが面倒ならC++でvectorでも使えば楽ができる。
でもそのくらいのcプログラムは書けるようになっておいたほうがいい。
がんがれ。

825 :デフォルトの名無しさん:03/03/25 23:17
あれー。ちょっと気の利いた方法だと思ったのに、だめでしたか。
では、やはり前述の方法でがんがりがす出す。
本当にどうもありがとうございます。

826 :デフォルトの名無しさん:03/03/25 23:37
>>821
> ときに、NULLと\0の違いがわかりません。どう実験しても同じように振舞います。

>>823
> 配列をcallocで必要サイズきっちりに用意すれば、おそらくsizeofでサイズが
> わかると思うのですが、関数の引数で先頭のポインタだけを受け取って、
> 関数内でサイズを得る方法はありますか。

C FAQ を読めば,目が覚めるでしょう.

827 :デフォルトの名無しさん:03/03/26 00:13
ディスクファイルをメモリ上にキャッシュするタイミングって何時なんですかね?
ファイル入力関数を呼び出した時なのか、ファイルをオープンした時なのか
教えて下さい



828 :デフォルトの名無しさん:03/03/26 00:36
>>827
キャッシュ?
C言語の話かそれ?


829 :デフォルトの名無しさん:03/03/26 00:43
>>827
fopenなんかの話?
いままで見た事ある実装は読んできた時バッファに貯めてる。

と言うか、そんな事気にするプログラムは書いちゃいけません。


830 :デフォルトの名無しさん:03/03/26 00:52
>>829
ありがとう
てことはfopen()を呼び出した段階では
バッファは空ということで良いんでしょうか?


831 :デフォルトの名無しさん:03/03/26 00:57
>830
その情報は一体何の役に立つのだろう・・・

832 :デフォルトの名無しさん:03/03/26 01:13
またまたアドバイスをいただけますか。
先ほどの動的な割り当てメモリのサイズ取得は不可能と伺って青ざめてしまいました。
というのも下記のようなデータ構造を考えていたからです。
struct event {
byte *delta; // デルタタイム、後で動的に割り当てる
byte statas[2]; //ステータスバイト
byte *datas; // データ、後で動的に割り当てる
};
static struct chunk {
byte type[5]; // チャンクタイプ
byte length[5]; // データ長
struct event *events;//イベント、後で動的に割り当てる
} chunks[17];

これは実は音楽のMIDIデータの構造なんですが、chunk.eventsをcallocで割り当てるには
struct eventのサイズが必要なんですが、eventのメンバにはさらに動的なメモリ割り当て
を必要とするものがあるので、sizeofでサイズが取得できなければ、
そもそもchunk.eventsにメモリを割り当てることができなくなってしまいます。
このようなデータは構造体を使わずにもっとプリミテチブな操作をするしかないですか?


833 :デフォルトの名無しさん:03/03/26 01:15
あ、ごめんなさい。
typedef unsigned char byte;
でした。

834 :デフォルトの名無しさん:03/03/26 01:20
> chunk.eventsをcallocで割り当てるにはstruct eventのサイズが必要なんですが、
必要ないだろ?
もうちょっとポインタについて勉強しろ。

835 :デフォルトの名無しさん:03/03/26 01:25
>>832 1バイト入力するごとに realloc してみたら?

836 :デフォルトの名無しさん:03/03/26 01:31
んー、必要ないですかぁ。何故必要ないかわからないのでポインタ勉強してきますです。
reallocというのはナイスアイデアですね!!これを使う方向でも考えてみます。

837 :デフォルトの名無しさん:03/03/26 01:49
mallocで複数回にわけて取得したメモリを
一括して解放する方法を教えてたもれ。


838 :デフォルトの名無しさん:03/03/26 01:53
>>837
ミリ。freeするのが面倒だったらガベコレ使え。
http://www.hpl.hp.com/personal/Hans_Boehm/gc/


839 :デフォルトの名無しさん:03/03/26 01:54
>>837
exit()

840 :デフォルトの名無しさん:03/03/26 01:57
>>837
パソコンの電源を切れ

841 :デフォルトの名無しさん:03/03/26 02:42
837のいってること俺も悩んだ
p1=malloc(1*sizeof(int));
if (p1==NULL)
  goto hellzone0;
p2=malloc(1*sizeof(int));
if (p2==NULL)
  goto hellzone1;
hellzone1:
  free (p1);
hellzone0:
この調子でhellzoneが5個になったわけだが

setjmpとか使うのかのう?

842 :デフォルトの名無しさん:03/03/26 02:55
p1=p2=p3=p4=p5=NULL;
if ((p1=malloc(1*sizeof(int))) == NULL) goto hellzone;
if ((p2=malloc(1*sizeof(int))) == NULL) goto hellzone;
……
hellzone:
free(p1); free(p2); free(p3); free(p4); free(p5);


843 :デフォルトの名無しさん:03/03/26 03:16
ども、なるほど
今までfreeはぬるぽダメかと勘違いしてました
でも本見たら思いっきり何も起こらないだけだと
書いてありました

ppp=malloc(1*sizeof(int**));
*ppp=malloc(1*sizeof(int *));
**ppp=malloc(1*sizeof(int));
あとこういうのはどうしてますか?

844 :デフォルトの名無しさん:03/03/26 04:04
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←843


C FAQかなにかに規格に準拠していない古い処理系のためにぬるぽを渡すなと書かれていたけど、
そんなものまで面倒見切れないよね。


845 :デフォルトの名無しさん:03/03/26 05:24
windowsをクラッシュさせるコードをおせいてくらはい。止めてみたいのレスだーっハハハハハハハ。

846 :デフォルトの名無しさん:03/03/26 05:31
while(1) fork();ってやったらLinuxが動かなくなったなぁ。


847 :デフォルトの名無しさん:03/03/26 05:51
>>845
>>840

848 :デフォルトの名無しさん:03/03/26 05:53
>>843
>>842 とやり方は何も変わらないが。

849 :デフォルトの名無しさん:03/03/26 08:48
freeの仕様をうまく使ってすっきりと書いただけだろ。


850 :デフォルトの名無しさん:03/03/26 08:49
それすらわかってない香具師がいるわけでして

851 :仕様書無しさん:03/03/26 09:47
ぬるぽに投票してください。
http://pumpkinnet.to/ranking/words/

852 :851:03/03/26 09:51
すいません誤爆です。
でも投票してください。

853 :デフォルトの名無しさん:03/03/26 10:20
ファイル位置ポインタがファイルの先頭を指してる場合において
そのファイルにrewind()を適用した場合の動作を教えて下さい

854 :デフォルトの名無しさん:03/03/26 10:33
エラーがクリアされる

855 :デフォルトの名無しさん:03/03/26 11:01
>>851-852
ワロタw 投票してやったよ。でも一位の1%にも満たねーじゃねーかヽ(`Д´)ノ

>>953
つーか man rewind。

856 :デフォルトの名無しさん:03/03/26 11:04
>>855
'man' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

857 :デフォルトの名無しさん:03/03/26 11:54
manはlinuxだよ。
つーかM$ならMSDN嫁よ。

858 :デフォルトの名無しさん:03/03/26 12:06
>>855
1 位には追いつかなくても、トップ 10 にはねじ込むべし!!

859 :デフォルトの名無しさん:03/03/26 13:37
投票しますた

860 :デフォルトの名無しさん:03/03/26 15:29
>>851
>2ch語、エッチ系、掲示板やサイトのローカルネタ、一般人に対する物、誹謗中傷等はお受けいたしません。

って書いてある割に2ch系ばっか。

861 :デフォルトの名無しさん:03/03/26 15:51
ああっ、指摘してはいけない事を・・・

862 :デフォルトの名無しさん:03/03/26 15:53
いずれにしてもマニュアルぐらい読め、と。

863 :デフォルトの名無しさん:03/03/26 17:58
>>857
M$以外はlinuxしか知らんのなら黙ってろ


864 :デフォルトの名無しさん:03/03/26 18:11
>>863
だからなんだよボケ。
CYGWINとでもいいたいのか?
煽りたいだけならおまえが黙ってろ。

865 :デフォルトの名無しさん:03/03/26 18:19
#include <もちつけ>

866 :デフォルトの名無しさん:03/03/26 18:20
黙ってたら煽れないだろヴォケ

867 :デフォルトの名無しさん:03/03/26 18:35
おら、こっぱずかしいなあ

868 :デフォルトの名無しさん:03/03/26 18:40
>>863-867
ぬるぽに投票してください。
http://pumpkinnet.to/ranking/words/

869 :デフォルトの名無しさん:03/03/26 19:45
> From: [857] デフォルトの名無しさん <sage>
> Date: 03/03/26 11:54
>
> manはlinuxだよ。


870 :デフォルトの名無しさん:03/03/26 20:39
なんでUNIXと言わないんだろう。

871 :デフォルトの名無しさん:03/03/26 20:45
簡単かもしれない質問ですが、

for(i=1;(int)i<10;i=i+0.1) printf("%f",i);
(iはdouble型)

↑のループが10.0まで表示されてから終わるのですが、
どうして9.9で終わらないのでしょうか?

また、iをfloat型で宣言すると数値が狂うのですが
これは変数の精度によるものなのでしょうか?
一応、コンパイラはBCC5.5です。

872 :sage:03/03/26 20:57
ぬ♥る♥ぽ♥

873 :デフォルトの名無しさん:03/03/26 20:59
>>870
私が857本人ですが、
linuxでもunixでも同じじゃん(このレベルでは)
system5もBSDも、red hotもslackwareも、manコマンドはあるだろうよ。

874 :デフォルトの名無しさん:03/03/26 21:05
>>873
処理系を限定していないこのスレで、よくそんな言い訳が堂々とできるな。

875 :デフォルトの名無しさん:03/03/26 21:08
>>871
2 進数での浮動小数点数は、0.1 ぴったりを表現できない。
その為わずかに誤差が出るので、そのような問題が発生する。
浮動小数点数の誤差について調べる事。

876 :デフォルトの名無しさん:03/03/26 21:10
857=864は釣りだろ?

877 :デフォルトの名無しさん:03/03/26 21:11
>>874
それは>>855に言ってくれw
フォローのつもりだったんだが・・・
とにかく調べリゃ一瞬でわかることを書くな、と。
それだけだよ。

878 :デフォルトの名無しさん:03/03/26 21:12
なんで GNU/Linux じゃないんだろう?

879 :デフォルトの名無しさん:03/03/26 21:12
red hotってなんだよ・・・






って今度は俺が釣られたよ。もうぬるぽ

880 :デフォルトの名無しさん:03/03/26 21:43
>>875

ぐぐって調べてみました。
「丸め」については二進数の感覚にまだ慣れてないせいで
わかりづらいところもありましたが、
9.9までで終わらない理由については納得できました。
ありがとうございました!

881 :デフォルトの名無しさん:03/03/26 21:51
>>857
こんな過疎地で釣りかよ…。


882 :デフォルトの名無しさん:03/03/26 22:22
float の0.1の内部表現はたぶんこなぐあいでした
-1^(0) * 1+(0.5033165) * 2^(123-127)

#include <stdio.h>
main(){
   float f=0.1;
   int sisuubu;
   int kasuubu;
   int fugou;
   int *i;
   void *p;
   p=&f;
   i=p;
   fugou =( *i>>31) & 1;
   printf ("fugou = %d\n",fugou);
   sisuubu = (*i>>23) & 0xFF;
   printf ("sisuubu = %d\n",sisuubu);
   kasuubu = (*i)& ((1<<23)-1) ;
   printf ("kasuubu = %d\n",kasuubu);
   printf ("-1^(%d) * 1+(0.%d) * 2^(%d-127) =%f "
,fugou, kasuubu,sisuubu,f);
}

883 :デフォルトの名無しさん:03/03/26 22:30
ぬるぽの人も大変だな。

884 :デフォルトの名無しさん:03/03/26 22:37
ソダナ

885 :デフォルトの名無しさん:03/03/26 22:49
ようかんがえたら
i=(int *)&f;
これで良かったのか


886 :デフォルトの名無しさん:03/03/26 22:52
あとポインタがiってのも変だな
鬱だし脳

887 :デフォルトの名無しさん:03/03/27 00:19
ふと目に付いた、
「お兄ちゃん、ボク妊娠しちゃううううぅっ!」
に投票してしまいました。
こんな僕をぬるぽしてください。

888 :デフォルトの名無しさん:03/03/27 00:29
ちんぽ

889 :デフォルトの名無しさん:03/03/27 00:32
ぐーぐったけど成果なしだったので質問します

バックスペースを「\b」に置き換えて、入力を出力に複写するプログラム
を書きたいのですけど、
#include <stdio.h>
main()
{
int c;
while((c = getchar()) != EOF){
if (c == '\b')
printf("\\b");
else
putchar(c);
}
}
と、したのですけど、うまくいきません。
タブを「\t」に置き換えて入力を出力に複写するのはできました
どうすればいいのでしょう?

890 :デフォルトの名無しさん:03/03/27 00:34
入力データに問題があるんだろ

891 :デフォルトの名無しさん:03/03/27 00:37
>>889
キーボードからじゃなくてファイルから読んでみるとか。

892 :デフォルトの名無しさん:03/03/27 00:42
ファイル関係はまだ勉強しないうちでの問題でして、
かならずキーボードからの入力となります。
これから言語を学ぶ上で特に必要のない事なら、わからないままでいいかな。
とも思うのですが、やるせない感が強くて・・・
コンパイラの問題とかもあるのでしょうかね?ちなみにWinXPで、VC++です

893 :デフォルトの名無しさん:03/03/27 00:46
>>892
別に勉強しなくても(コマンドプロンプトなら)プログラム実行するときに<を使ってリダイレクトすればファイルから読めるけど。


894 :889:03/03/27 00:50
あ、リダイレクトかー。そうすればわかりますね。
指導してくれた皆様、どうもありがとうございました。

895 :デフォルトの名無しさん:03/03/27 00:52
今度はどうやってファイルにバックスペースを書き込むんですかぁ?かな。


896 :デフォルトの名無しさん:03/03/27 00:56
>>895
さすがにそこまで馬鹿じゃねーだろ(藁

>>891みたいなのがこのスレに常時してると思うとあんま笑えねーけどな

897 :891:03/03/27 00:58
俺、馬鹿なこと言ったのかな・・・

898 :デフォルトの名無しさん:03/03/27 01:01
>>897
いや、どっちかと言うと質問者のやりたいことの方が問題あるから。

899 :デフォルトの名無しさん:03/03/27 01:07
main(){puts("\b");}
をパイプでつなげ。なんかアホみたいだが。

900 :デフォルトの名無しさん:03/03/27 01:10


901 :デフォルトの名無しさん:03/03/27 01:29
>>882
ダウト。
0.1は
>-1^(0) * 1+(0.5033165) * 2^(123-127)
ではなく
-1^(0) * (1+(5033165) / 2~23) * 2^(123-127)
にならないといけない。
ちなみに、(5033165) / 2^23 ≒0.6なわけだな。
この時点で、0.6 * 2^23 = 5033164.8なので0.2の誤差がある。
これを10進の桁数に換算すると高々8桁弱しか精度がないことがわかる。

902 :デフォルトの名無しさん:03/03/27 03:23
確かに考えたら数がかなりおかしいですね。

2進数で仮数部の一番最初の桁の重みが2^-1で
最後のけたが2^-23だから
確かにその通りです
カッコの位置も完全におかしいし、
おかげで浮動小数点数がちょっとだけわかりました。

903 :デフォルトの名無しさん:03/03/27 05:20
ageておきます

904 :デフォルトの名無しさん:03/03/27 18:40
自然数Xに対して

・1の時処理1を行う
・2の時処理1と処理2を行う
・3以上の時処理1と処理2と処理3を行う

ということがやりたくて、以下のようにコードを書いたのですが明らかにスマートじゃない
ですよね・・・。ぜひ、模範解答をお願いします。

switch(X){
more:
処理3
2:
処理2
1:
処理1
break;
default:
goto more;
}

905 :デフォルトの名無しさん:03/03/27 18:51
普通に
if (x >= 1)
 処理1;
if (x >= 2)
 処理2;
if (x >= 3)
 処理3;
じゃダメなのか?

906 :デフォルトの名無しさん:03/03/27 19:00
Xがintなら
if (X>2){
処理3
}
if (X>1){
処理2
}
if (X>0){
処理1
}
でダメかな?
自然数だからいいんだけどdefaultのとこ
Xがintだったら負の数とか0の場合も突入しそうだしなんか変な感じ

907 :904:03/03/27 19:11
あ、説明不足でした。
この場合Xは呼び出しコストが高い関数の戻り値として返されます。
素直に一時変数に落として>>905-906のやり方でやればいいんですが、このためだけに
変数宣言すると、あとで処理を追いづらくなりそうで。というか、変数名を考えたり
するのが面倒というのが正直なところか。(まぁ、こんな風に処理するほうが
追いづらいって話もありますが ^^;)

制御構文一個だとこれが限界ですかね?

908 :デフォルトの名無しさん:03/03/27 19:45
904 の記述が正しいのなら別に構わないと思うんだが

909 :デフォルトの名無しさん:03/03/27 20:15
switch(X){
default:
処理3
2:
処理2
1:
処理1
}
でいいじゃん。


910 :デフォルトの名無しさん:03/03/27 20:31
下記のようなデータを検索する際に困っております。
00 d2 00 0b c0 e0 00 31 00 00 99 01 01 00 13 c0
e0 01 00 00 00 20 00 00 00 14 00 00 00 01 00 01
00 07 c0 e0 03 01 00 00 0a c1 01 01 00 01 20 01
01 00 08 01 03 00 01 85 00 00 08 01 03 00 01 85
最初の2バイトが全体のデータ長を表します(この場合210バイト)
次の2バイト(00 0b)が11バイトの一塊のデータ。つまり
00 0b c0 e0 00 31 00 00 99 01 01 というカタマリ。
次の(00 13)が19バイトで
00 13 c0 e0 01 00 00 00 20 00 00 00 14 00 00 00 01 00 01
というカタマリになっています。
こんなデータを検索し3行目の(00 0a)が見つかったら1バイト(c1)を飛ばし
(01 01)をチェックする。チェックした結果(01 01)であれば、また1バイト飛ばし
次の2バイト(01 20)を変数に代入という処理をしたいのですが、
毎回データが可変長で先頭から何バイト目という指定ができず困っています。
わかりづらい質問で大変恐縮ですが御教授いただけると幸いです。
よろしくお願い致します。


911 :デフォルトの名無しさん:03/03/27 20:35
>次の2バイト(00 0b)が11バイトの一塊のデータ



912 :910:03/03/27 20:47
>次の2バイト(00 0b)が11バイトの一塊のデータ
これは(00 0b)の0bは10進数で11ですよね?
その数分のバイト数で00 0bの先頭から11バイトが
ひとつのデータのカタマリと表現したかったのです。

わかりづらくてすみません。

913 :デフォルトの名無しさん:03/03/27 20:48
>>912
分かりづらいと言うか変と言うレベル。私は離脱します。スマソ。


914 :デフォルトの名無しさん:03/03/27 21:09
>>910
データへのアクセスを絶対アドレス?でできないことに困っているの?
別に先頭から順次読んでいけばよいと思うが。

LHAの実装で同じような処理をしたことがあるが、
そんな疑問、持ちもしなかった。

915 :デフォルトの名無しさん:03/03/27 21:09
4番目のデータを読む前に4番目の塊がはじまる場所を
2+塊1の長さ+塊2の長さ+塊3の長さ
で出しておけばいいんじゃね?
1バイト飛ばして0101チェックはシラネーてか面倒くせー
c=getc();
while ((c=getc())==256){c=getc();}
とかでできんじゃね?
シラネーけど

916 :デフォルトの名無しさん:03/03/27 21:10
>>910
データ長やマーク(0101、c1など)を抜いて別の場所にコピーするコードを考えれば
解は自ずから明らかとなろう

917 :デフォルトの名無しさん:03/03/27 21:12
あ,嘘でした
でも,面倒くさい俺もパス

918 :910:03/03/27 21:45
ツレネェヨ(´Д` )ウワァァン
セチガレェヨヽ(`Д´)ノ ウワァァン!!

ウワァァァン━ヽ(`Д´)ノ━(ヽ`Д)━( ヽ`)━ヽ( )ノ━(ヽ )━(Д´ヽ)━ヽ(`Д´)ノ━!!!



919 :デフォルトの名無しさん:03/03/27 21:51
>>907
関数の呼び出しコストが気になるなら、戻り値を変数に保存しておけばいいわけだが・・・

920 :デフォルトの名無しさん:03/03/27 23:18
>>910
なんか知んないけど、データの先頭アドレスが unsigned char *p に入ってるとして...

unsigned short int GetLength(unsigned char data[]){
 return (data[0] << 8) + data[1];
}

unsigned short int Result; /* 結果 */
unsigned short int TotalLength = GetLength(p);
p += 2;
/* 一行目 */
unsinged short int Length = GetLength(p);
p += 2 + Length;
/* 二行目 */
Length = GetLength(p);
p += 2 + Length;
/* 三行目 */
Length = GetLength(p);
p += 2;
/* 1バイトスキップ */
p++;
if(GetLength(p) = 0x0101){
 p += 3;
 Result = GetLength(p);
} else {
 fprintf(stderr, "見つかんねーぞ、ゴラァ\n");
}

ぐらいでいいんじゃねーのか。
1〜2行目の処理をループにするなり、全体サイズをはみ出していないかチェックするなりは自分で考えてくれ。

921 :910:03/03/27 23:37
>>920
マジデアリガdゴザイマス・・・
アナタハたぶん
  神
間違いないです。
認定します。漏れの中で
920サソは神

922 :デフォルトの名無しさん:03/03/28 02:20
このスレを利用させてもらってた者なんですが、
レベルの低いPGしかこのスレにいないのか?
質問者の欲しい答えが返っていないような例を多数見るし、アホばっか?
って思うこと多数だYO!

やっぱ2chなんだなー。マ板とかは建前のない答えが来るからいいんだけどさ

923 :デフォルトの名無しさん:03/03/28 02:42
>>922
可哀想・・・

924 :デフォルトの名無しさん:03/03/28 03:17
ネタっぽい質問にはそれ相応な返答をしなきゃいけないと思って…
ゴメンネ

925 :922:03/03/28 03:22
納得!>>924さんありがと。
ネタぽい質問の区別が出来るのはすごいね。
プログラムは経験で覚えていくって聞いたけど、俺はまだまだですね(1年1ヶ月)
)>>923の返事はちと意味わかんなかった。
2chを勉強の糧の一つとして過ごしている俺の現状が可愛そうてことかな?
そうだとしたらこれからこないことにすっかな。
・・・ってのは馬鹿のすることか。
必要な情報だけ取り入れられるようにこれからもがんばっていこっと

926 :デフォルトの名無しさん:03/03/28 03:24
>>922
コテになって、質問答えまくって!!1

927 :デフォルトの名無しさん:03/03/28 03:47
>>925
やっぱり可哀想・・・

928 :デフォルトの名無しさん:03/03/28 04:13
俺は現状でもいいと思うので922がマ板に行って
居なくなるのが一番両者ともに嬉しいかと思われ

929 :デフォルトの名無しさん:03/03/28 04:21
>>922
質問者はどんな情報でもありがたい。
ヒントとかキーワードとかでもそれを元にググったり出来るし・・
それが>>922にとってレベルが低かろうが知ったこっちゃない。
マジ、余計おせわと思う。

930 :デフォルトの名無しさん:03/03/28 04:24
お前ら釣られすぎw

931 :デフォルトの名無しさん:03/03/28 04:31
みっともないねぇ・・自分の質問を無視された払いせか?

932 :デフォルトの名無しさん:03/03/28 09:23
>>929
>ヒントとかキーワードとかでもそれを元にググったり出来るし・・

それすらしない馬鹿がここを頼ってるんだと思われ。
少なくともまともに検索した奴は質問文にキーワード混ぜて検索したことアピールしてくるし
言ってることもしっかりとした基礎知識に基づき、論理的に正しい場合が多い。



933 :904:03/03/28 11:21
>>909
うわ、defaultってcaseの前に置いてもきちんと動作するんですね。
つーことで、これでいくことにします。ありがとうございました。

934 :デフォルトの名無しさん:03/03/28 17:04
reallocに付いて曖昧なので教えてください
man だと
If realloc() fails the
original block is left untouched - it is not freed or
moved.
となってますが
ptr=realloc(ptr,sz);
みたいな記述でreallocが失敗した場合
これってメモリリークするってこと?
いったん
ptr2=realloc(ptr,sz);
とかやってptr が失われないようにした方がいいのですかね

935 :デフォルトの名無しさん:03/03/28 17:15
>>934
そのたうり

936 :デフォルトの名無しさん:03/03/28 21:04
このコードは危険?

int my_realloc(void **memblock, size_t size)
{
  void *p = realloc(*memblock, size);
  if(p)
  {
    *memblock = p;
    return 0;
  }
  return -1;
}

937 :デフォルトの名無しさん:03/03/28 22:21
>>936
とっても。


938 :937:03/03/28 22:22
>>936
あ、ぼけてた。
いいんでない?


939 :デフォルトの名無しさん:03/03/29 09:19
C言語って死滅しちゃうの。

940 :デフォルトの名無しさん:03/03/29 10:50
>>939
君よりは長生き

941 :デフォルトの名無しさん:03/03/29 10:53
>>940
流石に20年は持たんだろう。

942 :デフォルトの名無しさん:03/03/29 13:23
>>941
COBOL もそんな事言われてましたが結局は・・・

943 :デフォルトの名無しさん:03/03/29 13:25
>>942
はじっこの方に追いやられたな。

944 :デフォルトの名無しさん:03/03/29 14:43
枯れた技術が必要なときもあるさ

945 :デフォルトの名無しさん:03/03/29 16:18
FORTRAN は研究関連でもまだ原液
COBOL は2000年問題で復活して、最近 OpenCOBOL が活発になったらいいなぁ。

UNIX系OSには、2038年問題があるから、
少なくともC言語は、そのときに一時的にかもしれないが、流行るだろう。

946 :デフォルトの名無しさん:03/03/29 16:19
>FORTRAN は研究関連でもまだ原液

早く薄めなきゃいかんな。


947 :デフォルトの名無しさん:03/03/29 16:46
とっても初心者な素朴な質問ですが,
int型のa,b(またはc)が宣言,初期化されているとき.

for(i=1; i<a+b; i++);

というコードと,

c=a+b;
for(i=1; i<c; i++);

では,実行速度に差がありますか?

948 :デフォルトの名無しさん:03/03/29 16:47
>>947
結局最適化の時点で同じにされそうだけどね。

949 :デフォルトの名無しさん:03/03/29 16:50
空ループなので、最適化すれば、どっちも削除される(ことが多い)。
削除されなくても、最適化によって同じやうなものになったり、ならなかったり。
初心者なら見やすい方書けばええよ。

950 :デフォルトの名無しさん:03/03/29 16:51
アッセンブラはいつ頃死滅する?

951 :デフォルトの名無しさん:03/03/29 16:52
>>948
即レスありがとうございます.
上に書いたほうが,早い(可能性がある?)ということですよね?
まことに初心者ですみません.

952 :947:03/03/29 16:58
>>951=947上じゃなくて下でした.

953 :デフォルトの名無しさん:03/03/29 17:01
>>951
普通に考えると、前者が後者以上の速度を出す事は考えられない。
最適化によって、後者と同等のレベルのコードになる可能性があるという話。

954 :947:03/03/29 17:04
どうもです.皆さんありがとうございました.

955 :デフォルトの名無しさん:03/03/29 17:24
甘い。
後者は変数領域を確保するが、前者は確保する必要がないので
よりタイトなコードになる可能性がある。

956 :デフォルトの名無しさん:03/03/29 17:36
甘い。
後者が変数領域を確保するとは限らない。
つーか、それは速度とはあまり関係無い。

957 :デフォルトの名無しさん:03/03/29 17:50
age

958 :デフォルトの名無しさん:03/03/29 20:03
後者でcをregister宣言しとくと、最も最適化されそうな気がするのは
勘違い?

959 :デフォルトの名無しさん:03/03/29 20:18
>>958
今の最適化が進んだコンパイラはregister宣言を無視することが多い。
もしくは最適化の邪魔になってかえって遅くなることもあるそうな(伝聞)。

960 :デフォルトの名無しさん:03/03/29 21:24
redy ・・・ set ・・・ start!

961 :デフォルトの名無しさん:03/03/29 22:07
>>960
ready ・・・ set ・・・ start!

962 :デフォルトの名無しさん:03/03/29 22:10
directory_iterator

963 :C言語二日目:03/03/29 22:12
高橋麻奈・著の「やさしいC」を読みました!!!疲れた。
ある程度C言語を習得した気分ですが(w
実際は習得率なん%でしょうか?(20%いってる?)
習得率100%の基準は皆さん次第で。
あと、これからステップアップしてくためにはどんな本orサイトがお勧めですか?

964 :デフォルトの名無しさん:03/03/29 22:13
>>963
0.2%

965 :デフォルトの名無しさん:03/03/29 22:14
ぬるぽは0.49%

  ∧_∧
 ( ´∀`)< ぬるぽ

ぬるぽ募集中
http://pumpkinnet.to/ranking/words/

【ぬるぽに投票した人】
http://pc.2ch.net/test/read.cgi/prog/1048837306/l50

966 :C言語二日目:03/03/29 22:19
>>964 
逝ってきます!

967 :デフォルトの名無しさん:03/03/29 22:35
クソッ、CD-ROMドライヴを抑えてるネジを潰してしまった。

968 :デフォルトの名無しさん:03/03/29 22:56
>>965
思わず
「おかしいですよ!カテジナさん!!」
に投票してしまった・・・

969 :デフォルトの名無しさん:03/03/29 23:42
>>968
1時間後はヨロシク。

  ∧_∧
 ( ´∀`)< ぬるぽ

970 :デフォルトの名無しさん:03/03/29 23:43
>>959
無視するとともに勝手にレジスタに置くんだろ?

971 :デフォルトの名無しさん:03/03/30 00:46
>>956
> 後者が変数領域を確保するとは限らない。

アフォ ? 変数領域を確保しないとも限らないんだよ ?

> つーか、それは速度とはあまり関係無い。

「全然」ではないよね。つまり、あんたの >>953 は単なる思い込みってことだ。

現実、前後の状況によって、どっちが早くなるかは様々だ。
>>947 では、a, b, c が int 型とまでは書いてあるが、例えば c が volatile int c と宣言されて射たりしたら、後者が遅いことは十分に考えられる。

972 :デフォルトの名無しさん:03/03/30 01:07
>>971
煽りはスピードが命。

973 :デフォルトの名無しさん:03/03/30 01:07
>>971
流石に volatile まで持ち出すのは行き過ぎではないかと。

974 :デフォルトの名無しさん:03/03/30 01:14
>>971
カエレ!!

975 :デフォルトの名無しさん:03/03/30 01:16
>>971
文章が支離滅裂だな

976 :デフォルトの名無しさん:03/03/30 01:19
>>971
c に volatile付けないとイカン状況で>>947の前者みたいな
書き方するのもいかがかと。

977 :デフォルトの名無しさん:03/03/30 01:36
>>971
春だなぁ。

978 :デフォルトの名無しさん:03/03/30 01:54
>>971
なんか、総攻撃にあってるな

979 :デフォルトの名無しさん:03/03/30 02:02
>>971
  ∧_∧
 ( ´∀`)< ぬるぽ

980 :デフォルトの名無しさん:03/03/30 02:43
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>971


981 :デフォルトの名無しさん:03/03/30 02:44
>965 >969 >979
(・∀・)ガッ

982 :デフォルトの名無しさん:03/03/30 11:13
新スレ立ててきます。

983 :C言語やろう:03/03/30 14:12
よく2chとかで  

int main()
{ printf....................

ていう書き方をみるけど

int main(void)
{printf......................

のように引数がないときは 、引数のない関数void型をつかわなきゃいけないん
じゃないの??
voidを使ってるのと使ってない差を教えてください

984 :デフォルトの名無しさん:03/03/30 14:13
>>983
糖衣構文


985 :C言語やろう:03/03/30 14:22
↑糖衣??

986 :デフォルトの名無しさん:03/03/30 14:29
等位?等意?

987 :デフォルトの名無しさん:03/03/30 14:31
春+日=あほか

988 :デフォルトの名無しさん:03/03/30 15:54
>>983
さんざん既出。
c++では同じ意味。
cではかなり違う意味。
「じゃないの?」と思うなら少しは自分で調べてみよう。

989 :デフォルトの名無しさん:03/03/30 15:55
セイロガン糖衣A

990 :デフォルトの名無しさん:03/03/30 16:04
>>988
Cでも同じだが・・・


991 :990:03/03/30 16:07
ああ、関数の定義を呼び出しよりも前に書いたら意味がちがくなるな。


992 :デフォルトの名無しさん:03/03/30 16:07
>>990
返値みたくint型と評価されるとか言いたいんでしょうか。

じゃあ、

void hoge()
{
/*暗黙のint型の引数にどうやってアクセスすればいいのか?*/
}

int main()
{
hoge();/*引数の数が足りないのでエラー*/
}

993 :990:03/03/30 16:10
俺は↓のように書くから。

void hoge(void);

int main()
{
hoge();
return 0;
}

void hoge()
{

}

994 :990:03/03/30 16:11
つまりプロトタイプ宣言では意味がちがくなると言いたかっただけ。


995 :デフォルトの名無しさん:03/03/30 16:19
// intを返す関数hogeのプロトタイプ宣言。引数チェックなし
int hoge();

// intを返す関数hogeのプロトタイプ宣言。引数なし。
int hoge(void);


996 :さとし:03/03/30 16:24
int *pa;
とした場合は pa がポインタって言うのはわかるけど
*paっていううのは、変数じゃないしなんなんですか??

997 :デフォルトの名無しさん:03/03/30 16:25


998 :デフォルトの名無しさん:03/03/30 16:26
>>996
ポインタpaを間接参照。
int a=8;
int *pa=&a;
/* *pa==8 */


999 :デフォルトの名無しさん:03/03/30 16:27
>>997
黙れ春厨

1000 :デフォルトの名無しさん:03/03/30 16:28
1000か?

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

215 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)