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

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

C言語なら、ぬるぽに聞け! Part 〈53〉

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

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

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

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

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

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/30 12:35
【過去ログ】
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

3 :デフォルトの名無しさん:03/03/30 12:35
2

4 :デフォルトの名無しさん:03/03/30 12:36
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

5 :デフォルトの名無しさん:03/03/30 12:40
>>1
ぬるぽってダレ?って感じ

6 :デフォルトの名無しさん:03/03/30 12:41
>>1
スレたて乙。

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

みんなでいれれば叩かれない(怖くない
http://pumpkinnet.to/ranking/words/
【ぬるぽに投票した人】
http://pc.2ch.net/test/read.cgi/prog/1048837306/l50


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


8 :デフォルトの名無しさん:03/03/30 12:52
激しくスレ立て失敗の予感

俺の計算で言うと同じ質問量でもいつもの約2倍の速度でスレが消費されていく感じ


9 :デフォルトの名無しさん:03/03/30 12:53
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

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

10 :デフォルトの名無しさん:03/03/30 13:05
>>8
あ〜あ、「ぬるぽに聞け」なんて書くから・・・

11 :デフォルトの名無しさん:03/03/30 13:59
>>1
使えない上司・先輩だな

12 :デフォルトの名無しさん:03/03/30 14:09
調子にのんな!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1

13 :デフォルトの名無しさん:03/03/30 14:32
ダメだこりゃっ

14 :デフォルトの名無しさん:03/03/30 15:58
>>1
> まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
> 質問する前には最低限Googleで検索を。
> GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo!
> ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
> コンパイラを探しているなら >>2-13 を。
> 上記を逸した場合の結果は激しく未定義だゴルァ!!

条件つけすぎなんだよ!ぬるぽざけんな

15 :デフォルトの名無しさん:03/03/30 16:06
>>14
はぁ? カエレ!!

16 :デフォルトの名無しさん:03/03/30 16:07
ぬるぽだこりゃっ

17 :デフォルトの名無しさん:03/03/30 16:17
ぬるぽに聞けってなんだよ!
失敗スレですか?

18 :デフォルトの名無しさん:03/03/30 16:24
保守派が怒っている・・・

19 :デフォルトの名無しさん:03/03/30 16:26
次スレはまだですか?

20 :まえすれ997:03/03/30 16:29
式だろ?

21 :デフォルトの名無しさん:03/03/30 16:41
なんだよこのスレタイは

22 :デフォルトの名無しさん:03/03/30 16:42
そんなことより、引数ってなんて読むの?「いんすう」でいいの。
辞書で調べてものってないよ

23 :デフォルトの名無しさん:03/03/30 16:44
main()関数はプロトタイプ宣言じゃないよね??

24 :デフォルトの名無しさん:03/03/30 16:44
int main(void)っていうのは
関数プロトタイプ宣言じゃないよね??

25 :デフォルトの名無しさん:03/03/30 16:46
int main(int,char **);
↑ユーザー定義関数からmain関数を呼び出すことはないからいらないと思う・・・

int main(int argc,char **argv)
{
return 0;
}


26 :デフォルトの名無しさん:03/03/30 16:46
C言語ははこのスレと共に終了ぬるぽってことで

27 :デフォルトの名無しさん:03/03/30 16:46
>>24
セミコロンをつければプロトタイプ宣言。

28 :デフォルトの名無しさん:03/03/30 16:46
>>22
うちのMS-IME2000だと「ひきすう」で引数と変換されるが。
いんすうだと因数か員数しか出ない。
ttp://wakatsukido.tripod.co.jp/kouza/kouza05.html
適当にぐぐってみた。

29 :デフォルトの名無しさん:03/03/30 17:08
前スレのリンク張り忘れてるぞゴルァ
C言語なら、俺に聞け! Part 〈52〉
http://pc2.2ch.net/test/read.cgi/tech/1047275669/l50

30 :C言語3日目:03/03/30 17:18
プログラミングって面白いですね。

31 :デフォルトの名無しさん:03/03/30 17:52
>>30
お前のコテハンほどじゃないけどな

32 :デフォルトの名無しさん:03/03/30 18:52
さっさと挫折しろ!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>30

33 :デフォルトの名無しさん:03/03/30 19:02
>>1にある、プログラミング言語C(通称K&R)の問題ほとんどとけました
同じレベルか、勉強になるようなスレを紹介してもらえませんか

34 :デフォルトの名無しさん:03/03/30 19:06
http://pc2.2ch.net/test/read.cgi/tech/1048677915/l50
http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50

35 :デフォルトの名無しさん:03/03/30 19:07
>>33
もう「C言語」はいいと思うので、
「ぬるぽ開発 〜UNIXユーザの為の実践ぬるぽ講座〜」
をお勧めします。

36 :デフォルトの名無しさん:03/03/30 19:14
にゅりゅぽ

37 :デフォルトの名無しさん:03/03/30 19:49
ぬるぴょ

38 :デフォルトの名無しさん:03/03/30 19:50
TCP/IP絡みの本でも読んでみれば?


39 :デフォルトの名無しさん:03/03/30 19:55
ここはぬるぽスレですか?

塗る歩スレはもういりまん

40 :かじゅ猫:03/03/30 20:49
また、ぬるぽかぁ…

41 :デフォルトの名無しさん:03/03/30 20:57
>>40
ぬるぽにであってから、その名前に良く出会うようになった気がする。



42 :デフォルトの名無しさん:03/03/30 21:45
>>22
ウチのPC(ATOK)だと「ひきすう」だと引数に変換されるけど
「いんすう」だと変換されない。
よって「いんすう」だと思われ。

43 :デフォルトの名無しさん:03/03/30 21:57
>>42


44 :デフォルトの名無しさん:03/03/30 21:58
>>42
ネタにマジレスですか┓(´_`)┏

45 :デフォルトの名無しさん:03/03/30 22:01
読み方なんてどうでもいいじゃん。
どうせ、戻り値も引数も無いくせに、
「ファンクション」を訳して「関数」とか言ってるバカ訳なワケだし。


46 :デフォルトの名無しさん:03/03/30 22:07
というわけで、引数と書いてargumentsと読む。これ最(略)

47 :デフォルトの名無しさん:03/03/30 22:10
function は函数だろうに。

48 :デフォルトの名無しさん:03/03/30 22:24
戻り値がないのは、ファンクションとは呼べるが、関数とは呼べない。
だからファンクションの正確な訳語を希望する。


49 :デフォルトの名無しさん:03/03/30 22:36
functionの訳語がファンクション。
で、ファンクション⊃関数。


50 :デフォルトの名無しさん:03/03/30 22:39
挨拶と開会宣言、閉会式がないのは進行表とは呼べるがプログラムとは呼べない。
だからプログラムの正確な訳語を希望する。

51 :デフォルトの名無しさん:03/03/30 22:44
GPLに感染してしまいました。
どうしたらいいですか?


52 :デフォルトの名無しさん:03/03/30 22:45
>>50
電子道

53 :デフォルトの名無しさん:03/03/30 22:56
>>51
感染したところを取り除いてください

54 :デフォルトの名無しさん:03/03/30 23:13
>>48
Pascal の用語で行こう!

返値が ない ものは「procedure = 手続き」
返値が ある ものは「function = 関数」

55 :デフォルトの名無しさん:03/03/30 23:24
>>54
戻り値を返しても、副作用があるとそれは関数じゃないから、厳密には違うらしい

っつか、呼び方なんてどうでもいいような

56 :デフォルトの名無しさん:03/03/30 23:30
戻り値があってもなくても、functionでいいや。
関数といわずにfunction。

57 :デフォルトの名無しさん:03/03/30 23:33
最近のCだとvoid型の関数の戻り値受けれるんですが

58 :デフォルトの名無しさん:03/03/30 23:38
>>57
どういう風になんの?

59 :デフォルトの名無しさん:03/03/30 23:43
あまりのネタスレっぷりにワラタ

60 :デフォルトの名無しさん:03/03/30 23:51
return 0
とはどういう意味でつか??

61 :デフォルトの名無しさん:03/03/30 23:56
program -> 式次第

62 :デフォルトの名無しさん:03/03/31 00:00
C言語が絶滅するかは知らんが

このスレはこのままでは絶滅危惧種に指定されますよ?

63 :デフォルトの名無しさん:03/03/31 00:01
>>60
ぬるぽに(・∀・)カエレ!!

64 :デフォルトの名無しさん:03/03/31 00:09
にるぽ
なるぽ
ってのは どうよ?


65 :デフォルトの名無しさん:03/03/31 00:25
*ってのは「X」に「-」なのか「X」に「|」なのか?


66 :デフォルトの名無しさん:03/03/31 00:30
>>65
手元のフォントでは「|」の様だが。

67 :デフォルトの名無しさん:03/03/31 00:41
>>65
ウチだとこんな感じ。
>|<


68 :デフォルトの名無しさん:03/03/31 01:02
>>63
それはここです。

69 :デフォルトの名無しさん:03/03/31 01:05
>>65
66-67 のが一般的っぽいが、どちらでもいいらしい。
こんな風に線が 5 本しかないものもある。

  ↓
   ^

70 :デフォルトの名無しさん:03/03/31 01:14

  *  <-  けつの穴

つーか、Cのスレではないのかよ?

71 :デフォルトの名無しさん:03/03/31 01:15
asteriskなんてどの向きでもいいんじゃ無いか?星であれば

72 :デフォルトの名無しさん:03/03/31 01:18
*  アメリカではstarといいます、よろしくね

73 :デフォルトの名無しさん:03/03/31 01:20
星=starじゃん と、つぶやいてみる。

74 :デフォルトの名無しさん:03/03/31 01:33
( ´∀`)<ぬるぽ

75 :デフォルトの名無しさん:03/03/31 01:33
なぁ、すごくどうでもいいことなんだが
->ってみんな何て呼んでる?
やっぱりアローが一般的なのか?

76 :デフォルトの名無しさん:03/03/31 01:33
(・*・)アナルー

77 :デフォルトの名無しさん:03/03/31 01:38
>>75
アロー演算子を再定義しよう、とか言わない?

78 :77:03/03/31 01:39
ここはCか、スマヌュ

79 :デフォルトの名無しさん:03/03/31 01:50
>>75
「デサシテル」

80 :デフォルトの名無しさん:03/03/31 02:03
マイナスダイナリに決まっとる

81 :デフォルトの名無しさん:03/03/31 02:11
tinko->analの中身にアクセスしたいとき
tinko->*anal と
*(tinko->anal)どっちが正しいの?

82 :デフォルトの名無しさん:03/03/31 02:12
>>81
->* はC++のメンバポインタ演算子だ。
また *tinko->anal というようにカッコは不要です。

83 :75:03/03/31 02:24
なんかデサシテルってゲームとかの
必殺技でありそうでかっこいいな。

84 :デフォルトの名無しさん:03/03/31 02:43
出さしてる

85 :デフォルトの名無しさん:03/03/31 04:57
Cでは$に特別な意味って無いよね?
てことは、識別子の名前に使える?


86 :デフォルトの名無しさん:03/03/31 05:29
英字(_を含む)と数字のみで構成され、先頭は英字でなければならない。
また、Cの予約語と同じ名前はつけられない。

確か処理系によっては$が使えたような・・・

87 :デフォルトの名無しさん:03/03/31 05:37
Cの関数定義ってByRef使える?

88 :デフォルトの名無しさん:03/03/31 05:48
>>87
参照渡し?
参照渡しならできないよ。C++ならできるけど。
ポインタ使うのはだめなの?


89 :デフォルトの名無しさん:03/03/31 05:52
あれキモイよね。
func(a, b);
って書いてaやbが書き替えられるなんて。


90 :デフォルトの名無しさん:03/03/31 05:58
>>89
きもいよね。
Stroustrup自身もそういう使い方はするなって言っているし。

91 :デフォルトの名無しさん:03/03/31 08:31
巨大なデータブロック(全て連続している)をゼロクリアする、一番はやい方法は?

92 :デフォルトの名無しさん:03/03/31 08:32
memset

93 :デフォルトの名無しさん:03/03/31 08:40
mmap

94 :デフォルトの名無しさん:03/03/31 09:02
>>91
電源を切る。

95 :デフォルトの名無しさん:03/03/31 09:21
>>94
もう春か・・・

96 :デフォルトの名無しさん:03/03/31 11:28
bcopyってなに?

97 :デフォルトの名無しさん:03/03/31 11:32
>>96
memcpyの前身

98 :デフォルトの名無しさん:03/03/31 11:56
前進?

99 :デフォルトの名無しさん:03/03/31 12:09
>>91
完全に 0 になるとは限らない。

100 :99:03/03/31 12:10
94 宛てですた 100 get

101 :デフォルトの名無しさん:03/03/31 12:54
電圧かかってないから0

102 :デフォルトの名無しさん:03/03/31 13:10
>>101
回路中でたくさん電気が蓄積されてる罠。
結構、何分かは完全に消えない罠。

103 :デフォルトの名無しさん:03/03/31 13:41
便乗になっちゃうんですが
前スレの922に出てきた
unsigned short int GetLength(unsigned char data[]){
 return (data[0] << 8) + data[1];
}
この関数の動きがよくわかりません。
どのような動きをしているのか
ご解説いただけないでしょうか?
お願い致します。

104 :デフォルトの名無しさん:03/03/31 14:00
>>103
先頭の二バイトに文字列の長さを入れてるってことじゃねーの? 前スレ見てないけど


105 :デフォルトの名無しさん:03/03/31 14:01
>>103
data[0]とdata[1]の合成。


106 :デフォルトの名無しさん:03/03/31 14:02
前スレの922は単なる煽りだが・・・

107 :デフォルトの名無しさん:03/03/31 14:03
>>103
答えは 105 の通りだが、使われている演算子の機能をひとつひとつ落ち着いて
考えれば自明だ。

108 :デフォルトの名無しさん:03/03/31 14:07
普通+じゃなくて|を使わない?
|だと問題があるんだっけ?

109 :103:03/03/31 14:16
みなさんありがとうございます。

この仕様で文字列の長さと
char型の配列を返せるんですね!?

皆様のアドヴァイスを下に
演算子を丁寧に見てみます。

110 :デフォルトの名無しさん:03/03/31 14:17
+ だと桁上がりがあり得るわけだが・・・

111 :デフォルトの名無しさん:03/03/31 14:18
>>108
この場合は正直、どうでもよろしい。

>>109
> char型の配列を返せるんですね!?

否。
105 をどう解釈したらそのようになる?
正解は仕様が不明なので何とも言えないが、おそらくは先頭 2 バイトに文字列長
を記録している方式の文字列だろう。

112 :デフォルトの名無しさん:03/03/31 14:19
>>110
定数 8 を使っているところに不安は残るが、それを考えなければあり得ない。

113 :デフォルトの名無しさん:03/03/31 14:21
あり得るあり得ないの問題じゃなくて意味的にビット単位の論理和を
使用するべきだろう。

114 :デフォルトの名無しさん:03/03/31 14:24
>>113
この場合は、ビット単位の論理和を使用するべきではない。

115 :デフォルトの名無しさん:03/03/31 14:30
>>113
あんたは 16 進数からバイナリを得る場合も論理和を使うのか?

116 :115:03/03/31 14:30
例が悪いな。
10 進数とか。

117 :デフォルトの名無しさん:03/03/31 14:34
既に数値になっているものを渡すんだろ?


118 :デフォルトの名無しさん:03/03/31 14:35
基数なんか関係ないんじゃ?

119 :デフォルトの名無しさん:03/03/31 14:37
つーかさ、エンディアンも考慮されてないコードにそんなにムキになんなよ、パゲ

120 :103:03/03/31 15:05
>>!11サソ
ご指摘ありがとうございます。
動きはなんとなくわかったのですが
前スレ922では
char date[1];を
int Resultに代入していますが
int型にchar
の配列を代入できるのでしょうか?

121 :デフォルトの名無しさん:03/03/31 15:13
>>120
それは「配列を代入」しているのではなく、
「配列の1番目の要素を代入」しているのではないのか?

122 :デフォルトの名無しさん:03/03/31 15:18
printfの%sにNULLを渡すと(null)などと表示されるのは勝手な拡張?

123 :デフォルトの名無しさん:03/03/31 15:20
ガッ

124 :デフォルトの名無しさん:03/03/31 15:56
(´∪`)にるぽ

125 :デフォルトの名無しさん:03/03/31 15:59
パスカル?

126 :デフォルトの名無しさん:03/03/31 16:13
パスカルにポインタなんぞない!
……かもしれない

127 :デフォルトの名無しさん:03/03/31 16:17
(´∀`)。oO○なるぽ

128 :デフォルトの名無しさん:03/03/31 16:21
なるぽど

129 :デフォルトの名無しさん:03/03/31 16:39
object poscalは ^p
あれp^だっけ忘れたぽ

130 :デフォルトの名無しさん:03/03/31 16:44
>>129
^pですな。
object付かないのも同じだったと思うけど、TurboPascalの方言かも。


131 :あほ:03/03/31 17:33
int main()
{
   struct sockaddr_in dst;
   ... ... ...
   ... ... ...
   do_connect(dst);
   ... ... ...
}

void do_connect(struct sockaddr_in dst)
{
   connect(socket_fd, (struct sockaddr_in *)&dst, sizeof(dst));
   ...
   ...
}

こういうコードで、connect文で
passing arg 2 of `connect' from incompatible pointer type
が出てしまいます。何故でしょう。。。
connectへの他の引数は正しいとします。
mainの方で、dstも適切に設定されているとします。

構造体ってこういう感じで引数として渡せないんですか?

132 :デフォルトの名無しさん:03/03/31 17:36
わたせない

133 :131:03/03/31 17:38
すみません。キャストする型を間違っていました。

>struct sockaddr_in *
struct sockaddr *

でした。ありがとうございましt。

134 :131:03/03/31 17:38
>>132
渡せましたよ!!

135 :デフォルトの名無しさん:03/03/31 17:39
connect の第二引数は const struct sockaddr *

136 :135:03/03/31 17:40
先に解決されてしまたっか

137 :デフォルトの名無しさん:03/03/31 19:10
>>130
MPW Pascalもそうだった。
p^な。

138 :デフォルトの名無しさん:03/03/31 19:23
char hoge[8]に文字列"hogehoge"を
コピーしたいと思い、
strcpy()を使いました。
そうするとstrcpy()は使わないほうがいいよと
忠告してくれた人がいるんですが
なぜなのかがわかりません。
strcpy()の問題点と代替関数があれば
御教授いただきたく思います。
厨房で申し訳ございませんが
よろすくおながいいたします。

139 :デフォルトの名無しさん:03/03/31 19:26
使わない方がいい

140 :デフォルトの名無しさん:03/03/31 19:38
それ以前に文字列の取り扱いを勉強したほうがいいと思われ

141 :デフォルトの名無しさん:03/03/31 19:38
memcpy()

142 :デフォルトの名無しさん:03/03/31 19:39
>>48
method!
message!

143 :デフォルトの名無しさん:03/03/31 19:40
>>138
"hogehoge"  は9文字ある (hogehoge + \0)
char hoge[8]  は8文字しか入れられない

あとは考えてくれ

144 :デフォルトの名無しさん:03/03/31 19:50
>>138
strcpyの問題点というと、コピー先のサイズがあふれるかどうか感知できない点かな。
こういうこと;

char baka[2];
char hoge[] = "hogehoge";
strcpy(baka, hoge);

bakaには2バイトしか大きさがないのに、9バイトコピーされてしまい、
結果バッファオーバーフローがおきる。

けどこういうのはstrlenを使うなりすれば前もって検知することは可能なんで、
strcpyを絶対に使うなという話にはならない。

ちなみに標準関数にはstrncpyという一見コピー先のサイズに合わせてくれるような
関数があるけど、こいつの仕様はヘンなので使わないほうがよい。
自前でサイズを見る関数を作るとかするといいよ。

145 :デフォルトの名無しさん:03/03/31 19:53
>>144
末尾に'\0'を付加しない場合があるというのは別に変ではないと思うけど、
コピー元が指定したバイト数よりも短い場合は0で埋めるってのは変な仕様だよなぁ。

146 :138:03/03/31 20:16
ミナサン
ご教授アリガdです
終端文字が溢れてしまうわけですか。。。
なるほど、勉強になります。
とりあえずstrcpy(hoge, "hogehoge");と
ベタ書きしていたのですが
hogehogeを変数に代入してから
memcpy()するのが安全?なんでしょうか?

文字列の扱いはなんか制約が多いイメージが
強くてコワヒ・・・
(((((゚д゚;)))))ガクガクブルブルブルブル

147 :デフォルトの名無しさん:03/03/31 20:24
>>146
Cは何するにも制約が多いです。
Javaを使いましょう。

148 :デフォルトの名無しさん:03/03/31 20:30
>>147
"制約"はJavaの方が多い

C++だ

149 :デフォルトの名無しさん:03/03/31 20:30
>>147
Javaは何するにも重いです。
Cを使いましょう。

150 :デフォルトの名無しさん:03/03/31 20:33
直接マシンと会話ができる
機械語をおすすめします。

151 :デフォルトの名無しさん:03/03/31 20:34
C++だと
struct Foo;
と書けばFoo構造体の宣言ができるけど、
Cだとどう書くの?

下の関数の宣言だと
void func(Foo *f);
構造体の宣言だけで済む
(コンパイラ依存が減る)ので
これをCでやるにはどうするのか、という質問です

152 :デフォルトの名無しさん:03/03/31 20:49
CもC++も同じだが。
違いといえばC++の場合はtypedefしなくてもタグ名が型名になるということか。


153 :デフォルトの名無しさん:03/03/31 20:51
struct Foo { ...... }; ←構造体定義
struct Foo a; ←構造体宣言
void func( struct Foo *f ); ←関数の引数に使う場合

ただ、構造体定義のとこで
typedef struct Foo { ...... };
ってやっちゃうことが良くあるんでないかな。そうすれば、宣言や引数のときに「struct」を省略できる。

154 :デフォルトの名無しさん:03/03/31 20:55
>>153
> typedef struct Foo { ...... };

typedef struct { ...... } Foo;だろ。


155 :制御屋さん見習中:03/03/31 20:57
教えてください。

F[0][0]= -1.301309e-06

こんな数があったとき、10^(-6)
のみ取り出す良い方法あり
ませんか?

お願いします。

156 :デフォルトの名無しさん:03/03/31 20:58
>>155
浮動小数点数に対して==を使ったらうまくゆかなかったってやつか?


157 :制御屋さん見習中:03/03/31 21:00
>>156
ええっと、純粋に10の何乗のオーダーかっていうのが
知りたいのです。


158 :151:03/03/31 21:01
> typedef struct { ...... } Foo;だろ。

そうです、これの形でよくやります。

こうやってtypedefしてたら、どうやって宣言するのでしょう?
関数の引数でも戻り値でも、「構造体へのポインタ」しか
つかってないときには…


159 :デフォルトの名無しさん:03/03/31 21:02
>>158
新しい型を定義したんだからint等と全く同じように使える。


160 :151:03/03/31 21:09
ということは、ヘッダで、途中でいきなり
void func(Foo *f);
という関数宣言がでてきても、Cコンパイラから
未知の型:Foo
とかおこられないで、大丈夫なの?

C++なら
struct Foo;
void func(Foo *f);
とFooについて宣言する必要があるけど…

161 :デフォルトの名無しさん:03/03/31 21:09
>>157
log()とか使って計算するしかないのでは?

162 :デフォルトの名無しさん:03/03/31 21:11
>>155
sprintfでも使ってeの後だけ切り出す手もあるねぇ

163 :デフォルトの名無しさん:03/03/31 21:12
>>160
試せばいいだろ!(怒)

164 :制御屋さん見習中:03/03/31 21:12
>>161

ありがとう!
それは思いつきませんでした。


165 :デフォルトの名無しさん:03/03/31 21:13
>>160
なんでその宣言の前にtypedefを書こうと思わないわけ?

166 :151:03/03/31 21:13
>>160に補足
なんと聞けばいいのかな…

extern typedef Foo;
とかできるの?
つまり、型定義の宣言(?)みたいな

167 :デフォルトの名無しさん:03/03/31 21:15
>>166

typedef struct{
int a;
char *b;
} Foo;

void func(Foo *);

こうだよこう。

168 :151:03/03/31 21:19
>>167
これだと、Fooについての実体をかいてますよね?
つまり、Fooの実体を変えるた場合、コンパイルを
やり直す必要がある(コンパイル依存が生じる)。

必要なのは「(構造体への)ポインタ」だけなのに…

ポインタであることさえわかれば、構造体の実体が
どうなっていても、ポインタのサイズは一定値なので
不要なコンパイル依存性を除去できるのですが…

169 :デフォルトの名無しさん:03/03/31 21:20
int (*fns[])(struct gmstat*) = {gmmain, gmrank, gment, };
を誰か説明してください。お願いします。わけわからんです。

170 :デフォルトの名無しさん:03/03/31 21:23
>>151
とりあえずやってみろよ。
話はそれからだ。

171 :デフォルトの名無しさん:03/03/31 21:24
>>161>>164
log()じゃなくてlog10()使えよ。
>>162
それだったらecvt()の方がよくないか?

172 :151:03/03/31 21:24
>>168の補足
C++だとヘッダファイルは以下ですむ

#ifndef FOO_FUNC_H
#define FOO_FUNC_H

struct Foo;
void func(Foo *f);

#endif

Fooの実体については何も書いていないので
コンパイラ依存がない。

つまり、Fooが定義されているfoo.hが変更されても
foo_func.hは関与しない

173 :デフォルトの名無しさん:03/03/31 21:24
>>168
ヘッダーファイルに関数の宣言を書くということは、他のファイルからもその関数を呼び出すんだろ?


174 :デフォルトの名無しさん:03/03/31 21:25
>>168
ポインタのサイズは一定でも、「なにの」ポインタかはコンパイラが意識する必要があると思え。


175 :デフォルトの名無しさん:03/03/31 21:28
一度stdio.hでも見てみればいいのに。


176 :デフォルトの名無しさん:03/03/31 21:30
>>169
順番に型宣言でもして分解すればわかるだろう?
>int (*fns[])(struct gmstat*) = {gmmain, gmrank, gment, };
intを返す、struct gmstat*を唯一の引き数とする、関数へのポインタの配列fns、
それをgmmain, gmrank, gmentの3つの要素で初期化する。
つまり、
struct gmstat foo;
int rtn = fns[0](&foo);

int rtn = gmmain(&foo);
が等価なわけだな。
で、どうせなら
static int (*const fns[])(struct gmstat*) = {gmmain, gmrank, gment, };
にしておけ。

177 :151:03/03/31 21:33
> ポインタのサイズは一定でも、「なにの」ポインタかはコンパイラが意識する必要があると思え。

それは、実際に必要な時まで、コンパイラが意識するタイミングを
送らせる(プログラマが調整させる)ことができますよね?

「Effective C++」の34項
「コンパイルするファイル間の依存性はできるだけ減らそう」
の話をしているつもりです…

これのC版のsttructはどうするのかなぁ、と。

やっぱりタグ名を使って冗長(?)に
extern struct Foo_tag;
void func(struct Foo_tag *f);
とでもするのでしょうか?

178 :デフォルトの名無しさん:03/03/31 21:35
C++でできるならC++でやればいいのに。


179 :151:03/03/31 21:39
> C++でできるならC++でやればいいのに。

それはそうなのですが…(^^;
Cでやるにはどうするのかな、と。

すみません、マルチポストっぽくって申し訳ないのですが
これからC++のスレでも質問させてもらいます…

180 :デフォルトの名無しさん:03/03/31 21:41
>>168
要するに、構造体のメンバを隠蔽したいということか?
だったら、構造体を不完全型として宣言すればいい。
構造体へのポインタ「だけ」が必要な関数には、

typedef struct foo foo;

という宣言だけを見せて、メンバへのアクセスが必要な関数には、

struct foo { ... };

という宣言を見せればいい。

181 :デフォルトの名無しさん:03/03/31 21:42
関数を使う側が構造体の中身や大きさを全く知る必用のない関数といえば・・・・fopenを初めとするファイル操作関数か?
それはそれで構造体の構造を変更しても、関数を使う側のファイルはコンパイルし直さなくても良いような気がする。


182 :デフォルトの名無しさん:03/03/31 21:43
>>179
> これからC++のスレでも質問させてもらいます…

C++での方法を知っているのになぜ質問する。


183 :デフォルトの名無しさん:03/03/31 22:01
>>151
冷やかしに来たのなら失せろ

184 :デフォルトの名無しさん:03/03/31 22:06
内部を隠蔽したいならC++を使うのが正解だと思う。
>>180の言うようにCでもできるがダブルスタンダードになって
保守性が落ちるだけのような気がして気持ち悪い。
「C++でできることがCではどうなるか」疑問に思うのはいいが、
違う言語なのだから必ずしも同じように使わなくてもいいと思うのだが。
#名前空間の所為で、Cだとtypedef struct foo {int foo;} foo;なんてできるのだし。

185 :sage:03/03/31 22:15
ぬるぽに相応しいスレになってきたな

186 :151:03/03/31 22:16
えと、興味本位で聞いているわけでなく、
実際にCでかいていまして…

187 :デフォルトの名無しさん:03/03/31 22:17
Cの構造体でプライベートメンバを書くにはどう書くの?




という質問が次は来るに 2,000ヌルポ


188 :デフォルトの名無しさん:03/03/31 22:19
CでできることはC++でもできるんじゃないの?ならまだしも、C++でできるのならCでもできるんじゃないの?と思うのはおかしい。


189 :デフォルトの名無しさん:03/03/31 22:26
コンパイルし直さなくてはならなくなるとまずいの?
コンパイル時間がもったいないとか?


190 :189:03/03/31 22:27
>>168に対してね。

191 :デフォルトの名無しさん:03/03/31 22:28
151からはJava厨の臭いがする

192 :151:03/03/31 22:40
Javaはさわったことがないです…
やってみたいと思っているんだけど…

しいていうならC++厨です

C++スレで質問したのですが、CならCの流儀にしたがえ
とアドバイスをうけました。
ですので、タグ名をつかってみることにします
(typedefをせずに)

荒らす気はなかったのですが、みなさんに迷惑を
かけてしまいました。
どうもすみませんでした。

193 :デフォルトの名無しさん:03/03/31 22:42
C++スレに答え出てるぞ。
がんがれ


194 :デフォルトの名無しさん:03/03/31 22:42
C言語の型の概念について教えてください。
もしくは説明されてるサイト教えてください

195 :デフォルトの名無しさん:03/03/31 22:44
>>1のリンク先くらい嫁

196 :デフォルトの名無しさん:03/03/31 22:45
>>194
林の本でもいいから初心者本買えよ
http://www.google.com/search?num=50&hl=ja&lr=lang_ja&q=C%8c%be%8c%ea%82%cc%8c%5e+%8aT%94O

197 :151:03/03/31 22:46
C++スレでも、スレ違いだとの指摘をうけました。
それで、CスレでもC++スレでも、質問を終わります

C++スレでの終わりの意見はここです
http://pc2.2ch.net/test/read.cgi/tech/1047560042/623

たくさんアドバイスをしてくださって
どうもありがとうございました

198 :タマちゃん:03/03/31 23:42
#include "stdio.h"
main()
{
func1();
}

func1()
{
printf("a");
}

をコンパイルしようとすると、

5: Warning: function 'func1' undefine -- assumed to be int

って返ってきてしまいます。
どこが間違ってると思います?

199 :デフォルトの名無しさん:03/03/31 23:46
>>198
解1)
#include "stdio.h"
func1()
{
printf("a");
}

main()
{
func1();
}

解2)
#include "stdio.h"
void func();
main()
{
func1();
}

void func1()
{
printf("a");
}


200 :タマちゃん:03/03/31 23:49
>>199

神よ
ありがとう

201 :199:03/03/31 23:51
解説するとCはコンパイル時に前方参照しない。

mainの中でfunc1が出てきたときにはコンパイラはfunc1のプロトタイプは知らない。
知らないから、ファイルを読み進んでその先にあるかもしれないfunc1の
プロトタイプを知ろうとはしない。これが前方参照をしないの意味だ。

で、プロトタイプがわからない関数にぶち当たったときコンパイラは
intを返す関数だと仮定して処理を進める。これはCの規約でもある。
コンパイラがだしてるwarningはそのことを言ってる。
そのwarningを意訳すると、
「funcなんてしらねえよボケ、intを返すと見なすからそのつもりでいろや」
と言ってる。

んで、解1の方は前もってfuncの定義をしておくもので、
解2はコンパイラにfuncのプロトタイプを与えるというものだ。

202 :デフォルトの名無しさん:03/04/01 01:02
intとint long intの違いってなんですか??

203 :デフォルトの名無しさん:03/04/01 01:12
sizeof(long int) >= sizeof(int)
intは処理系にとってもっとも自然な整数型。
同じサイズの処理系もあるし、違うサイズの処理系があってもよい。

たぶんおまいのさわれるコンパイラはサイズが同じなので違いはない

204 :デフォルトの名無しさん:03/04/01 02:15
仮引数をポインタとして定義することによって、
実引数にも影響を及ぼすことができるサンプルプログラミングですが
本に書いてあるとおりにやって何度も確認してるのですが
どこが間違えてるか分かりません。おしえてください。

#include <stdio.h>

void swap(int *pX,int *pY);

int main(void)
{int num1=5;
int num2=10;
printf("変数num1の値は%dです。\n",num1);
printf("変数num2の値は%dです。\n",num2);
printf("変数num1とnum2の値を交換します。\n");

swap(num1,num2);
printf("変数num1の値は%dです。\n",num1);
printf("変数num2の値は%dです。\n",num2);
return 0;
}

void swap(int *pX,int *pY)
{int tmp;

tmp=*pX;
*pX=*pY;
*pY=tmp;}



205 :デフォルトの名無しさん:03/04/01 02:19
>>204
>swap(num1,num2);

swap(&num1,&num2);
&がない。よく本見てみ

206 :デフォルトの名無しさん:03/04/01 02:20
swap(&num1,&num2);

207 :デフォルトの名無しさん:03/04/01 02:32
>>205>>206
ありがとうございます!!正常な数値がでました。
ところで何故こうなるのでしょうか??

void swap(int *px,int *py);で宣言するときに
*pxおよび*pyは数値ですよね?
で、呼び出すときは swap(&num1,&num2);
と &num1および&num2はアドレスですよね?
つまり、&num(アドレス)を*px(数値)に代入することなんてできるんでしょうか? 

208 :デフォルトの名無しさん:03/04/01 02:34
int a=10;
int *ap;
ap=&a;
これをやってるのと同じ。

209 :デフォルトの名無しさん:03/04/01 02:35
可変長配列を管理する構造体?

struct name {
  int namelen;
  char namestr[1];
};

ってのが,C FAQ に載っていますが,
この使用に関して危険性は無いのでしょうか?

素人目には,かなり恐い感じがするのですが.
namestr[xx] のアドレスが危険な領域である可能性は無いのでしょうか?

210 :デフォルトの名無しさん:03/04/01 02:41
>>207
関数内でint *px; を宣言して
引数のアドレスがコピーされるようなもの。

211 :デフォルトの名無しさん:03/04/01 02:42
>>209
超ある。
ってかnamelenを何に使うのか説明してくれ。

212 :デフォルトの名無しさん:03/04/01 02:45
>>209
ていうか
mallocとかであらかじめメモリーを確保するから大丈夫

213 :デフォルトの名無しさん:03/04/01 03:00
struct name *pname;
pname=malloc( sizeof(struct name) +9 );
としたら
pname->namestr[9] まで問題ない。しかしそれ以降は危険。

214 :デフォルトの名無しさん:03/04/01 03:13
僕は、VisialC++6.0のコンパイラを使っています。
すごく初心者の友達がプログラムを覚えたいらしく、教えてあげることになり
ました。(僕もそんなに知識はありませんが)。使える言語が少ないのでC言語を
教えることにしました。ただ、友達はただがいいらしいのでそれを探したところ、
Borland等があるみたいですね。教えるために僕もBorland等をインストール
しようと思っているのですが、VC++が有るパソコンにそれを入れるとどうなりますか。
ぶつかって動作がおかしくなったりしませんか。教えてください。長文ですいません。

215 :デフォルトの名無しさん:03/04/01 03:18
>>214
もうまんたい

216 :デフォルトの名無しさん:03/04/01 03:33
自分で実験しろ! あと結果報告も書いてね。

217 :209:03/04/01 03:52
>>211-213 わかりました.
この場合 namelen はプログラマが陽に管理することになるんですね?

pname=malloc( sizeof(struct name) +9 ); のとき
pname->namestr[9]              までOKなので,例えば
pname->namelen = 10;            と設定してやるとか.

struct name {
  int namelen;
  char * namestr;
};

とすれば
struct neme namae; のとき
namae.namestr = xx;
namae->namestr = (char*)malloc(xx);

と出来ますよね?こっちのほうがいいような.freeしにくいのか?
この構造体のメリットは配列長情報を格納できることなのでしょうか?
いまいちピンとこないのですが,有効な利用法などはあるのですか?


218 :デフォルトの名無しさん:03/04/01 04:01
Win のビットマップファイルのフォーマットにこんな感じの構造体使ってなかったっけ。

219 :デフォルトの名無しさん:03/04/01 06:07
http://www.catnet.ne.jp/kouno/c_faq/c2.html
209はCFAQでもダメだって書いてる。
どうやって
"配列namestrが複数の要素を持つように振る舞わせる"んだろ
char namestr[1];みたいな場合
namestr=ポインタ;
みたいな表現は許されないような気がした

217の方の使い方はいろいろあります。
最初にxxの大きさで割り当てた後
もっと大きいサイズが途中で必要になったりしたときとか長さが無いと困るし
そういうことをする関数を作った場合引数がごちゃごちゃしないとかかなあ

220 :デフォルトの名無しさん:03/04/01 06:36
>A: この技巧は人気がある。ただしDennis Ritchieは「Cの実装への根拠 のない馴れ馴れしさ」と呼んだ。
>公式な解釈によると上の技巧は Cの 規格に厳密には準拠していないと考えられる。
>(この技法が正しいか どうかを取り巻く議論を尽くすことは、このFAQの守備範囲を越えて いる。)
>しかし世の中に知られている全てのコンパイラの実装で、こ の方法は移植性が高いようである
>(配列の境界を注意深くチェックす るコンパイラは警告を出すかもしれない)。
>別のやり方としては、可変長の要素の大きさを、小さく取るより、非 常に大きく取ることが考えられる。上の例でいえば、
>char namestr[MAXSIZE];
>ここでMAXSIZEは配列namestrに保存されうるどんな名前よりも大きい。 しかしながらこの技法も、規格の厳密な解釈によると許されないよう だ。

駄目とは書いてないような・・

221 :220:03/04/01 06:41
>>219
今読み直したら厳密な解釈では駄目ってことか。 汚してスマン。

222 :デフォルトの名無しさん:03/04/01 06:41
>>217
ファイルフォーマットに可変長データ部分がある場合
ヘッダを一気に読んでこういう構造体にあてはめると効率が良いよ。
コンパイラの特性に依存してるから、移植性はほとんどないけど。

223 :デフォルトの名無しさん:03/04/01 07:22
>>221
しかし、C99 では認められている気配。

224 :デフォルトの名無しさん:03/04/01 07:46
LSI-Cの試食版でないコンパイラを使っている人はどれくらいいるんだろう・・・

225 :デフォルトの名無しさん:03/04/01 09:22
それくらい。

226 :デフォルトの名無しさん:03/04/01 09:48
>>224
そういえば、>>9のコンパイラ一覧にLSI-Cの試食版は入ってないな。
俺も昔はお世話になったが、やはりintが2byteはもう過去の遺物だろう。

227 :デフォルトの名無しさん:03/04/01 10:40
でも、LSI-Cの試食版使いやすいよな。
俺がC始めたときは環境変数とか全然分からなかったから、
自動でパス通してくれるのは本当にありがたかったよ。

228 :デフォルトの名無しさん:03/04/01 10:46
>>198
#include "stdio.h"

ビクビクガタガタ

ところで、純粋にC言語の勉強をするだけなら、gcc(cygwin)がお勧め。
ネットにさえ繋がればインストールは難しくないし、無料。
ただし、グラフィック関連は難しいので、あくまでも「C言語だけ」の世界だが。

229 :デフォルトの名無しさん:03/04/01 11:06
cygwinなんて歪なもん勧めんなよ。

230 :デフォルトの名無しさん:03/04/01 11:29
まったくだ

231 :デフォルトの名無しさん:03/04/01 12:42
純粋にC言語の勉強がしたいならcygwinに対応しているOSは糞

232 :デフォルトの名無しさん:03/04/01 12:59
割と意味不明だな

233 :デフォルトの名無しさん:03/04/01 13:14
cがchar nがint型として
c=n;とすれば良い所を可読性を良くする為、あえて
c=(char)n;としても遅くなったりしませんか(ループ内とかで)?
内部的な動作は良く知らないので教えてください。


234 :デフォルトの名無しさん:03/04/01 13:15
>>233
とてつもなく遅くなる。禁じ手。

235 :デフォルトの名無しさん:03/04/01 13:19
>>234
うほっ、そりゃまずいっす。 情報サンクス!

236 :デフォルトの名無しさん:03/04/01 13:19
>>235
信じるな。


237 :デフォルトの名無しさん:03/04/01 13:24
>>233
よく知らないけど
ハンガリアン表記すりゃあ、そんな必要無くなる罠。

238 :デフォルトの名無しさん:03/04/01 13:40
>>233
> cがchar nがint型として
> c=n;とすれば良い所を可読性を良くする為、あえて
> c=(char)n;としても遅くなったりしませんか
処理系依存なのでアセンブラに落として同じコードになるか確かめろ。

239 :デフォルトの名無しさん:03/04/01 13:48
まあたいていは、全く同じになるので遅くならない。

240 :デフォルトの名無しさん:03/04/01 13:48
>>237 ハンガリー人キター

241 :デフォルトの名無しさん:03/04/01 14:00
それだけなら、まあ変わらないだろうけど、int a, b; char c;
c=(char)(a+b);
c=(char)a+(char)b;
みたいなのだと、結果は同じでも速度は変わる。

242 :モナ王:03/04/01 14:30
教えてください。
以下のようなプログラムを実行します。

int main()
{
int i, j, n_1, n_2;
double K[M][N];

n_1 = 4;
n_2 = 2;

printf(" n_1 =%d\n", n_1);
printf(" n_2 =%d\n", n_2);

func( A, B, P, G, n_1,n_2,K);

printf(" n_1 =%d\n", n_1);
printf(" n_2 =%d\n", n_2);

return EXIT_SUCCESS;
}


すると、n_1とn_2の値が、func()の後で どちらも0になります。
func()内部で、n_1、n_2は値を参照しているだけです。
(for文のループに使用)
何故変わるのか理解できません。

宜しくお願いします。


243 :デフォルトの名無しさん:03/04/01 14:52
funcが分からん
これだけの情報で分かったら神

引数を値を代入するような用途に使うのはいかがなものかと

244 :デフォルトの名無しさん:03/04/01 14:55
>>242
funcがスタック内容を壊してるから

245 :デフォルトの名無しさん:03/04/01 14:59
> 引数を値を代入するような用途に使うのはいかがなものかと

正規の方法では、ポインタを使わない限り、それは意図しようが無い。
唯一 K がポインタ渡しになっていると思われるので、その扱いを間違えた func() の
バグだろう。

246 :モナ王:03/04/01 14:59
>>244

>funcがスタック内容を壊してるから


これってどう言う意味ですか?



247 :245:03/04/01 15:00
唯一でもないか・・・A, B, P, G の正体もわからん。

248 :デフォルトの名無しさん:03/04/01 15:04
(´-`).。oO( func晒せばいいのに

249 :モナ王:03/04/01 15:09
>>248
長いのですが、、、

int func( double a[N][N], double b[N][M], double p[L][N], double g[M][N],
int Ncol,int Nrow,double K[M][N])
{
int i,j,k;
double InvF[N][N],s,tmp[10][10];

for (Pole_Count = 0; Pole_Count < Ncol; Pole_Count ++){

if(p[1][Pole_Count] == 0){
if(Pole_RealCal( a, b, p, g, Ncol) == 0){
/* エラー処理 */
return 0;
}
}else{
if(Pole_ImgCal( a, b, p, g, Ncol) == 0){
/* エラー処理 */
return 0;
}
}
}

for (i = 0; i < N; i++)
for (j = 0; j < M; j++) K[i][j] = 0.0;

return 1;
}

250 :モナ王:03/04/01 15:20

>>249 自己レスです。

バグが分かりました。
K[][]の初期化を誤っていました。
(NとMが逆)

for (i = 0; i < N; i++)
for (j = 0; j < M; j++) K[i][j] = 0.0;


大変失礼しました。
当方win98 +Cygwin +gcc -Wall でコンパイルしています。
この様なバグは、見つけるのが難しいと思います。
皆さんはどのようにして、発見しているのですか?


251 :デフォルトの名無しさん:03/04/01 15:24
NだのMだのわかり辛い変数名は使わない

252 :デフォルトの名無しさん:03/04/01 15:28
配列の範囲外まで弄ったのか。
>>244の予想どうりでワロタ

253 :デフォルトの名無しさん:03/04/01 15:30
・二次元配列は使わない。
・ループ制御変数であっても一文字は避ける。
・ループの中身が一文だけであってもブロック化する。
・変数名を大文字で始めない。
・配列全体の初期化はmemset()を使う。

254 :モナ王:03/04/01 15:53
>>251、253

ありがとうです。

行列を扱いたいので、2次元配列を使いたいです。

・ループ制御変数であっても一文字は避ける。
これは、どういう意味ですか? i、jはやめろということですか?

・ループの中身が一文だけであってもブロック化する。
{}を付けろということですね。

・変数名を大文字で始めない。
了解です。

・配列全体の初期化はmemset()を使う。
これは知りませんでした。情報ありがとうございます。

255 :デフォルトの名無しさん:03/04/01 16:14
>>248
私ならば、こうすると言う話だが。

Cの二次元配列は一次元目を固定サイズにしないといけないので使い難いと思わないか?
だから二次元配列の代わりに一次元配列で済ませるのが習慣になっている。
例えば配列全体の平均値を返す関数にするならこんな感じだ。
double CalcAverage(double const *pArray, size_t width, size_t height)
{
 double sum = 0;
 int iy;
 for (iy = 0; iy < height; iy++) {
  int ix;
  for (ix = 0; ix < width; ix++) {
   sum += pArray[ix + iy * width];
  }
 }
 return sum / (width * height);
}
もしix + iy * widthが鬱陶しいなら、
#define pos(x, y, w) ((x) + (y) * (w))
とでもすればいい。そうすればpArray[pos(ix, iy, width)]と書ける。


256 :デフォルトの名無しさん:03/04/01 16:19
最大値がsize_tでループ変数がintってのはどういうもんかとチャチャ入れ

257 :デフォルトの名無しさん:03/04/01 16:21
あ、間違えた(w
コピペしたもんだからそういうことに。
指摘THX>>256

258 :デフォルトの名無しさん:03/04/01 16:30
いったいどこが間違ってるんですか?

#include <stdio.h>
int main(int c, char **v)
{
c--;
if(c<0)return 0;
printf("%s ", v[c]);
return main(c, v);
}

259 :デフォルトの名無しさん:03/04/01 16:30
変数の値と、その変数名を表示する関数。
void hogeprint( int, char * ); を作成しました。

#define STR(x) #x
int main()
{
  int value = 100;
  ...
  hogeprint( value, STR(value));
  ...
}
としたとき、"value"の示す文字列の生存範囲は関数内のみになるのですか?
それとも、main 関数が終わるまでになるのでしょうか?

260 :デフォルトの名無しさん:03/04/01 16:32
return main(c, v);

261 :デフォルトの名無しさん:03/04/01 16:33
>>258  return main(c, v);

262 :デフォルトの名無しさん:03/04/01 16:38
>>260 261
そこが間違っているのですか?
なにが違うのでしょうか?

263 :デフォルトの名無しさん:03/04/01 16:38
>>258
どこか間違ってるのか?

264 :デフォルトの名無しさん:03/04/01 16:38
>>258
エラー E2120 test.c 13: プログラムの中からは main を呼び出せな・・(ry

265 :デフォルトの名無しさん:03/04/01 16:38
Cの main って再帰できないんだっけか

266 :デフォルトの名無しさん:03/04/01 16:39
>>254
meschachはどうでしょ
俺は使ったこと無いですけどヘッダを見る限り
新たに配列を作ったり配列の大きさを変更したり
コピーしたり簡単な演算をしたり
と言うことは簡単にできそうです。
行列MATは行数、列数と2次元配列のように見せかけるポインタ
を持つ構造体みたいに宣言されてます

267 :264:03/04/01 16:43
>>264は嘘 C++はできないけどCなら出来るよん。

268 :デフォルトの名無しさん:03/04/01 16:44
>>258
プログラム名の表示がおかしいってこと?


269 :デフォルトの名無しさん:03/04/01 16:48
>>259
文字列リテラルと同一期間。

270 :デフォルトの名無しさん:03/04/01 16:49
>>258
ていうか、どんな風に問題があるのか書かないと
どうしようもない。

271 :デフォルトの名無しさん:03/04/01 17:04
>>269
その文字列リテラルの生存期間が分かりません.
>>259 の場合はどうなるのでしょうか?

272 :デフォルトの名無しさん:03/04/01 17:12
>>271
一般的にはプログラムの動作開始から終了まで。

273 :デフォルトの名無しさん:03/04/01 17:45
>>271
ブロック内

274 :デフォルトの名無しさん:03/04/01 17:59
>>169
> int (*fns[])(struct gmstat*) = {gmmain, gmrank, gment, };

int (*gmmain)(struct gmstat *);
int (*gmrank)(struct gmstat *);
int (*gment)(struct gmstat *);

これを配列にして、その配列の名前を fns と付けた。

275 :デフォルトの名無しさん:03/04/01 18:31
どんどん分からなくなってきました.>>272 >>273 レスありがとうございます.
if >>272
char str[] = "abc";
char * str = "abc";

前者:ただの char型の配列(自動変数)
後者:文字列リテラル "abc" の先頭アドレスを格納するポインタ str 自身は自動変数だけど,
宣言・初期化が,どこで行われようとも "abc" という文字列はプログラムの実行中
常にどこぞかのメモリ領域を占有することになる.

if >>273
後者の宣言・初期化を行ったとき,ブロック内処理を終えると同時に,
文字列も姿を消し利用可能なメモリ領域となる.

う〜ん,所で >>273 のようであるとしたら,結局
#define STR(x) #x
hogeprint( value, STR(value));
のときの "value" は,関数(hogeprint)内でのみ存在するのでしょうか?

逆に, >>272 であるとすれば,
printf("hogehoge %d\n", value); を行うプログラムでは
実行中ずっと "hogehoge %d\n" という文字列リテラルを,
どこぞかのメモリ領域に有していることになる???



276 :デフォルトの名無しさん:03/04/01 18:34
>>274
何を今頃とち狂ったレスをつけてるんだ?

277 :デフォルトの名無しさん:03/04/01 18:38
俺もやってみたい
struct gmstat *型の引数でint を返す関数のポインタ
を保持する配列fnsを3個用意してそこに
gmmain, gmrank, gmentを代入してるってことですか

int *(fns[])(struct gmstat*)の場合はfnsは
struct gmstat* 型の引数 をもちint *を返す関数の配列であってますか?
int *fns[5](struct gmstat*)
のばやい
"int * を5個保持する配列"を返す関数fns?


278 :デフォルトの名無しさん:03/04/01 18:38
>>275
>>273は忘れろ。

279 :デフォルトの名無しさん:03/04/01 18:43
>>277
最初の解釈、「要素数3の配列fns」だ。
それから、関数は配列にできない。できるのは関数のポインタだ。


280 :デフォルトの名無しさん:03/04/01 18:58
文字列とポインタについて
char *str="hello";
printf("文字列は%sです。\n",str);
return 0;}

っていうコードなんですが
*strっていうのは、数値のことで
strっていううのは、アドレスのことですよね??
それなのに
printf("文字列は%sです。\n",str);
これだと文字列が格納されている変数のアドレスが表示されそうなのですが
きちんと文字列が表示されるのは何故でしょうか??

281 :デフォルトの名無しさん:03/04/01 19:00
>>279
かなり考えたのになかなか分からなかったのに
わずか5分で間違いを指摘されるとは。
うーん考えてみると関数のポインタのサイズは知ることができても
関数のサイズってあまりピンとこないし、配列にできないのは
不思議では無い気がしてきました

282 :デフォルトの名無しさん:03/04/01 19:00
>>280
printf()が、%sに対応した処理としてそう表示するように実装されているから。

283 :デフォルトの名無しさん:03/04/01 19:08
>>280
%s の場合はアドレスを貰って
'\0'まで表示させるように定義されているから。

284 :デフォルトの名無しさん:03/04/01 19:41
>>281
あぁ、書くの忘れてた。
配列を返す関数も定義できないのでその積もりで。
それと、型が複雑になりそうならtypedefを使うといい。

/* int要素5個の配列の型定義 */
typedef int (int5_t)[5];
/* int5_tへのポインタを返す、intを引き数とする関数の一例 */
int5_t *func(int foo)
{
 static int5_t sArr; /* static int sArr[5];でもいい */
 return &sArr;
}
/* intを返す、intを引き数とする関数の型定義 */
typedef int fnInt_t(int);
/* fnInt_t型の関数のプロトタイプ */
fnInt_t foo;
int bar(int);
/* fnInt_t型の関数へのポインタの配列 */
static fnInt_t *const fns[] = {foo, bar,};

285 :デフォルトの名無しさん:03/04/01 20:15
#include <stdio.h>
#include <stdlib.h>

int main(void){
char *str;
int num,i;
printf("何文字のaを用意しますか?\n");
scanf("%d",&num);
str=(char *)malloc(sizeof(char)*(num+1));
if(!str){
printf("メモリが確保できませんでした。\n");
return 1;}
for(i=0;i<num;i++){*(str+i)='a';}
*(a+num)='\0';
printf("%sを用意しました。\n",str);
free(str);
return 0;}

このコードに間違いあるでしょうか??

286 :デフォルトの名無しさん:03/04/01 20:16
>>285
書き方がキモイ

287 :デフォルトの名無しさん:03/04/01 20:20
>>285
間違いはある。

288 :285:03/04/01 20:29
どうしてもエラーが出るよ〜ヽ(`Д´)ノウワァァン!!

289 :デフォルトの名無しさん:03/04/01 20:32
> *(a+num)='\0';
*(str+num)='\0'; じゃないの?

290 :デフォルトの名無しさん:03/04/01 20:39
関数のポインタで盛り上がっているようですので、ついでにもひとつ教えて下さい。
わたしの理解では、関数のポインタは、別の型の関数のポインタとのみ変換して、
また、元に戻すことができるはずです。
しかるに、とある Linux のライブラリ関数に、次のようなものがあるのですが、
こいつの結果を関数のポインタにキャストするとやはり具合が悪いんでしょうか。

void *dlsym(void *handle, const char *symbol);

291 :デフォルトの名無しさん:03/04/01 20:43
voidポインタのサイズと関数ポインタのサイズが同じなら、とりあえず動くのかな

292 :285:03/04/01 20:44
strに変更してもエラーでちゃいますヽ(`Д´)ノウワァァン!!
ソース書けばボタンひとつでコンパイル&実行してくれるソフトウェア使ってるんだけど
そのソフトウェアがおかしいのかなぁ

293 :デフォルトの名無しさん:03/04/01 20:49
>>292
エラーをコピペしてみ。

294 :デフォルトの名無しさん:03/04/01 20:51
> そのソフトウェアがおかしいのかなぁ
一つ忠告してやる、自分の無能を棚上げして開発環境にあたる根性をどうにかしろ

295 :デフォルトの名無しさん:03/04/01 20:56
そのソフトウェアが C Machine なら、かなりの確率でソフトウェアがおかしい。

296 :デフォルトの名無しさん:03/04/01 20:57
C Machineだったらお答えできません。
理由:絶対にインストールしたくないから。

297 :デフォルトの名無しさん:03/04/01 21:09
その気持ち悪いコーディングスタイルを何とかするのが先決だ。

298 :デフォルトの名無しさん:03/04/01 21:27
#include <stdio.h>
#include <stdlib.h>

int
main (void)
{
  char *str;
  int num, i;
  printf ("何文字のaを用意しますか?\n");
  scanf ("%d", &num);
  str = (char *) malloc (sizeof (char) * (num + 1));
  if (!str)
    {
      printf ("メモリが確保できませんでした。\n");
      return 1;
    }
  for (i = 0; i < num; i++)
    {
      *(str + i) = 'a';
    }
  *(str + num) = '\0';
  printf ("%sを用意しました。\n", str);
  free (str);
  return 0;
}
/* indentコマンドはじめて使ったよ */

299 :デフォルトの名無しさん:03/04/01 22:00
??? func(void)
{
return func;
}

これが成立する型名(???の部分)がどうしてもわかりません、誰か教えて下さい。

300 :デフォルトの名無しさん:03/04/01 22:13
>>299
void *
すべてのポインタは暗黙で void * に変換できたはず。

301 :285:03/04/01 22:13
c machineですた。(泣

まだC言語初めてまだ4日だからきちんとしたコードが書けないよ、
ヽ(`Д´)ノウワァァン!!
綺麗なコーディングスタイルってどういうのでつか??
やっぱり関数と関数の間に一行開けたりとかでつか?


302 :デフォルトの名無しさん:03/04/01 22:16
今度、会社でCをまったく知らないハードの先輩にCを教える事になりました。
ただ、私自身学生時代に触っただけで、2年のブランクがあります。
で、教えてもらいたい事は、以下の2つです。
1.この様な状態の2人にあったCのテキスト
2.Cでの学習環境を作る上でのフリーソフト
この2つがよく分かりません。
教えてください。

303 :デフォルトの名無しさん:03/04/01 22:17
>>301
>>298はコーディングスタイルのひとつの例。
で、C Machineは捨てようね。

>>299
void *でも返すしかないね。

304 :デフォルトの名無しさん:03/04/01 22:22
>>301
C Machineを窓から投げ捨てろ。
そしてBCCを入れろ。

話はそれからだ。

305 :300:03/04/01 22:36
>>299
適当なこと書いてしまった……。
すべてのポインタ→すべての型へのポインタ
void * が関数へのポインタを保持できる大きさを持ってなきゃ駄目だ……。

とりあえず VC++6.0 では問題なくコンパイルできるが、厳密にはどうすんだろう?

306 :デフォルトの名無しさん:03/04/01 22:40
>>305
>void * が関数へのポインタを保持できる大きさを持ってなきゃ駄目だ……。
一律32bitじゃないの?Windows95以降のポインタって

307 :デフォルトの名無しさん:03/04/01 22:47
push argv
push argc
call main
add esp, $8

308 :285:03/04/01 23:03
C Machineってそんなに悪評高いソフトなんだ、、、。
よろしかったら、その訳を聞かせてください


309 :デフォルトの名無しさん:03/04/01 23:13
>>308
>>298のようなプログラムが動かないんでしょ?糞です。

310 :デフォルトの名無しさん:03/04/01 23:15
あの〜defineって

#define ABC 100 みたいに使うんですよね

参考書には

#ifndef ANYHEADER_H
#define ANYHEADER_H
  ・
  ・
  ・
#endif って書いてるんですけど、なんだかdefineの
使い方がわかんなくなってきました。教えてください



311 :デフォルトの名無しさん:03/04/01 23:18
>>310
インクルードガードで検索汁。
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AB%E3%83%BC%E3%83%89%E3%82%AC%E3%83%BC%E3%83%89

312 :デフォルトの名無しさん:03/04/01 23:19
>>305
その場合
void (*)(); とかint (*)(); とかを汎用関数ポインタの代わりとして使う。 
当然キャストは必要。void *を使うという解は移植性に乏しい。

313 :デフォルトの名無しさん:03/04/01 23:43
>>310
#define ABC 100
int a=ABC;    /* int a=100; */

#define ABC
int a=ABC;    /* int a=; */

314 :デフォルトの名無しさん:03/04/01 23:45
>311
ありがとう、なんだかわかってきました。
#ifndef ANYHEADER_H
#define ANYHEADER_H
  ・
  ・
  ・
この例文で、ANYHEADER_Hが2回目のインクルードでは定義されると
あったんですが、どういう意味なんですか?
#define ABC 100 の定義とは全然意味違うんですよね。すみません、
ほんと初心者なもので

315 :デフォルトの名無しさん:03/04/01 23:51
>>314
違う、ANYHEADER_Hは一度しか定義されず、最初にこの定義に
出会った時のみ#endifまでの間をコンパイルするという使い方。
2回目以降は既にANYHEADER_Hが定義されているので、
スキップされる。
ヘッダファイルのある部分が二重にコンパイルされてエラーが
出るのを防ぐ常套手段。

316 :デフォルトの名無しさん:03/04/02 00:00
ということは
#ifndef ANYHEADER_H
#define ANYHEADER_H  の順番が大事なんですか?
仮に
#define ANYHEADER_H
#ifndef ANYHEADER_H としてしまうと、すでにANYHEADER_Hが
定義されているから、一度もインクルードされないってなるんですか?
間違ってたらすごく恥ずかしい質問になってしまったような・・・

317 :デフォルトの名無しさん:03/04/02 00:04
>>316
正解。

318 :デフォルトの名無しさん:03/04/02 00:06
>>316
そうです。というかコンパイラによっては、#undefせずに複数回#define
しようとすると警告が出るものもあります。

319 :デフォルトの名無しさん:03/04/02 00:08
>313
#define ABC
int a=ABC;    /* int a=; */
上の例でABCは未定義なんですか?それとも宣言してるから定義している
ってことになるんですか?

320 :デフォルトの名無しさん:03/04/02 00:10
>>319
マクロは定義されるけど置換え対象が空だというだけ

321 :デフォルトの名無しさん:03/04/02 00:11
そうなるかもなー

cpp test.c
とかやってみるとプリプロセッサがどう動くか分かる
ただしstdio.hとかをinclude すると出力たくさんですぎるので
全部外して遊んでみたら?


322 :デフォルトの名無しさん:03/04/02 00:12
教えてくださったみなさん、ほんとにありがとうございます!
なんだか数日間の悩みが晴れました。すぐに復習ノートに
書き込まなきゃ

323 :デフォルトの名無しさん:03/04/02 00:32
#include <stdio.h>
void *(*)(void) func(void)
{
printf("プ");
return func;
}
int main()
{
(*(*(void ((*)(void))((*)(void)))(*(func()))())())();
return 0;
}

これでよろしいのでしょうか?

324 :デフォルトの名無しさん:03/04/02 00:57
>>323
それコンパイル通る?

325 :デフォルトの名無しさん:03/04/02 00:57
>>323
typedef int (*fun_t)(); /*汎用関数ポインタ*/
typedef fun_t (ptrfun_t)()/*汎用関数ポインタを返す関数へのポインタ*/
fun_t func()
{
return (fun_t)func;
}

main()
{
ptrfun_t state;
while(1)
state=(ptrfun_t)(*state)()
}

こうしなさい

326 :デフォルトの名無しさん:03/04/02 00:58
>typedef fun_t (ptrfun_t)()/*汎用関数ポインタを返す関数へのポインタ*/

typedef fun_t (*ptrfun_t)();/*汎用関数ポインタを返す関数へのポインタ*/

失礼

327 :デフォルトの名無しさん:03/04/02 01:03
ptrfun_t state=func;
も忘れてた。

もしくは別解凍として
struct fun_t { struct fun_t (*fun)(); };

fun_t func()
{
struct fun_t ret={func};
return ret;
}

main()
{
struct fun_t state={func};
while(1)
state=(*state.fun)();
}


328 :デフォルトの名無しさん:03/04/02 01:07
#include <stdio.h>

int main(void)

{
int a,b;

puts("2つの整数を入力して下さい。");
puts("整数A:");
scanf("%d",&a);

puts("整数B:");
scanf("%d",&b);

printf("Aの値はBの値の%fです。\n",(double)a/b*100);

}

このファイルをコンパイルしたら実行ファイルはできるのですが次のような
警告がでます。どうすればいいのでしょうか?

2.a.c:17:2: warning: no newline at end of file

329 :デフォルトの名無しさん:03/04/02 01:09
>>328 英語を勉強する。

330 :デフォルトの名無しさん:03/04/02 01:11
no newline at end of file
いくらなんでもこれは分らなきゃだめだろ?

331 :デフォルトの名無しさん:03/04/02 01:14
ワラタ

332 :328:03/04/02 01:18
>329フャイルの最後に新しい行がないってことですか?
>330 それが分からないのです。なぜだかわかりませんが
コンパイルするのに5分以上かかりました。

333 :デフォルトの名無しさん:03/04/02 01:26
今日はじめてCを始めた初心者なんですが
とりあえずhello worldを表示させる

#include<stdio.h>
main()
{
printf("helloworld\n");
}
を打ち込んでコンパイル、実行できたのですが
何も表示されませんでした。

何が問題なのかどなたか教えてください。

334 :デフォルトの名無しさん:03/04/02 01:30
何か表示されたはずだが、>>333がとろすぎるので
表示を読む前にウィンドウがとじてしまっただけ。

目を鍛えろ。
パチスロとかお勧め。
で、擦るだけ擦ったらVCスレで聞きなおせ。

335 :デフォルトの名無しさん:03/04/02 01:32
>>333
本当にコンパイルして実行ファイルできたの?

336 :デフォルトの名無しさん:03/04/02 01:33
>>333
環境を教えろや

337 :デフォルトの名無しさん:03/04/02 01:33
(333 のよそー)
$ make test
$ test
$

338 :デフォルトの名無しさん:03/04/02 02:06
gcc 2.95 です。
Linuxです。
>>337
違います。
gcc -o test test.c
です。

339 :デフォルトの名無しさん:03/04/02 02:11
>>338
testだとtestという用意されたコマンドが実行されるだろう。
./testと入力して実行する。


340 :339:03/04/02 02:12
いや、大抵はシェルの組み込みコマンドか>test

341 :デフォルトの名無しさん:03/04/02 02:15
>>338
>>337がつっこんでいるのはコンパイルの時の命令じゃなくて、実行時の命令だと思うぞ。

342 :デフォルトの名無しさん:03/04/02 02:39
やっぱり関数ポインタはキモイ

343 :デフォルトの名無しさん:03/04/02 02:44
int func(void);
これがfunctionポインタの宣言だとしたら綺麗だけど、プロトタイプとかぶるからねぇ。
それか、ぜんぶ
(*printf)("hello");
みたいにするとか。

344 :デフォルトの名無しさん:03/04/02 03:04
ねえねえ
functionって
ファンクシャンか
ファンクションの
どっちで読んでる?
漏れの周りでは前者なんだけど、
後者って人は居る??


345 :デフォルトの名無しさん:03/04/02 03:07
ファンクション

>>343
int func(void);じゃどこにも*がないからポインタに見えないYO!

346 :デフォルトの名無しさん:03/04/02 03:07
ファックション

347 :デフォルトの名無しさん:03/04/02 03:10
俺はフャンクションと呼んでいる。
鼻から息を抜くように発音するのがミソ。

348 :デフォルトの名無しさん:03/04/02 03:11
ファンクトイオン

349 :デフォルトの名無しさん:03/04/02 03:13
フヌクシオンヌ

350 :デフォルトの名無しさん:03/04/02 03:17
へーちょ

351 :デフォルトの名無しさん:03/04/02 03:17
いいかも♪とマジレスしてみる。

352 :デフォルトの名無しさん:03/04/02 03:20
object pascal だと関数型があって
var
hoge: function (i:integer):integer;
みたいな感じだっけ??
あまり使う人居なさそう。

353 :デフォルトの名無しさん:03/04/02 03:20
俺はNull Pointer Exceptionをぬるぽと読む。

354 :デフォルトの名無しさん:03/04/02 03:22
 ( ・∀・)   | | 
 と    ) <| | |  ザシュッ
   Y /ノ  .・・人 ∴:・
   // )  ・ <  >__Λ∩
  //し' //. V`Д´)/
  (/彡          /  ←>>352-353

355 :デフォルトの名無しさん:03/04/02 03:27
ライブラリの使い方を

356 :デフォルトの名無しさん:03/04/02 04:19
すみません、超初心者ですが質問させてください。
mpg321 という純粋に mp3 などを再生するだけのプログラム
を利用し、front end みたいな物を作りたいのですが
例えば player というプログラム名とし、player をバックグラウンドで
起動しておき、
> player -back
などと引数付きでコマンドを打つと、
既に起動しているほうの player に引数を渡して、新しい方は
すぐに終了するようにしたいのですが、どうすればいいか見当が付きません。
どんな感じになるか教えていただけないでしょうか。よろしくお願いします。

357 :デフォルトの名無しさん:03/04/02 05:04
>>356
プロセス間通信

358 :デフォルトの名無しさん:03/04/02 06:20
>>357
プロセス間通信でぐぐってみたら、
ttp://www.ncad.co.jp/~komata/c-kouza13.htm
を見付けました。これを元にやってみたいと思います。
どうもありがとうございました。

359 :デフォルトの名無しさん:03/04/02 06:37
>>314
<この例文で、ANYHEADER_Hが2回目のインクルードでは定義されると
を、
>この例文で、ANYHEADER_Hが2回目のインクルードでは定義されていると
とすれば、自然だと思う。誤植なのか、もしかしたら、そのテキストの
著者は日本語が不自由なのではないでしょうか。

360 :デフォルトの名無しさん:03/04/02 08:37
for関数のセパレーターが';'なのってキモくない?
他の関数みたいに
for(i=0, i<n, i++);
の方が良くない?

361 :デフォルトの名無しさん:03/04/02 08:41
添付ファイルを作る関数があるけど、それって変じゃない?
後から作ったらそれは添付ファイルとは言えなくない?


362 :デフォルトの名無しさん:03/04/02 08:46
>>360
for(i=0, k=0, i<n, i++);となれば区別つかないから却下。

363 :デフォルトの名無しさん:03/04/02 09:09
>>362
for((i=0,k=0),i<n,i++)とやればよい。

364 :デフォルトの名無しさん:03/04/02 09:27
・forは構文であって関数ではない。
・,は演算子であってただのセパレータではない。
以上

365 :デフォルトの名無しさん:03/04/02 09:31
こういう仕様だったらよかったのにという話なのに、なんで今の仕様を持ち出してくるんだろう。

366 :デフォルトの名無しさん:03/04/02 09:47
詰めの甘い仕様を持ち出すから叩いただけなんじゃない?

367 :デフォルトの名無しさん:03/04/02 10:07
for の後に条件反射的に( ; ; )書くクセがあるので
今の構文じゃないと困る。

368 :デフォルトの名無しさん:03/04/02 10:12
そんなぁ( ; ; )

369 :デフォルトの名無しさん:03/04/02 11:25
>>360
エープリルフールも終わったんだからネタはやめろ。
Cではforはあくまでも「文」であって「関数」じゃねーぞ。

370 :デフォルトの名無しさん:03/04/02 12:13
> エープリルフールも終わったんだからネタはやめろ。

2chで言うなよ。

371 :デフォルトの名無しさん:03/04/02 13:03
じゃあ、関数でforとかifって作れる?
void my_for(???)
{
}
void my_if(bool b)
{
return;
}
みたいに。


372 :デフォルトの名無しさん:03/04/02 14:10
>>356
取り敢えず、ファイルで受け渡しするようにしてみたら?
プロセス間通信はそれからでもいいと思うが。

373 :デフォルトの名無しさん:03/04/02 14:21
>>371
正直マクロで十分だろう。
嫌われるけど

374 :デフォルトの名無しさん:03/04/02 14:31
int型の2とか4を
1ビットbool型にキャストすると
falseになるの?


375 :デフォルトの名無しさん:03/04/02 14:36
>>374
bool型って何?_Boolのことか?

376 :デフォルトの名無しさん:03/04/02 14:47
>>373
そもそも、forを関数とか言い出した>>360が阿呆なわけで。
>>374
Cにはbool型なんてない。

処で質問。
malloc()よりはalloca()の方が安全だと思うのだがansi標準にはない。
使うべきか否か。

377 :デフォルトの名無しさん:03/04/02 14:49
>>376
自分で決めろ。

378 :デフォルトの名無しさん:03/04/02 14:50
>>377
そりゃそうだ。
で、君の意見は?

379 :デフォルトの名無しさん:03/04/02 14:51
>>378
mallocを使え。

380 :デフォルトの名無しさん:03/04/02 14:54
mallocよりもallocaの方が安全ってどういうこと?

381 :デフォルトの名無しさん:03/04/02 15:01
自動で解放されるんだっけ?

382 :デフォルトの名無しさん:03/04/02 15:04
自動で解放されないと危険なの?

383 :デフォルトの名無しさん:03/04/02 15:16
alloca()にはfree()は不要。つーかfree()してもいいのか?
試しにfree()してみたらエラーはでないが。

384 :デフォルトの名無しさん:03/04/02 15:17
ヒープじゃないんだからfreeなんてするなよ!

385 :デフォルトの名無しさん:03/04/02 15:37
>>376
> malloc()よりはalloca()の方が安全だと思うのだがansi標準にはない。
C99の可変長配列ならばalloca()と同等の処理をするはず。
結論:C99を使う


386 :デフォルトの名無しさん:03/04/02 15:38
>>383
free()したポインタを再びfree()しても
俺の処理系ではエラーにはなりませんでしたが何か?
# ま た 未 定 義 か

387 :デフォルトの名無しさん:03/04/02 15:39
>>385
判った。gccの拡張機能でお茶を濁すとするよ。

388 :デフォルトの名無しさん:03/04/02 16:06
>>383
密かにスタックを壊してる罠。

389 :デフォルトの名無しさん:03/04/02 17:02
借りすぎに注意しましょう。ご利用は計画的に。

390 :manpage厨:03/04/02 17:05
alloca 関数は、機種とコンパイラに依存する。
多くのシステムでは実装にバグがあるので、この関数の使用は推奨されない。

多くのシステムにおいて、関数コールの引き数のリスト内では alloca が使えない。
これは、 alloca によって予約されるスタック領域が、
関数引き数に使われるスタック領域の中に現れてしまうためである。


ということらしい。使わないでおけ。

391 :デフォルトの名無しさん:03/04/02 19:11
Cのコンパイルを実行しようとして
参考書とかにコマンドプロンプトで
gcc aaa.c
で実行するとありますが

これで実行すると
内部コマンドとして認識されていませんと出て実行されません。

何が環境設定みたいなものをしなければならないのでしょうか?
参考書やホームページなどにはその辺の記述は全くないのですが
教えてください

392 :デフォルトの名無しさん:03/04/02 19:15
>>391
まずインストール汁

393 :デフォルトの名無しさん:03/04/02 19:19
>>392
インストール・・・?
そんなのあるの?

参考書だとコマンドプロンプトに記述のみしか載ってないが・・・?

394 :デフォルトの名無しさん:03/04/02 19:23
>>393
そもそも環境はなんだよ。コマンドプロンプトと書いてることからするとWindows NT系か?
cygwinを使おうとしてるのか?

395 :デフォルトの名無しさん:03/04/02 19:30
>>394
Windows2000
ソースは普通に秀丸で
それを拡張子をCにしてCドライブに保存

プロンプトでCドライブ配下に移動して
gcc aaa.cを実行

396 :デフォルトの名無しさん:03/04/02 19:31
>>395
Win2000そのままだったらgccなんて入ってないよ。

397 :デフォルトの名無しさん:03/04/02 19:38
>>396
すいませんどうするれば2000やxpに
gccという奴を入れることができるのですか?

それとも
コンパイルするのに他のやり方とかありますか?

398 :デフォルトの名無しさん:03/04/02 19:40
>>397
ここの>>1>>2 を見てから言ってください。

399 :デフォルトの名無しさん:03/04/02 19:40
訂正 >>2以降を。

400 :デフォルトの名無しさん:03/04/02 20:14
 教えてください。
 マ板で見たんだけど、以下の様なソースね。

int foo( void )
{
char a{4], b[4]; // bを消すと落ちる

  ...明らかに a から b へのオーバーライド

 Unix系なら明らかにスタックを破壊するので理解できるが、Win系だと
下から上に積まれるので『落ちはしない』様な気がするのですけど・・・
 詳しい人お願いします。









401 :デフォルトの名無しさん:03/04/02 20:16
>>400
コンパイルすらできません。
というか、Unix系とかWin系とか関係ないし。

402 :デフォルトの名無しさん:03/04/02 20:19
意味がわからん上にすてきな感じのインターネットですね
a{4]

403 :デフォルトの名無しさん:03/04/02 20:24
<<401
 そのレベルの人には聞いていません。
<<402
 目良いですね。気がつきませんでした。



404 :デフォルトの名無しさん:03/04/02 20:30
彼の超越したレベルには誰もついて行けてないと思われ

405 :デフォルトの名無しさん:03/04/02 20:32
てか、その402と401はどこに出力してるのかわからんな。

406 :デフォルトの名無しさん:03/04/02 20:34
<<404
あなたのレベルが低いだけです。

407 :404:03/04/02 20:38
<<406
そうですかごめんなさい
僕の頭もオーバーロードして落ちそうです

408 :デフォルトの名無しさん:03/04/02 20:42
括弧の内側にスペース入れちゃう人は嫌いです。int foo( void )←これ

409 :デフォルトの名無しさん:03/04/02 20:53
 ∧_∧
( ´∀`)< ち○ぽ

410 :デフォルトの名無しさん:03/04/02 20:55
>400
WinでもIAなCPUではスタックは上から下だけど。

411 :デフォルトの名無しさん:03/04/02 20:57
return( "1" );

412 :デフォルトの名無しさん:03/04/02 21:01
このチンカス!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>409

413 :デフォルトの名無しさん:03/04/02 21:03
>>410
ぬるぽはAI

414 :デフォルトの名無しさん:03/04/02 21:09
return ( ( void * ) atoi( "0" ) );

415 :デフォルトの名無しさん:03/04/02 21:11
return((void*)atoi("0"));怒

416 :デフォルトの名無しさん:03/04/02 21:19
ライブラリに頼るのは恥ずかしいことなの?

417 :デフォルトの名無しさん:03/04/02 21:22
>>416
何を使うかの状況判断ができない人のほうが恥ずかしい。

418 :デフォルトの名無しさん:03/04/02 21:54
400です。すいませんマシンがトラぶってレス遅れました。
私の質問は、以下の様なコードにおいて

#include<stdio.h>

voidfoo(void )
{
inti;
chara[4];

for( i = 0; i < ???; i++ )
a[i] = 0x00;

}
voidmain(void )
{
foo();
printf( "I'm safe\n" );

}
 ???が4を超えた場合、必ず飛ぶかどうかという質問です。
 Unix系の場合、スタックは上位から下位へ積まれますので、???が5になれば
リターンアドレスを書き換えて飛びそうな気がします。
 しかし、Win系の場合、スタックは下位から上位に積まれるので、飛びはしない
のではという事です。
 言葉が足りなくてすいません。

419 :デフォルトの名無しさん:03/04/02 22:06




        ま    た    未    定    義    か





420 :デフォルトの名無しさん:03/04/02 22:09
>>418
大丈夫、Win系でもスタックは高位アドレスから低位アドレスに向かって積まれるので
予定通りきちんとリターンアドレスを破壊してくれる。
一応念のために、LSI-CでもVC++でもそのようにコードを吐くことを確認したから間違いないだろう。

421 :デフォルトの名無しさん:03/04/02 22:10
質問です。
10秒単位で時間を表示するプログラムを作ってみたのですが、
時間が10秒単位になった瞬間、for文を使っているので何回も表示されてしまいます。
これを10秒単位で1回だけ表示にしたいのですが、解決策はあるでしょうか?
口頭で言ってもうまく説明出来ないので、ソースを晒します。
#include <stdio.h>
#include <time.h>

void everytime(void);

int main(void)
{
everytime();
return 0;
}

void everytime(void)
{
char *s;
time_t t;
for(;;)
{
time(&t);
if((t%10)==0)
{
s=ctime(&t);
printf("%s\n",s);
}
}


422 :デフォルトの名無しさん:03/04/02 22:11
れ、bccでは通ったよ。
タブがつぶされてるのはかんべんね。
まさか voidfoo とか chara[] とか見て気づかない香具師はいないよね。



423 :デフォルトの名無しさん:03/04/02 22:12
>>421
最後に実行した時間覚えておけばいいんじゃん?

424 :デフォルトの名無しさん:03/04/02 22:13
>>418
Intel 系 CPU のスタックは
アドレスの大きい方から小さい方へ確保される
(関数抜けた時に add esp, * でスタッククリアだし)。
だから、オーバーしたらリターンアドレスが書き換えられる可能性がある。

もしくは、その前に i の値が書きかわって
変なことになることもあるかもな。
今回の場合は i を 0 にリセットして無限ループか。


>>419
一応バグの振る舞いを知っておくのも必要だと思うが。

425 :デフォルトの名無しさん:03/04/02 22:13
>>421
適切なsleepを挟んでCPU資源を解放しろ。

426 :デフォルトの名無しさん:03/04/02 22:14
>>422
それをつっこむと、そのレベルの人には聞いていません。と言われるもので。


427 :デフォルトの名無しさん:03/04/02 22:15
>>425
命令しないでください!

428 :デフォルトの名無しさん:03/04/02 22:15
>>420
 初めてのまともなレスありがとうございます。
 
 そっか勘違いかね?昔のMS-DOSとかでもスタック方向は高位ー>下位
だっけ?
 知ってたら教えてね。

429 :デフォルトの名無しさん:03/04/02 22:16
>>428
いい加減スレ違いな話題は(ry

430 :デフォルトの名無しさん:03/04/02 22:16
>>424
最適化を掛けるとiはレジスタ実装になるので問題は出ない。
それどころか、ループ回数が10数回程度ならループさえ消えてしまう可能性が高い。
仮にそうでなかったとしても、iの方が低位アドレスに配置されるのではないだろうか。

431 :デフォルトの名無しさん:03/04/02 22:17
>>427
おまえには言ってない。

432 :デフォルトの名無しさん:03/04/02 22:18
>>423,>>425
ご返答どうもありがとうございます。
とりあえず>>423さんの方法でやってみようと思います。
>>427は偽です。

433 :デフォルトの名無しさん:03/04/02 22:22
>>424
 どうも。私の勘違いですね。
 お騒がせしました。
>>429
 スレ違いですか?
 このスレはC言語の話でしょ。
 アセンブラレベルの話は少しスレ違いですが、せめてスタックの
話くらいはさせて欲しいです。

434 :デフォルトの名無しさん:03/04/02 22:25
春だなぁ。

435 :デフォルトの名無しさん:03/04/02 22:26
desune

436 :デフォルトの名無しさん:03/04/02 22:29
C言語にはかわりないんだから、環境依存の話くらいさせてほしいです。


437 :デフォルトの名無しさん:03/04/02 22:30
実験してみれば済むことを、それをできるスキルの人間が聞くのはスレ違い。

438 :デフォルトの名無しさん:03/04/02 22:30
>>436
標準Cの話題じゃなかろうに。

439 :デフォルトの名無しさん:03/04/02 22:32
ビタミンCの話題じゃなかろうに。

440 :デフォルトの名無しさん:03/04/02 22:46
 400です。
 もひとつ質問!!
socket IO において recv(), send() を実行中に、signal を受けると、
エラーが生じます。(errno=EINTR=23 だっけか?)
 この場合、socket buffer に中途半端なデータが残ることは無いので
しょうか?
 私は sigprocmask() で来そうな signal をはじいてますが、EINTR の場合
差し戻すような処理でも問題ないでしょうか?

441 :デフォルトの名無しさん:03/04/02 22:47
どこが破壊されるか
わかったところでなにか役に立つんですかね?

442 :デフォルトの名無しさん:03/04/02 22:47
応援しているぞ400!

443 :デフォルトの名無しさん:03/04/02 22:50
>>440
>>1くらい読みましょう。

444 :デフォルトの名無しさん:03/04/02 22:50
>>441
 全然役に立たないです。
 疑問を感じただけです。


445 :400:03/04/02 22:54
>>443
 ググレって事ですか?
 板の趣旨からは外れてないつもりですが・・・

446 :デフォルトの名無しさん:03/04/02 22:54
<<443
 低レベルな人は黙っていてください。

447 :デフォルトの名無しさん:03/04/02 22:55
>>445
 http://pc2.2ch.net/test/read.cgi/tech/1040220302/
 GO!

448 :400:03/04/02 22:56
あまり盛り上がらないので、寝落ちします。
お騒がせしました。

449 :デフォルトの名無しさん:03/04/02 22:59
>>444
未定義、不定の挙動を把握することはデバッグ時に大いに役立つぞ。

450 :デフォルトの名無しさん:03/04/02 22:59
いや、変に盛り上がってると言えなくも無い

451 :デフォルトの名無しさん:03/04/02 23:12
つか、>>418
> Unix系の場合
こーゆー寝ぼけた発言に対して誰か突っ込んでやれよ。

452 :デフォルトの名無しさん:03/04/02 23:15
>>437
その考え方は危険だよ。

453 :デフォルトの名無しさん:03/04/02 23:16
>>451
むしかえすと、また低レベルな人は黙っていてくださいと言われますよ?

454 :333:03/04/02 23:20
>>334
一応実行後一時停止するようになってるのですが・・・
>>335
はい。コンパイルOKという表示がでています。
>>336
windowsでLSI-86試食版3.3
に「C言語を始めよう」というソフトを
組み合わせて使っています。

始めはフォントが黒いせいで見えないのかと思ったのですが
選択範囲を指定して選択してみても反転しない
のでどうも表示されていないようです。

どうか教えてください。

455 :400:03/04/02 23:33
>>447さん
 どうもサンプル拾ってきました。
 差し戻さずリトライすれば良いようですね。

 こんなこと自宅でテストすれば良いのですが、環境がありませんので
皆さんのお知恵を拝借させていただきました。ありがとうございます。

>>451さん
 何が寝ぼけているのか解りません。
 論点を説明願います。
 OSではなく石レベルの話だと言いたいのでしょうか?
 

456 :デフォルトの名無しさん:03/04/02 23:35
もういい、もういい、この手の話は

   糸冬

457 :デフォルトの名無しさん:03/04/02 23:35
>>418
char a[5] がリターンアドレスに重なっており、
なおかつ、リターンアドレスの上位8bitがたまたま0だったとする。
Intel 系のCPUでは、a[5]の所は下位8ビットなのでそこに0を書くと
はまるが、Motorola 系のCPUでは、そこは上位8ビットなので、
0x00 を書いても運良く助かるってこと。
Intel系やMotorola系以外のバイトオーダーを使うCPUもあるので、
環境に激しく依存する。

458 :デフォルトの名無しさん:03/04/02 23:37
<a[5]
>a[4]

459 :400:03/04/02 23:42
>>457さん
どうも。
 で 終わり。


460 :デフォルトの名無しさん:03/04/02 23:50
>>454
確実に表示はされているはず。
printfの後にfor文で無限ループすれば?

461 :デフォルトの名無しさん:03/04/03 02:03
>>421 こんなのはどうですか。
#include <stdio.h>
#include <time.h>
int WaitTime(time_t*timeAdd,time_t waitTime)
{
time_t nowTime;
time(&nowTime);
if(*timeAdd+waitTime<=nowTime){time(&(*timeAdd));return 1;}
return 0;
}
int main(void)
{
time_t wait10,wait100;
time(&wait10);time(&wait100);
for(;;)
{
if(WaitTime(&wait10,1))printf("%s",ctime(&wait10));
if(WaitTime(&wait100,10))break;
}
return 0;
}

462 :デフォルトの名無しさん:03/04/03 02:18
>>461 だめです。

463 :デフォルトの名無しさん:03/04/03 04:14
sleepってlinuxしかつかえないの?

#include <stdio.h>
#include <time.h>
/* 時間がnow+10になるまで待ってnow+10を返す */
time_t mysleep10sec(time_t now){
   time_t t;
      
   while ((t = time(&t)) < now + 10){
   }
   return t;
}
int main(void)
{
   time_t t;
   char *s;
   s=calloc(1,256);
   /* 10の倍数秒になるまで待つ */
   for (time(&t); t%10!=0; time(&t)){
   }
      
   s = ctime(&t);
   printf("%s\n", s);
   for(;;){
      t = mysleep10sec(t);
      s = ctime(&t);
      printf("%s\n", s);
   }
   return 0;
}

464 :デフォルトの名無しさん:03/04/03 04:22
>>463
FreeBSDにもあるよ。
以下、FreeBSDのman 3 sleepから抜粋

>STANDARDS
> The sleep() function conforms to ISO/IEC 9945-1:1990 (``POSIX.1'').

標準関数じゃないね。

465 :デフォルトの名無しさん:03/04/03 04:37
Cygwinのmanに無かったからちょっとびっくりした

$ man 3 sleep
No entry for sleep in section 3 of the manual

466 :デフォルトの名無しさん:03/04/03 06:05
>>463
WindowsにはSleepってのがある。

>>465
nanosleep(セクション2)は?

467 :461:03/04/03 06:23
>>462
どこがダメですか?

468 :デフォルトの名無しさん:03/04/03 06:25
>>467
とりあえず無限ループ+最後にifならdo{}while使えば?

469 :デフォルトの名無しさん:03/04/03 06:47
指定した時間待つ関数と表示する関数は分けた方がいいと思う。

470 :デフォルトの名無しさん:03/04/03 08:37
>>467
time(&(*timeAdd)); が意味不明、間違えじゃないけど
time(timeAdd); でいいのでは?


471 :461:03/04/03 09:22
>>468 for(;;)以外使ったこと無かったので。分かりました。
>>469 ? 分かれてないですか?
>>470 確かにそうですね。

472 :デフォルトの名無しさん:03/04/03 09:30
とりあえずビジーループするクソなソースを貼るのはやめろ。

473 :デフォルトの名無しさん:03/04/03 09:49
(int main, int argc, char **argv)
{
(printf, "hello C");
return 0;
}

こういう言語仕様だったら見た目がもっとカッコイイソースが書けたのにね。

474 :デフォルトの名無しさん:03/04/03 09:54
forの構文がどうたら言ったたヤツか?
いい加減にスレ違い、板違いなんで消えろ

475 :デフォルトの名無しさん:03/04/03 09:59
>>473 どうせならこうしろ
((int main) ((int argc) (char **argv))
(printf "hello C")
(retrun 0))

476 :デフォルトの名無しさん:03/04/03 10:03
>>475
イイ!!
そういう感じのコンパイラ作ってみるよ。


477 :デフォルトの名無しさん:03/04/03 10:45
(((int) (main)) (((int) (argc)) ((char) (*)(*)(argv)))
((printf) ("hello C"))
((retrun) (0)))

478 :デフォルトの名無しさん:03/04/03 10:51
>>473
lispで我慢してろ。Cに手を出すな。

479 :デフォルトの名無しさん:03/04/03 11:14
#define BEGIN {
#define END }

並に、氏んでいいよ。

480 :デフォルトの名無しさん:03/04/03 11:28
括弧が多いとlispかよ(プ

481 :デフォルトの名無しさん:03/04/03 11:55
>>466
cygwinでは
manは無いけどsleep()は何故かあった。
しかもなにもインクルードしないのに使えてしまって不思議
sleep(1)は1秒止まるし

482 :デフォルトの名無しさん:03/04/03 12:05
>>477
(((( ;゚Д゚))) ガクガクブルブル

483 :デフォルトの名無しさん:03/04/03 12:20
非常にスレ違いかもしれんが、基本教えて・・

MS-DOSプロンプトの話なんだが、Cを実行した後の大量のデータがほしぃ場合、
スクロールしてしまって、始めの方のデータ見れない・・
これどうやってみるんだろ?

484 :デフォルトの名無しさん:03/04/03 12:24
>>483 ファイルに書く

485 :デフォルトの名無しさん:03/04/03 12:25
>>483
出力をファイルにリダイレクトして、後から見れ。

486 :デフォルトの名無しさん:03/04/03 12:26
ケコーン(w

487 :デフォルトの名無しさん:03/04/03 12:28
リダイ・・・やめた

488 :デフォルトの名無しさん:03/04/03 12:29
foo.exe > a.txt

で、画面に出力する内容をa.txtに保存する。

foo.exe >>a.txt

で、a.txtにどんどん追加する。

がんがり。

489 :デフォルトの名無しさん:03/04/03 12:31
>>484,485

詳しくやり方を教えてください・・・スマソ

490 :デフォルトの名無しさん:03/04/03 12:32
>>489
>>488

491 :デフォルトの名無しさん:03/04/03 12:55
> hoge | more
で1ページずつみれるよ。

492 :デフォルトの名無しさん:03/04/03 13:21
>>483
×:Cを実行した後の大量のデータがほしぃ場合
○:コンパイルエラーの最初の方のエラーを見たい場合

493 :デフォルトの名無しさん:03/04/03 13:33
>488

できました。ありがとうございます!


494 :デフォルトの名無しさん:03/04/03 13:46
Cの書籍としてよくでてくるK&RはCを勉強する過程で買っておいたほうがいいんですか??

495 :デフォルトの名無しさん:03/04/03 13:58
>494

人によります。

漏れはおすすめしない。

496 :デフォルトの名無しさん:03/04/03 14:00
まあ損はないだろうが俺は不要だった。

497 :デフォルトの名無しさん:03/04/03 14:03
今まで読んだことがないです。

むしろ、アルゴリズムとデータ構造の本を読んだほうが幸せになれることも……

498 :デフォルトの名無しさん:03/04/03 14:16
>495
お勧めはなんですか?

499 :デフォルトの名無しさん:03/04/03 14:22
>>498
どっちかて言うとA定食の方が美味しいよ。安いしね。

500 :デフォルトの名無しさん:03/04/03 15:27
>>481
printfだってstrcpyだって(ヘッダーファイルを)インクルードしなくても使えるだろ。C++じゃあるまいし。

501 :デフォルトの名無しさん:03/04/03 15:29
今日ってまだ4/1だっけか?

502 :デフォルトの名無しさん:03/04/03 15:33
>>500
4月バカはもう終わりましたよ

503 :デフォルトの名無しさん:03/04/03 15:35
>>502
もしかして宣言しないと関数を呼び出せないと思っている?

504 :デフォルトの名無しさん:03/04/03 15:42
(・∀・)キュンキュン

505 :デフォルトの名無しさん:03/04/03 16:35
くらえ!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>504

506 :デフォルトの名無しさん:03/04/03 17:46
16進数の44を10進数の44と変換したいんですが
いかようにすればよろしいのでしょうか?
何分厨房ではございますがご教授のほど
おながいいたします。

507 :デフォルトの名無しさん:03/04/03 17:48
意味不明

508 :デフォルトの名無しさん:03/04/03 17:55
>>506
16進数の44を10進数に変換したいの?

509 :デフォルトの名無しさん:03/04/03 18:06
>>508サソ

16進の44を10進数に変換といことではなくて
16進の44を10進で44としたいのです。
16進で55があったら10進では85ですよね?
そうではなくて例え、16進で44というデータが
あっても、それを強引に10新の44と
プログラムに思いこませたいのです。

わかりづらい説明ですが、おながいいたします。。。

510 :デフォルトの名無しさん:03/04/03 18:10
int func(int val)
{
return ((val & 0xf0) >> 4) * 10 + (val & 0xf);
}

511 :デフォルトの名無しさん:03/04/03 18:23
じゃあ0xfeとかだとどう変換したいんだろう?
ナゾ。

512 :デフォルトの名無しさん:03/04/03 18:28
>>510サソ
アリガトンゴザイマス
カンゲキ・・・
シフトかぁ。。。

>>511サソ
なんかしんねぇけど
A-Fは入ってこないというナゾの仕様なんです。

513 :デフォルトの名無しさん:03/04/03 18:33
もう寝るね(=^-^)/~~

514 :デフォルトの名無しさん:03/04/03 18:33
はえーよ

515 :デフォルトの名無しさん:03/04/03 18:45
BCDのことではないのか

516 :デフォルトの名無しさん:03/04/03 18:51
>>512
プログラムは何を根拠に入って来るデータを16進だと判断するの?

517 :デフォルトの名無しさん:03/04/03 19:18
しらねぇ奴、知恵のねぇ奴に限ってあれこれ騒がしいな。

518 :デフォルトの名無しさん:03/04/03 19:31
あれこれあれこれ

519 :512:03/04/03 19:46
>>516サソ
ダンプファイルがありまして、
それを関数に渡すんですが
その関数が10進で来ることを予期しており
ヘキサじゃダメというだけの理由でございます。

520 :デフォルトの名無しさん:03/04/03 20:41
動的なメモリで作った配列があり、
中身を保持したまま配列の数を5000から5005などに増やしたいときは
いったん別に仮配列を用意してコピーしてから元配列を開放、
また新たに元配列にメモリを確保して仮配列からコピー
という方法しかないのでしょうか?


521 :デフォルトの名無しさん:03/04/03 20:44
なぜ、仮配列を新配列にしないの?

char *foo = malloc( 5000 ) ;
...
{
char *neon = malloc( 5005 );
memcpy( neon, foo, foolength );
free (foo);
foo = neon;
}

522 :デフォルトの名無しさん:03/04/03 20:45
単に、新しい動的メモリを作って、そこにコピーすれば?

配列確保→新しい配列のポインタ取得
古い配列 → 新しい配列 にデータ転送
古い配列解放
古い配列のポインタを指す変数=新しい配列のポインタ

または、manpage realloc

523 :デフォルトの名無しさん:03/04/03 20:46
なぜ realloc を

524 :522:03/04/03 20:46
キャ……

525 :デフォルトの名無しさん:03/04/03 20:53
reallocでダメなのかな

526 :522:03/04/03 21:04
こういう感じじゃないの?

www9.plala.or.jp/sgwr-t/lib/realloc.html

527 :520:03/04/03 21:08
>>521
>>522
>>523
reallocなんて関数があったのを始めて知りました。
ありがとうございます。


528 :520:03/04/03 21:12
>>525
>>526
書き込んでる間に書き込みが‥‥
ありがとうです。

529 :デフォルトの名無しさん:03/04/03 23:42
Cのソースとか見るとたまにputsを使ってるのを見かけますが

puts関数の存在意義って何ですか?
Printfで全て間に合うような気がしますが・・・



530 :デフォルトの名無しさん:03/04/03 23:48
>>529
速度は?

531 :デフォルトの名無しさん:03/04/03 23:49
Printfは絶対に無(ry爆

532 :デフォルトの名無しさん:03/04/03 23:55
>>530
わずかにタイプ速度が(ry

533 :デフォルトの名無しさん:03/04/04 00:03
>>531
printfね・・・

>>532
タイプの速度ってだいたい
一個なら1秒も変わらんし
複数ある場合はほとんどコピペじゃないのか?

534 :デフォルトの名無しさん:03/04/04 00:07
で、実行速度は?

535 :デフォルトの名無しさん:03/04/04 00:09
puts(s);
printf("%s\n", s);

だったら puts を使うなあ。

536 :デフォルトの名無しさん:03/04/04 00:11
>>534
putsの方が速い。
でも処理速度が問題にならなくて、別の箇所でprintf使ってるなら
俺ならprintfで統一する。

537 :デフォルトの名無しさん:03/04/04 00:14
529君検証して答えるべし。速度は?
530==534は、本質に切り込む問いかけしているぞ。
ま、なんだ。
勘のイイ奴なら何をどう調べればよいか分かるもんだが。

538 :デフォルトの名無しさん:03/04/04 00:17
大は小を兼ねると言ってもそれは機能面だけの話で、
多機能さを実現するためのコスト(printfの場合は書式の
解決処理ね)が、無駄というか、邪魔になる場合がある。

でもって、printfは処理が遅くて、putsは早い。
数百回の処理じゃ違いは体感できないが、何十万回も
繰り返し処理する場合は、その差が顕著になる場合があるよ。


539 :デフォルトの名無しさん:03/04/04 00:19
何十万回もputs呼ぶなら、
コンソールのスクロールの方が
圧倒的に遅くなると思ふ。

540 :デフォルトの名無しさん:03/04/04 00:20
コンソールのスクロール? とつっこんでみる。

541 :デフォルトの名無しさん:03/04/04 00:24
> /dev/nullと書こうと思ったがおまいには > NUL がお似合いだ



542 :デフォルトの名無しさん:03/04/04 00:36
コンソールに大量にログ文字列出力しといて、性能遅いとか
ほざく技術者がいっぱいいるのですが、あんたら馬鹿ですか?
トオモウ事が多いです…

543 :デフォルトの名無しさん:03/04/04 00:42
>>542
思うだけじゃなくて、本人に家。

544 :デフォルトの名無しさん:03/04/04 02:37
質問です。
1行目にデータ件数を書いて、2行目以降にデータを記述したファイルから、
乱数で出した数字番目の行のデータを取り出して表示させたいのですが、
fgetやfscanfを使って繰り返し読み込ませて目的の行まで進める、
という方法以外に何かいい方法ないですか?

545 :デフォルトの名無しさん:03/04/04 03:09
>544
・一気に全部読んで、改行をキーにして探す。
・一行のデータ量が固定なら、計算で長さを出す。で、ファイルポインタを移動させる。
・データ構造を工夫する。
・その他。(他のレス待ち含む)

546 :デフォルトの名無しさん:03/04/04 04:00
・最初に全部読んでファイルポインタだけ配列に記録しておく。
 取り出すときは乱数で行数を添え字にしてポインタを取り出しfseekのあとfgets

ここから下は余談

高速化のためにこの配列をファイルに記録しておき、
次からはテキストファイルと配列を収めたファイルのタイムスタンプを見て、
テキストファイルの方が新しければ配列に取り込み、それをファイルに記録、とかやる。

# おれはわりとよくこういうことをやる

547 :デフォルトの名無しさん:03/04/04 06:07
最初に全部メモリ上に読んで乗せとく
データ数が少ないならこれが速い

548 :デフォルトの名無しさん:03/04/04 10:04
メモリマップトファイル

549 :デフォルトの名無しさん:03/04/04 11:17
>>548
アレって一回ファイルをメモリ上に展開するのか?

550 :デフォルトの名無しさん:03/04/04 11:21
#define hoge(__p) \
  hoge_##__typeof__(__p)(__p)
として、__p の型に応じて後始末をしてくれるマクロを作ろうとしてるんですが、
うまくいきません(hoge___typeof__ は未定義だと言われる)。
どうすればうまくいきますか?

551 :デフォルトの名無しさん:03/04/04 12:08
ソートする対象の要素が膨大な時は、やっぱファイルを利用するのが一番なのか?
r+bモードで開いて、ファイルポインタを走査させて比較するみたいに・・

552 :デフォルトの名無しさん:03/04/04 12:43
>>551
いいえ、DBを使ってSQL発行した方が楽でしょう。
>>546の余談でやってるのって要するにインデックスだし...

553 :デフォルトの名無しさん:03/04/04 12:51
>>551 merge sort


554 :デフォルトの名無しさん:03/04/04 13:08
>>549
アクセスされるまでロードしない。
仮想メモリに似た方式。

555 :551:03/04/04 13:16
>>552>>553 エレガントな方法をありがとうございます。
変なことを書いちゃってスマソ。


556 :544:03/04/04 14:51
レス遅れてスマソ
色々な方法があるんですね。試してみます。ありがd

557 :デフォルトの名無しさん:03/04/04 16:28
>>550
__typeof__(__p) なんてのは聞いたことがないので
これがプリプロセッサで処理されるのか
コンパイラで処理されるのかは分からないが、
前者であったにしろ、それが展開される前に
トークンが結合されてることは確かだろう。
よって、直接 hoge_int(p) とか呼ぶのが吉。

C++ が使えるならデストラクタだの
オーバーロードだのテンプレートだの利用できてええんだがな...。

558 :550:03/04/04 16:55
>>557
分かりました、ありがとうございます。
gcc のヘッダで使っていたんですが、拡張機能だと思います。
スレ違い、スミマセンでした。

559 :デフォルトの名無しさん:03/04/04 16:58
>>550
__typeof__()が通常のマクロと同じように扱えるのなら、

#define dcat(a, b) a##b
#define cat(a, b)  dcat(a, b)
#define hoge(__p) cat(hoge_, __typeof__(__p)) (__p)


560 :550:03/04/04 17:30
>>559
ありがとうございます。でもダメでした。
cpp してみたら hoge___typeof__() に展開されていたので、
プリプロセッサではなくコンパイラで扱っているみたいです。


561 :デフォルトの名無しさん:03/04/05 00:09
memcpyについて教えてください。

int num = 0x11223344
char a[sizeof(int)];
memcpy(a,&num,sizeof(a));
といった例文なんですが、参考書によるとnumが16進数だから
11223344からは2行ずつ数値をコピーすると書いてます。
なんで2行で4バイトもコピーされちゃうんですか?
すみません、超初心者なもので

562 :デフォルトの名無しさん:03/04/05 00:15
2行ではなく2桁では?

563 :デフォルトの名無しさん:03/04/05 00:16
あ、そうでした・・・でもわかりません

564 :デフォルトの名無しさん:03/04/05 00:20
>>561
>なんで2桁で4バイトもコピーされちゃうんですか?
いいえ、1バイトです。

565 :デフォルトの名無しさん:03/04/05 00:20
void *memcpy(void *dest, const void *src, size_t n);
memcpy()はメモリ領域srcの先頭nバイトをメモリ領域destにコピーする。コピー元の領域とコピー先の領域
が重なってはならない。重なっている場合はmemmove(3)を使うこと。

memcpyと、2桁づつコピーされることは関係ない。
16進数では、2桁で0から255までの数値を表現できるが、
それがたまたま1バイト(8ビット)で表現できる数値の範囲と一致するだけ。

566 :デフォルトの名無しさん:03/04/05 00:29
参考書をそのまま写すと
numに与えられた数値の先頭の0xから16進数であることが
わかるので、11223344からは2桁ずつ「16*2=32(ビット)=4(
バイト)」、数値がコピーされます
とあるのですが、わたしが根本的に勘違いしているのかも

567 :デフォルトの名無しさん:03/04/05 00:33
16bits*2 ?
8bits *4=32bits=4bytes なら分かるが。

568 :デフォルトの名無しさん:03/04/05 00:35
燃やそう

569 :デフォルトの名無しさん:03/04/05 00:38
その本、タイトルに「C言語」って入ってない?

570 :デフォルトの名無しさん:03/04/05 00:39
>そうなんです。8bits *4=32bits=4bytes なら納得できるんですが
16*2=32はよくわかりません。char型に2桁ずついれるプログラム
なので、やっぱり8ビットずつですよね・・・たぶん

571 :デフォルトの名無しさん:03/04/05 00:41
>569はいってますよ

572 :デフォルトの名無しさん:03/04/05 00:51
 int num = 0x11223344;

int は最近の環境では4バイトなのが普通です。

 char a[sizeof(int)];

sizeof(int) は int のサイズを与えます。
つまり、4です。
char は1バイトですので、
ここでは1バイト×4=4バイトの領域を占める配列が作られます。

 memcpy(a, &num, sizeof(a));

これは、&num の指す領域から a の指す領域へ
sizeof(a) バイトだけコピーします。
a のサイズは4バイトなので、
要するに num から a へと情報をコピーします。


memcpy が内部でどういう方法でコピーしているか、
ということは特に規定されていません。
実質的に一般的に使われてるアルゴリズムはあるでしょうが、
昔の環境ならいざ知らず、int が4バイトの環境では
それを考慮しても2バイトずつというのはないですよね。
 char a[2 + sizeof(int)];
 memcpy(a + 2, &num, sizeof(int));
なら2バイトずつになるかもしれませんが...。


マジックナンバーを使わないようにしたり、
サイズが同じでも敢えてデスティネーションのサイズを指定したりと
結構行儀のいいことしてるのに、何でなんでしょ。

573 :デフォルトの名無しさん:03/04/05 01:09
>>571
某氏によればそれは悪本だそうです(’’

574 :デフォルトの名無しさん:03/04/05 01:14
このすれも悪スレか?

575 :デフォルトの名無しさん:03/04/05 01:26
>572わかりました。ていねいな解説本当にありがとうございます。
>573そう思います。初心者向けの本のはずなのに、関数の例文に
いろんなこと突っ込んで、もう最悪です。ほかの本やネット講座のわかりやすさ
にびっくりします

576 :デフォルトの名無しさん:03/04/05 03:51
ポインタのポインタって実務では具体的にどんな事に使われるのですか?

577 :デフォルトの名無しさん:03/04/05 03:53
mainの引数とかな。

578 :デフォルトの名無しさん:03/04/05 03:56
それからポインタのポインタは使用頻度は高いですか?

579 :デフォルトの名無しさん:03/04/05 05:12
ポインタ配列を利用するぐらいの頻度かな・・

580 :デフォルトの名無しさん:03/04/05 05:51
こんにちわ。この板は算数がとくいな人がおおいときいてきました。
10-10-10のこたえを教えてください。よろしくおねがいします。宿題なんです。
まじめです。

581 :デフォルトの名無しさん:03/04/05 05:55
>>580
ぬるぽ

582 :デフォルトの名無しさん:03/04/05 06:00
1+1=田
1-1=日
10-10-10=?
わかった!
マソコマークかな?

583 :デフォルトの名無しさん:03/04/05 06:23
ちょっと不安になったもので質問
memcpy とか memmove, memset などは
malloc などで取得した領域が物理的に連続でなくても
きちんと取得した領域について処理してくれるんですよね?

584 :デフォルトの名無しさん:03/04/05 06:26
>>583
そんなOSがこっそりやってる処理まで気にしたら禿げます。

585 :デフォルトの名無しさん:03/04/05 06:45
>>584 無性に不安になったので どうもです!


586 :デフォルトの名無しさん:03/04/05 06:49
mallocは連続した領域を確保できなかった場合、NULLが返ります。

587 :デフォルトの名無しさん:03/04/05 06:53
putc('\a',stdout);
とやってもピカピカ光だけで音が出ません。
何ででしょうかね?
バグ?

588 :デフォルトの名無しさん:03/04/05 07:14
端末の設定がビジュアルベルになってるのかと。

589 :デフォルトの名無しさん:03/04/05 07:17
>588 すげえ。

590 :デフォルトの名無しさん:03/04/05 07:45
液晶テレビ「AQUOS」が当たるチャンス
http://camellia16.fc2web.com/gpoint.html

591 :デフォルトの名無しさん:03/04/05 08:02
数列の100項目が知りたいんですけど
いったいどこがまちがってるかわかりません。

Help!

(初項 1)

#include<stdio.h>

intk;
intA[101];

A[1] = 1;

voidmain()
{

for( k = 2 ; k == 100 ; k++ )
{
A[k] = 2 * A[k-1] + 3;
}

printf("%d",A[100]);

}

592 :591:03/04/05 08:03
あ・・・
タブって2chじゃ認識されないのね・・・・・

593 :デフォルトの名無しさん:03/04/05 08:07
>>591
> for( k = 2 ; k == 100 ; k++ )

これじゃ一度もループしないね。

594 :デフォルトの名無しさん:03/04/05 08:26
k < 101

595 :591:03/04/05 09:11
>>593さん
>>594さん

ありがとう!

だいたい解決しました。

intをlongにかえても29項目までしか計算できませんね・・・・




596 :デフォルトの名無しさん:03/04/05 09:46
# cat a.h
static int a(void);

# cat a.c
#include "a.h"
static int a(void)
{
 return 'a';
}

# cat main.c
#include "a.h"
int main(void)
{
 printf("a→%c", a());
 return 0;
}

一体どこがマズイのですかね?

597 :デフォルトの名無しさん:03/04/05 09:51
なめてんのか・・・

598 :デフォルトの名無しさん:03/04/05 09:54
  ∧_∧
 ( ´∀`)< もうねアホかと馬鹿かと

599 :デフォルトの名無しさん:03/04/05 10:15
staticイラネ

600 :デフォルトの名無しさん:03/04/05 10:27
system() や popen() でプログラムをバックグラウンドで起動させた時、
そのプログラムのプロセスIDを得る方法はありますでしょうか?

601 :デフォルトの名無しさん:03/04/05 10:29
>>600
もしUNIXの話なら、↓で聞くことをすすめる
http://pc2.2ch.net/test/read.cgi/tech/992057422/

602 :デフォルトの名無しさん:03/04/05 10:36
>>601
そちらで聞いてみます。どうもありがとうございます。

603 :デフォルトの名無しさん:03/04/05 11:11


604 :デフォルトの名無しさん:03/04/05 11:32
>>595
 k < 101
は(マジックナンバーが気に食わないけど、せめて)
 k <= 100
の方が意味はわかりやすいかと。

> int k;
> int A[101];
>
> A[1] = 1;
>
この辺りも(せめて)main文の中に入れる、できれば等比級数を求める別に関数を作って
やればもっといいと思われです。

>intをlongにかえても29項目までしか計算できませんね・・・・
多倍長 でぐぐるか?


605 :標準入出力:03/04/05 11:34
>>1
こんなふざけたスレッド名ならここに質問書く気にならないじゃないか。

606 :デフォルトの名無しさん:03/04/05 12:03
質問しなくていいよ、カエレ

607 :デフォルトの名無しさん:03/04/05 12:13
>マジックナンバーが気に食わないけど
はぁ? 質問に k == 100 ってあったからマジックナンバー使っただけ。
まあ、k <= 100のほうが分かり易いのは確かだが。

608 :デフォルトの名無しさん:03/04/05 12:33
糞質問ばっかじゃねえかボケ!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1


609 :デフォルトの名無しさん:03/04/05 13:11
今に始まったことじゃないだろ!
  ( `Д´)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V・∀・)/
 (_フ彡        /  ←>>608

610 :580:03/04/05 16:20
誰かおしえて…

611 :デフォルトの名無しさん:03/04/05 17:35
>>596
ルート権限でそんな作業するな

612 :デフォルトの名無しさん:03/04/05 18:54
#include <stdio.h>

int main(void)
{
int i, ch;

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

for(i=0; i<10; i++)
printf("ぬるぽ ", i);

return(0);
}
実行すると"ぬるぽ "が3回しか表示されなくて困っています。
なぜなのか教えて下さい。

613 :デフォルトの名無しさん:03/04/05 19:04
答えは 10-10-10 == (10-10)-10
演算子の優先順位とか結合方向とかで調べるだ

614 :デフォルトの名無しさん:03/04/05 19:13
>>612
printfの引数が変だよ。

615 :デフォルトの名無しさん:03/04/05 19:20
>>614
それは本質的な問題ではない。変ではあるが、間違いではない。
>>612
普通に10回出力されるぞ。
取り敢えず
出力をリダイレクトしてみるとか
改行してみるとか
明示的にフラッシュしてみたらどうだ?

616 :デフォルトの名無しさん:03/04/06 00:25
>>612
>printf("ぬるぽ ", i);
",i"消したら?いらないよ。

617 :デフォルトの名無しさん:03/04/06 00:34
>>613
偉そうに間違ってないか?

618 :612:03/04/06 02:46
レスどうもです。,iは恥ずかしいミスです。
ファイルにリダイレクトすると正常に出力されていました。
また、前に改行を1つ入れると問題無くなります。
しかし、その改行はどこへ消えたのか気になるような…
フラッシュは効果が無い様です。

619 :612:03/04/06 02:48
環境はwin95, vc++5.0です。
XPで実行してみると問題ありませんでした。

620 :デフォルトの名無しさん:03/04/06 02:52
putcharは改行されないから、それに関係あるんじゃない?
詳しいことはわからないけど

621 :デフォルトの名無しさん:03/04/06 04:34
構造体のコピーなんですけど
struct hoge{
int a,b
};
main(){
struct hoge h1,h2;
h1.a=3;h1.b=4;

h2=h1;
}
みたいなのはコンパイル通りますか?
memcpyした方がいいんでしょうか?

622 :デフォルトの名無しさん:03/04/06 04:38
心配ない、同じ型なら一括代入(コピー)される。

623 :デフォルトの名無しさん:03/04/06 04:48
>>621
通りません。memcpyしたらスタックが破壊されます。

624 :デフォルトの名無しさん:03/04/06 04:51
ども代入使えると便利です
struct hoge{
int a,b;
};
main(){
struct hoge h1,h2;
h1.a=3;h1.b=4;

h2=h1;
if (h2==h1){
printf("hello");
}
}
比較演算子はさすがにダメみたいですた


625 :デフォルトの名無しさん:03/04/06 04:55
>>623

memcpy (&h1,&h2);がダメってこと?
やっぱり
代入はgcc では通ったけど

copyhoge(hoge dest, hoge src){
dest.a=src.a;
dest.b=src.b;
}
とするのが正しいんでしょうか

626 :デフォルトの名無しさん:03/04/06 04:58
memcpy (&h1,&h2,sizeof (struct hoge));
だった

627 :デフォルトの名無しさん:03/04/06 05:04
>>625 memcpyでも問題ない。
>>623死ね


628 :デフォルトの名無しさん:03/04/06 05:54
>>625
ふつー代入します。その方が見やすいでしょ?

629 :デフォルトの名無しさん:03/04/06 07:53
#include<stdio.h>
int main()
{printf("ぽ",printf("る",printf("ぬ")));}

630 :デフォルトの名無しさん:03/04/06 12:40
Cの勉強を初めて間もない者なのですが、
int ch;
while((ch=getchar())!=EOF)
putchar(ch);
って、while文から抜けるにはどうしたらよいのですが?
どこかでEOFは普通-1だと聞いたので、-1と入力してみても抜けられません。
ご教授お願いします。



631 :デフォルトの名無しさん:03/04/06 12:41
>>630
UNIXならCtrl+D、WindowsならCtrl+Zで抜けられるんじゃない?

632 :あぼーん:03/04/06 12:42
   ______________
 /:\.____\
 |: ̄\(∩´∀`) \  <先生!こんなのがありました!
 |:在  |: ̄ ̄ U ̄:|
http://saitama.gasuki.com/aomori/

633 :あぼーん:03/04/06 12:45
   ,.´ / Vヽヽ
    ! i iノノリ)) 〉
    i l l.´ヮ`ノリ <先生!こんなのがありました!
    l く/_只ヽ    
  | ̄ ̄ ̄ ̄ ̄|
http://muryou.gasuki.com/koumuin/

634 :630:03/04/06 12:52
>>631
ご回答ありがとうございます。
でもそれだと>>612さんみたいに、抜けたあとに何か出力したい場合は働きませんよね?
それがちゃんと出力されるように抜けたいのですが・・・。

635 :デフォルトの名無しさん:03/04/06 12:55
>>634
それはMS-DOSプロンプトのせいでしょ・・・・
main関数の最後にfflush(stdout);を追加しても表示されないならあきらめて。

636 :デフォルトの名無しさん:03/04/06 12:56
 アチョーー
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>629

637 :630:03/04/06 13:19
そうなのですか。
fflush(stdout);を追加してもダメでした。
あきらめるしかないですね。ありがとうございました。

638 :デフォルトの名無しさん:03/04/06 13:28
>抜けたあとに何か出力したい場合は働きませんよね?
働きませんよね?ってなにが?

639 :デフォルトの名無しさん:03/04/06 13:59
#include <stdio.h>
#include <stdlib.h>
void nu(void);
void ll(void);
void po(void);
int main()
{
atexit(po);
atexit(ll);
atexit(nu);
return 0;
}
void nu(){printf("ぬ");}
void ll(){printf("る");}
void po(){printf("ぽ\n");}


640 :デフォルトの名無しさん:03/04/06 14:07
>>617
間違っている所はどこですか?

641 :デフォルトの名無しさん:03/04/06 14:41
#include <stdio.h>
#define p (*printf)
#define i if
#define a &&
#define o ||
#define f (int(*)(int))
int main(){
i(p("ぬ","る")o p("ぬ")){i(p("る","の"),0){i(p("ポ")o p("ン")o p("酢","飲んだ"));
}}return (*(f)NULL)(p("もう駄目ぽ"+8));}

642 :デフォルトの名無しさん:03/04/06 14:42
getchar()に対して、キーボードなどから「-1」と入力しても
getchar()の戻り値は'-'にしかならない。
EOFを戻らせるためには、入力ストリームをクローズするしかない。
#unixならCtrl-D、DOS系ならCtrl-Zと言うのはクローズするためのキーコード。

で、何故か入力をクローズするとDOS系の場合出力バッファの更新がおかしくなるようだ。
なので対策としては、
・リダイレクトする。
・改行('\n')を挟んでみる。
辺りを試してみてはどうだろう。
それでだめなら、EOFを入力終了の判断に使用せず、
特定のキーコードの組み合わせを終了の判断に使うようにするなどの
仕様の見直しが必要だろう。

643 :デフォルトの名無しさん:03/04/06 14:45
gccでコンパイルしているのですが
参考書通りにソースを書いてもコンパイル時に
warning: no newline at end of fileという警告が出ます。
これは一体なぜなのでしょうか?


644 :630:03/04/06 15:02
みなさん色々なご意見ありがとうございます。
とりあえず自分で作ってみました。
#include <stdio.h>

int main(void){
int ch;
char p;

while(1){
if((p=(char)ch=getchar())!='c') putchar(ch);
else break;
}

printf("Hello World.\n");

return 0;
}
このコーティングってマズイでしょうか?

645 :デフォルトの名無しさん:03/04/06 15:03
>>643
Cの規格ではソースは改行で終わってなくてはならないから。
・・・だと思う。

646 :デフォルトの名無しさん:03/04/06 15:11
int main()
{
>>639::main()
abort();
}

647 :デフォルトの名無しさん:03/04/06 16:29
  ∧_∧
 ( ´∀`)< ぬるぽ

648 :デフォルトの名無しさん:03/04/06 17:36
長い文を出力させようとすると
最後のほうしか表示されないのはなんでですか?

649 :デフォルトの名無しさん:03/04/06 17:38
>>644
>if((p=(char)ch=getchar())!='c') putchar(ch);
なにがしたいんだかよくわからんのだが、
char pの意味ってあるわけ?

俺ならこう書くな。
while((ch =getchar()) != 'c')
putchar(ch);

ちなみに、関数がcharを返す時は、自動的にintに変換されるので、
型キャストする必要はないはずです。

650 :デフォルトの名無しさん:03/04/06 17:42
>>648
前の方のは流れていくから見えないんでしょ?
パイプすりゃよかんべ。

program | more
でよし。

651 :デフォルトの名無しさん:03/04/06 17:48
>長い文を出力させようとすると
>最後のほうしか表示されないのはなんでですか?
↑これ教えて下さい・・・。


652 :644:03/04/06 17:49
>>649
すみません。
勝手に''で囲まれた文字はchar型でないと代入出来ないと思っていたので。
自分がしたかったのはwhile文のgetcharからCtrl+zしないで抜けることです。
Hello World.はプログラムを終了せずに抜けたかを確認するためのデバッグライトとしてつけました。

653 :デフォルトの名無しさん:03/04/06 17:51
'c'ってCではint型じゃなかった?

654 :デフォルトの名無しさん:03/04/06 18:03
>>長い文を出力させようとすると
>>最後のほうしか表示されないのはなんでですか?
>↑これ教えて下さい・・・。
お願いします。。




655 :644:03/04/06 18:07
>>653
いや、確かchar型だったような・・・。
そう言われると断言は出来ませんが。

656 :デフォルトの名無しさん:03/04/06 18:07
printf("halo, %s", 2["ABC"]);
printf("halo, %s", "ABC"[2]);
どちらの書き方が一般的ですか?


657 :デフォルトの名無しさん:03/04/06 18:10
>>>長い文を出力させようとすると
>>>最後のほうしか表示されないのはなんでですか?
>>↑これ教えて下さい・・・。
>お願いします。。
無視しないでおせーてw

658 :デフォルトの名無しさん:03/04/06 18:18
>>657
DOS窓で
>実行したいファイル名 | more
ってやればよろし。

659 :デフォルトの名無しさん:03/04/06 18:21
>>656
あぼーん

660 :デフォルトの名無しさん:03/04/06 18:26
>>658
最後に「-- 続く --」
ってなるだけで全部は表示されないけど・・・。
これはしかたのないことなんですか??

661 :デフォルトの名無しさん:03/04/06 18:29
>>660
リターンを押せば続きが見れます。

662 :デフォルトの名無しさん:03/04/06 18:32
>>656
一般的なのはコレ。
printf("halo, C");

663 :デフォルトの名無しさん:03/04/06 18:33
>>660
全部を表示するだけの広い表示領域が無かった場合に、どうなれば満足なの?

664 :デフォルトの名無しさん:03/04/06 18:34
>>661
Thank You!

665 :デフォルトの名無しさん:03/04/06 18:36
>>663
全部見れれば満足。。

666 :デフォルトの名無しさん:03/04/06 18:41
>>656
printf("halo,""2[ABC]");
printf("halo, %s", "ABC");
printf("halo, %s", ABC);
printf("halo, %c", ABC[2]);
などではだめ?


667 :デフォルトの名無しさん:03/04/06 18:45
>>650 でずばり正解教えてもらってるのに無視しつつ粘着しまくる厨房度に感服

668 :デフォルトの名無しさん:03/04/06 18:51
>>667
禿どう

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


670 :デフォルトの名無しさん:03/04/06 19:40
永遠に縦に長いディスプレイを買う。

671 :デフォルトの名無しさん:03/04/06 20:01
>>643さん、解決した?

一番最後の行を改行すればいいんだよ。


main(){

/*hogehoge*/

}/*ここで改行*/


672 :デフォルトの名無しさん:03/04/06 20:02
>>670
あの後楽園とかにあるようなどんどん上がっていって一気に下がるやつ。
ああいうので見れるくらい長いのがいいね。
速すぎて読めないってのはナシで。

673 :643:03/04/06 20:28
>>671
わざわざ心配していただいてありがとうございます。
まだ解決してないんですよー。
プログラムによってその警告が出たり出なかったりなのですが。
改行ってprintf("\n");のことですよね?


674 :643:03/04/06 20:36
>>671
あ、解決しましたー。
ブロック抜けたあとも空行を1行作れってことだったんですね。
出力関係で改行するのかと思ってました。
どうもありがとうございました。

675 :デフォルトの名無しさん:03/04/06 21:54
このスレも落ちたもんだな・・・ボケが!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1


676 :デフォルトの名無しさん:03/04/06 23:01
http://pc2.2ch.net/test/read.cgi/tech/1048677915/l50
↑ このスレのように、テンプレに↓これが無いからいけないんだ。


あと、ぬるぽに投票してください。
http://pumpkinnet.to/ranking/words/

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

677 :デフォルトの名無しさん:03/04/07 06:14
long double って宣言するとどうなるの?
doubleとおなじ?



678 :デフォルトの名無しさん:03/04/07 07:06
>>677
違う環境もありうる。
double <= long double


679 :デフォルトの名無しさん:03/04/07 07:24
struct CharaData//0
{
char Name[17];int HP;int MP;//1
}
Chara[8];//2
0は構造体タグ。1はメンバー。2はなんと呼ぶのですか?ある本には構造体名と
書いてあったのですが。2がメンバーのほうが正しい気もしますが。

680 :デフォルトの名無しさん:03/04/07 07:26
インスタンス?

681 :デフォルトの名無しさん:03/04/07 07:36
なんとなく
2はメンバーではないだろう
struct SMAP
{
int inagaki;
};
たぶん
struct CharaData//0
{
char Name[17];int HP;int MP;//1
};
struct CharaData Chara[8];//2
となるところをいっぺんに書いたんじゃね?

682 :デフォルトの名無しさん:03/04/07 07:53
メンバーではないことは確か。
構造体名になるのはtypedef がある場合と思う。

683 :682:03/04/07 07:54
すまん、型名だった。

684 :デフォルトの名無しさん:03/04/07 08:28
空のソース突っ込むとエラー返すコンパイラがあるんだが、
そういうもんだっけ?

685 :684:03/04/07 09:32
言い忘れた。
リンクエラーじゃなくて、コンパイルエラーになる。
「ソースが空です」ってメッセージがでる。

686 :AGENT-GC:03/04/07 10:58
下らない質問しますが、
現在のMicrosoftの最新のC++コンパイラはなんっすか?

687 :デフォルトの名無しさん:03/04/07 11:01
>>686
スレ違い。ここはC言語のスレです。

688 :AGENT-GC:03/04/07 11:04
スレ違い。っつうかC言語とC++はちゃうんかYO!?

689 :デフォルトの名無しさん:03/04/07 11:13
C言語のスレだから、という事もあるけど、
MSの製品の事はMS関連のスレなり、MSのサイト覗けYo

690 :デフォルトの名無しさん:03/04/07 11:54
>>687
スレ違い。ここはぬるぽのスレです。

691 :デフォルトの名無しさん:03/04/07 12:46
すみません。どうしてもわからないので御願いします。

C言語にはクラスの概念がないのですが、どうしてですか?

692 :デフォルトの名無しさん:03/04/07 12:49
Cだからです。

693 :デフォルトの名無しさん:03/04/07 12:53
天然でその質問してるのだとしたら、びびるな。
なぁネタだろ?

694 :デフォルトの名無しさん:03/04/07 12:57
VBにもクラスがあるのに。
C言語はVB以下?

695 :デフォルトの名無しさん:03/04/07 13:00
Cにもちゃんとクリスはいます。クリスはコーダです。

696 :デフォルトの名無しさん:03/04/07 13:08
>>694
クラスの有無が言語の優劣だとでも?
まぁ、まともなプログラミングもできない奴なら言語の優劣を測りたがるのも無理ないか。

697 :デフォルトの名無しさん:03/04/07 13:09
ネタはマ板でな

698 :デフォルトの名無しさん:03/04/07 13:13
>>694
一応レスしとくと、C いうのはアセンブラの代替としてのシステム記述用に、
簡易・高速・軽量を極めて作られた言語。
その当時にはオブジェクト思考という概念などなく、そしてそのまま仕様が
ANSI でほぼ確定されたわけだ。
微調整した C99 なんてのもあるけど、骨格は昔の C と変わらない。

VB は Microsoft の独自言語で、ANSI 規格と違って拡張しようと思ったらすぐ
拡張できる状況にあったので、新技術を手当たり次第詰めこむ形で成長し、クラス
をも取り入れるに至ったわけだ。
・・・成功してるかどうかは知らないけどね。

クラスも導入したいが C の簡易・高速・軽量性も捨てがたい、と C を袂を分けて
派生したのが C++。

しかし、C++ がこれまたあまりにも節操のない新技術追加が為され、古い機能の廃止
もほとんどしなかったため、とんでもなくややこしい言語になってしまった。
これをもっと簡潔にしよう、というわけでできたのが Java や C#。

今は D も策定中。

699 :デフォルトの名無しさん:03/04/07 13:15
Objective-C は無視ですかそうですか。

700 :698:03/04/07 13:17
>>699
マジレスすると、燃焼系アミノ式。
つーか、漏れが知らないから解説できない。

701 :デフォルトの名無しさん:03/04/07 13:31
>>698
つーかD言語は現存するわけですが。
http://www.digitalmars.com/d/index.html

702 :698:03/04/07 13:39
>>701
・・・リリースされたんですか?

703 :デフォルトの名無しさん:03/04/07 13:55
>>702
リリースも何も、digitalmarsが勝手にやっている事だろう。
他のコンパイラメーカは見向きもしない。

704 :デフォルトの名無しさん:03/04/07 13:56
>>701
そこのページに言語機能の比較があるんだが、
http://www.digitalmars.com/d/comparison.html

Multiple Inheritance D:No C:No C++:Yes C#:No Java:No


・・・さすがは C++ だ・・・w

705 :デフォルトの名無しさん:03/04/07 13:57
char *str="hoge=12";
char conf[10], opt[20];

sscanf(str, "%s=%s\n", conf, opt);

で、configファイルを読みたいんですが、
この場合、conf[10]="hoge" で\0が語尾につかないわけですが、
適切な場所に\0をいれるにはどうすればいいですか?

706 :デフォルトの名無しさん:03/04/07 14:02
要するにD言語はC#/Javaのネイティブコード版。C++から多重継承と
マクロを取り除いた。それだけ。

707 :デフォルトの名無しさん:03/04/07 14:04
>>705
conf[4] = '\0';

708 :デフォルトの名無しさん:03/04/07 14:19
>>705
scanfの書式指定は空白文字を区切りと認識するので、
"%s=%s"で"hoge=12"を読むと最初の%sで文字列を全部読んでしまうのでは?

"%s = %s"とか"%[a-z]=%[0-9]"みたいにするか。

709 :デフォルトの名無しさん:03/04/07 14:22
何故"%[^=]=%d"じゃないんだろ。

710 :デフォルトの名無しさん:03/04/07 14:23
>>709
char opt[]だから。

711 :705:03/04/07 14:27
なるほど。
参考になりました。
>>708みたいな正規表現も使えるんですね。
ちょっと色々実験してみますね。

712 :デフォルトの名無しさん:03/04/07 14:33
正規表現…

713 :705:03/04/07 14:42
すんません。
今、K&R読み直しました。
別に正規表現というわけじゃないんすね。

質問しておいてなんですが、sscanfはなんか汎用性に欠けるっていうか、
perlみたいな文字列リテラルの扱い方法があるといいんだけど。


714 :デフォルトの名無しさん:03/04/07 14:46
Cにそんなもの要求するなよ…。

715 :デフォルトの名無しさん:03/04/07 14:49
perl使えC++で文字列クラス使え自前で便利で汎用的な文字列操作関数群を用意しろ禿

716 :705:03/04/07 15:01
はひ。。。
いま、新しいライブラリ作ってまふ・・・

717 :デフォルトの名無しさん:03/04/07 15:56
C言語で多態を実現したいんですけど、どういう風にすればいいでしょうか…。

718 :デフォルトの名無しさん:03/04/07 15:59
vtbl もどきを自前で実装する

719 :デフォルトの名無しさん:03/04/07 16:14
>>717
「貴様ら!オブジェクト指向を教えろ!! 」に帰れ

720 :デフォルトの名無しさん:03/04/07 18:16
lpInterface->lpVtbl->Release(lpInterface);

721 :デフォルトの名無しさん:03/04/07 21:37
  ∧_∧
 ( ´∀`)< ぬるぽ

722 :デフォルトの名無しさん:03/04/07 21:42
 ホワタァ!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>721


723 :デフォルトの名無しさん:03/04/07 21:55
  ∧_∧
 ( ´∀`)< ぬるぽに聞け!

724 :デフォルトの名無しさん:03/04/07 22:09
ハイィィイィ!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>723


725 :デフォルトの名無しさん:03/04/07 22:16
アターーーーーー!!!!!!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1


726 :デフォルトの名無しさん:03/04/07 22:38
>>717
X Toolkit Intrinsics 読め。

727 :デフォルトの名無しさん:03/04/07 23:02
  ∧_∧
 ( ´∀`)< アルセーヌ・ルポンに聞いてちょ


728 :デフォルトの名無しさん:03/04/07 23:14
windows2000 LSI C-86試食版(C-PAD使用) を使っています。

-----------------------------------------------------------
#include <stdio.h> /*stdio.hファイル宣言*/

int main()
{
short x1,x2; /*符号付きのshort*/
unsigned short y1,y2; /*符号無しのshort*/

x1=-32768;
x2=32767;
printf("x1=%d x2=%d \n",x1,x2);

y1=1;
y2=65535;
printf("y1=%d y2=%d \n",y1,y2);
}
-----------------------------------------------------------

x1= -32768 x2= 32767
y1= 0 y2= 65000
と表示させたいのですが。
x1= -32768 x2= 32767
y1= 1 y2= -1
となってしまいます。
short以外を使ったほうがいいのでしょうか、longを使用したら違う結果が出ました。

レベル低くて申し訳ありませんが、ヒントを頂ければと思います。

729 :デフォルトの名無しさん:03/04/07 23:22
>>728
printf("y1=%d y2=%d \n",y1-1,y2-535);

730 :デフォルトの名無しさん:03/04/07 23:22
>>728
int を使え。
-1になったのは、桁溢れしたため。

731 :729:03/04/07 23:25
LSI-Cの試食版のintは16bitだったか・・・
じゃあprintf("y1=%d y2=%u \n",y1-1,y2-535); これで。

732 :デフォルトの名無しさん:03/04/07 23:45
hashテーブルを返す関数で
int hash(char *key,int sz){
unsigned char *t=key;
int h;
for(h=0;*t;t++){
h=(128*h+*t)%sz;
}
return 0;
}
というものがあります。
この関数のunsigned char *t=keyというのは、
keyが格納する実引数のアドレスをtに渡しているということなのでしょうか?
また、tをポインタのポインタとして宣言して、この文を記述した場合は
仮引数であるkeyのアドレスを格納を格納出来るのでしょうか?
ご教授お願いします。


733 :732:03/04/07 23:47
すみません。途中で日本語がめちゃめちゃな箇所がありますが、勘弁してください。

734 :デフォルトの名無しさん:03/04/07 23:49
外部変数ってプログラム実行中にアドレス変化する?
内部変数は変わるよな・・・
性的変数は変わらない・・・
ということは外部変数も変わらないのか??

735 :デフォルトの名無しさん:03/04/07 23:51
>>732
keyの中身をtに入れているだけ。
別の変数に待避しているんだよ。

736 :デフォルトの名無しさん:03/04/07 23:54
性的変数ワラタ

737 :デフォルトの名無しさん:03/04/07 23:56
>>732
よく考えればわかるぞ。
keyは、アドレス。
*keyは、文字列。

t=key は、アドレスの代入。
つまり、*tは、文字列。

文字列はそれぞれコードを持っている。
例えば、
printf("%d \n", 'a');
とかやってごらん。

738 :デフォルトの名無しさん:03/04/08 00:01
>>734
スタックについて考えてみろ。
その前に、まずデバッグして実際に目で追って見ろ!

739 :728:03/04/08 00:02
>>730
6行目を
unsigned int y1,y2; /*符号無しのint*/
に変更しましたが、結果が一緒でした。

>>729
ありがとうございます、目指す形に出来ました。
y1= 0 y2= 65000 の65000は何故かshortを使うと65000になるみたいな書き方が本にされていたので書いたのですが。
汎用的に使えるようにしたかったためこうなりました。
%uは16bitの数字を表示する書式指定文字列と考えていいのでしょうか。
x1,x2は%dで上手くいっているのは何故でしょうか、あまり気にしなくていいのでしょうか。

-----------------------------------------------------------
#include <stdio.h> /*stdio.hファイル宣言*/

int main()
{
int x1,x2; /*符号付きのint*/
unsigned int y1,y2; /*符号無しのint*/

x1=-32768;
x2=32767;
printf("x1=%d x2=%d \n",x1,x2);

y1=0;
y2=65535;
printf("y1=%u y2=%u \n",y1,y2);
}
-----------------------------------------------------------
「よくわかる最新C言語の基本と仕組み」という本のP74あたりを参考にしているのですが、書いてある通りに書いてもちゃんと動いてないような気がします。
少し古いのでそのせいかもしれませんが・・。

740 :デフォルトの名無しさん:03/04/08 00:03
65000は考えられない・・・・

741 :デフォルトの名無しさん:03/04/08 00:05
その本もやはり「C言語」か。

742 :734:03/04/08 00:07
スタックって何の関係があるの?
形しか思い浮かばない・・・
そかデバッグっていう方法があったな!ペコリ~(o_ _)o))

743 :デフォルトの名無しさん:03/04/08 00:08
keyはアドレスでいいけど、
*keyを文字列だとは思わない方がいい

744 :デフォルトの名無しさん:03/04/08 00:09
>>734
自動変数はスタックに積まれる。
もしくは、レジスタに格納される。

745 :728:03/04/08 00:10
>>740
やはり誤植っぽいですね。
ありがとうございます、shortって変数なので切り捨てて短くするのかもなんて思っていました・・。

746 :デフォルトの名無しさん:03/04/08 00:10
>>739
> %uは16bitの数字を表示する書式指定文字列と考えていいのでしょうか。

違う。符号なし整数(unsigned int)として十進数字列に変換。

747 :734:03/04/08 00:16
なるほど〜!!
デバッグしてみたら外部変数のアドレス変わらなかったです。
使うときにスタックの↑から取り出すんだ・・・?
なら後に入れればいれるほど早い??ということになるっけ・・

というか・・・ブラウザが変ってなんやねん!

748 :デフォルトの名無しさん:03/04/08 00:17
o( 〃゜O゜〃)ゝオォーイ!!

749 :デフォルトの名無しさん:03/04/08 00:24
後からスタックに積むほうが早いとかじゃなくて、
後から積めば、その関数の仕事が終われば、後に入ったものから順におろされる。

まぁ、メモリを食わないって事になるのかのぉ。

750 :728:03/04/08 00:25
>>739 様、詳しくありがとうございます。 <(_ _)>

751 :ERROR:ブラウザ変ですよん。ってなに?:03/04/08 00:29
なるほど〜。
結構Cやってきたけど、あまり内部的なこと考えてなかったです。
考えないといけないですね〜

752 :732:03/04/08 00:37
>>737,743
なるほどー。
ってことは(128*h+*t)%szの*tってのは、
tに格納されている変数の先頭アドレスが指し示す文字をコードで表し、
それをハッシュテーブル生成に使っているということなのですよね?
それと、コードは本の裏とかに載ってるANSI(ASCll)コード表ってやつが規格なのでしょうか?

753 :728:03/04/08 01:43
windows2000 LSI C-86試食版(C-PAD使用) を使っています。
-----------------------------------------------
#include <stdio.h> /*stdio.hファイル宣言*/

int main()
{
char x;
char moji1='C';
char moji2='言';
char moji3='語';

x='a';
printf("変数xの中身は %c\n",x);
printf("変数moji1からmoji3を表示します %c",moji1);
printf("%c",moji2);
printf("%c",moji3);
}
-----------------------------------------------

-----------------------------------------------
変数xの中身は a
変数moji1からmoji3を表示します C言語
-----------------------------------------------
と表示されるはずが
-----------------------------------------------
変数xの中身は a
変数moji1からmoji3を表示します Cセ
-----------------------------------------------
と表示されています。
日本語(2バイト)には何か特別な事が必要なのでしょうか。

754 :ERROR:ブラウザ変ですよん。ってなに?:03/04/08 01:47
言 って漢字だから2Byteじゃん。charは1Byteなんだから
宣言の時は
char moji2[2]="言"
char moji3[2]="語"
ってするべきじゃん?

教え方へたくそでごめん

755 :デフォルトの名無しさん:03/04/08 01:47
質問です。
ポインタ型で宣言された変数などは必ずmallocとかを使って領域確保しなければいけないのでしょうか?
char *s="Hello World.";
という記述をよく見かけますが、領域確保しなくて大丈夫なのですか?
構造体へのポインタとかだとちゃんと領域確保している場合が多いような気がするのですが。

756 :ERROR:ブラウザ変ですよん。ってなに?:03/04/08 01:50
へんなもじがあらわれるのは、
"言"を'言'としたために
2Byteから1Byteに減ったためだよ。
2Byte文字をアスキーコードに直したら
0xff 0x12 (適当)のようなもんだから0x12が消えたんかな・・?

757 :デフォルトの名無しさん:03/04/08 01:53
>755
char *s="Hello World" は
char s[]="Hello World" みたいなもんで
勝手に領域確保してくれる...らしい。
だからプログラム中で領域解放してないでしょ・・・?

758 :755:03/04/08 01:58
>>757
確かにそうですね。
でも、そうしたら構造体の領域確保はやっぱり疑問が残りますよね。
ノード構造とかしてるプログラムは絶対領域確保してるし・・・。

759 :デフォルトの名無しさん:03/04/08 02:01
>>755
"Hello World"と、char *sは分けて考えれ。
・"Hello World"の文字列が確保される。
・*sは、"Hello World"のポインタとして初期化される。

760 :デフォルトの名無しさん:03/04/08 02:02
mallocを用いて領域確保(+α)する関数をつくりました
関数に領域を操作するためのポインタを渡しているのですが
初期化されていないポインタを渡すな ゴルァ!! と
怒られます
こういった場合
ポインタの宣言の時にNULLで初期化するのが普通なのでしょうか?

761 :728:03/04/08 02:06
-----------------------------------------------
#include <stdio.h> /*stdio.hファイル宣言*/
int main()
{
char x;
char moji1='C';
char moji2[2]="言";
char moji3[2]="語";

x='a';
printf("変数xの中身は %c\n",x);
printf("変数moji1からmoji3を表示します %c",moji1);
printf("%c",moji2);
printf("%c",moji3);
}
-----------------------------------------------
としてみましたが

-----------------------------------------------
変数xの中身は a
変数moji1からmoji3を表示します Cxv
-----------------------------------------------
と表示されます・・。
何がいけないのでしょうか。

762 :755:03/04/08 02:06
>>759
あ、なんとなく分かりました。
文字列リテラルの場合は"Hello World"だけで実体としてメモり確保されるんですね。
でも、構造体の場合はどうなのでしょうか?
理解力がなくて申し訳ないです。

763 :デフォルトの名無しさん:03/04/08 02:08
char *p;
char *my_malloc();
p=my_malloc();
ってすればいいのでは?
これなら怒られない。

764 :759:03/04/08 02:09
>>762
構造体でも同じだよ。

765 :デフォルトの名無しさん:03/04/08 02:09
%cは1Byte表示
2Byte以上なんで%sをつかいましょー
printf("%s",moji2);

766 :デフォルトの名無しさん:03/04/08 02:11
>char moji2[2]="言";
danger

767 :デフォルトの名無しさん:03/04/08 02:12
NULL文字入るんだったね
だからchar moji[3]="言"
というかchar moji[]="言"
がいいかも。コンパイラに任せちゃえ

768 :755:03/04/08 02:13
>>764
構造体でも実体があれば領域確保しないでよいのですか?
具体的にどういう場合に領域確保をするのかを説明して下さると嬉しいです。

769 :デフォルトの名無しさん:03/04/08 02:18
764のとおりに、charとかintとして考えればいいじゃん。
charとかintが集まったのが構造体だから。

770 :デフォルトの名無しさん:03/04/08 02:21
>>768
可変長配列がほしいときとか

771 :デフォルトの名無しさん:03/04/08 02:22
>>768
リンクリストとか何とかツリーとか、基礎的なアルゴリズムを
解説してある本を読むと、ああ、なるほどと思うかも。

772 :755:03/04/08 02:25
なるほど。
じゃあ必要に応じて拡張していきたい場合は領域確保というような理解でよいのでしょうか?
何度も何度もすみません。

773 :728:03/04/08 02:31
皆様ありがとうございます。
-----------------------------------------------
#include <stdio.h> /*stdio.hファイル宣言*/
int main()
{
char x;
char moji1='C';
char moji2[3]="言";
char moji3[3]="語";

x='a';
printf("変数xの中身は %c\n",x);
printf("変数moji1からmoji3を表示します %c",moji1);
printf("%s",moji2);
printf("%s",moji3);
}
-----------------------------------------------
で出来ました。
char moji2="言";
でも大丈夫ですね。
下手に指定しない方が失敗が少ないのでしょうか。
char moji2[3]="言";
の場合はnull分余計に一つ確保しておかないといけないんですね。

774 :デフォルトの名無しさん:03/04/08 02:32
>>772
そだね。

775 :755:03/04/08 02:35
>>774
そうですか。どうもありがとうございました。
まだまだ未熟なので、もう1回本を読みあさってみたいと思います。

776 :660:03/04/08 02:40
>>663
自分には思いつかないアイデアでした
勉強になります


777 :デフォルトの名無しさん:03/04/08 03:06
>>773
別にそれでもいいけどさ

char moji[N] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

だった場合、文字数(N)数えるの面倒じゃねえ?

778 :デフォルトの名無しさん:03/04/08 03:18
char moji2="言";

779 :728:03/04/08 03:41
>>777
一応下の方に
char moji2="言";
と書いてありますです。
char moji2[]="言";
のほうが無難なのでしょうか、あまり変わらないのかな・・。

たしかに
char moji2[3]="言";
は汎用性が無いので避けていた方が良さそうですね。


780 :デフォルトの名無しさん:03/04/08 06:04
wchar wc='ぬ';
で、ちゃんと2ハイ゙ト分保存さるるの?


781 :デフォルトの名無しさん:03/04/08 06:15
>char moji2="言";
大丈夫じゃありません。

782 :デフォルトの名無しさん:03/04/08 07:48
速度が問題にならない場合でも、
関数の引数や戻り値には構造体を使わない方がいいですか?
struct D func(struct D);
よりも、
struct *D func(struct *D);
の方がいいですか?


783 :デフォルトの名無しさん:03/04/08 08:04
>>780
wchar_t wc=L'ぬ';

784 :デフォルトの名無しさん:03/04/08 08:10
>>782
速度が問題にならないのであれば別にいいんじゃない?
でも、構造体は大抵ポインタで渡すのが普通。

戻り値に構造体のポインタを返すには
その構造体の実体はグローバル変数か、static変数である必要があるので普通はしない



785 :デフォルトの名無しさん:03/04/08 08:27
ワイド文字を使うには、まずはロカールを正しく設定しないといけないんじゃない?

786 :デフォルトの名無しさん:03/04/08 09:40
ロカール…

787 :デフォルトの名無しさん:03/04/08 09:42
http://dictionary.goo.ne.jp/search.php?MT=locale&kind=ej

ろかーう

788 :デフォルトの名無しさん:03/04/08 09:43
んでは、"locale"を“ろかーる”を呼ぶスレを立ててきまつ

789 :デフォルトの名無しさん:03/04/08 09:49
ローカレ

790 :デフォルトの名無しさん:03/04/08 10:06
(ろけーる + ろーかる) / 2

791 :デフォルトの名無しさん:03/04/08 10:38
>>790
いや、単にscaleをスカルと読む人なんだと思うぞ。

792 :デフォルトの名無しさん:03/04/08 10:56
>>782
適材適所。
昔のCと違って、構造体を値渡しすること自体に問題はない。
ポインタ渡しでは内容を破壊できるが、それが気になるならconstにすればいい。

793 :デフォルトの名無しさん:03/04/08 11:48
char str[3];
このstrには"0x123456"が入っています。

このstrに0x123456が入っていると
〜な処理をする。という風にするには
if ((strcmp(str, "0x123456") == 0) {
というにすればよろしいのでしょうか?
それとも、
if ((strcmp(str, "123456") == 0) {
とするものなのでしょうか?

何分初心者で分かり辛い質問かと思いますが
ご教授お願いします。

794 :デフォルトの名無しさん:03/04/08 11:52
>>793
>このstrには"0x123456"が入っています。
本当なら確保したメモリからはみ出てます。
よって両者とも間違い。

単に3バイトの整数を比較したいのなら1バイトずつ調べるか4バイトの整数型にキャストしてビット演算とかした方が良いと思う。



795 :デフォルトの名無しさん:03/04/08 11:53
>>790
ろーくわぁーる

796 :デフォルトの名無しさん:03/04/08 12:28
MS-DOSプロンプトがアクセサリに無いときは
どうしたら良いんでしょう?OSはMEです。


797 :デフォルトの名無しさん:03/04/08 12:30
>>796
ミ田 + R

command

798 :デフォルトの名無しさん:03/04/08 12:40
if (str[0] == 0x12 && str[1] == 0x34 && str[2] == 0x56) {
  〜な処理;
}

799 :デフォルトの名無しさん:03/04/08 12:42
>>798
エンディアンは大丈夫?

800 :デフォルトの名無しさん:03/04/08 12:45
>4バイトの整数型にキャストしてビット演算とかした方が良いと思う。
頭が腐っているのか?
・整数型に直接castすることはできない。
・4バイトアクセスが安全にできる保証はない。
・エンディアン依存になる。
なので、どう考えても1バイトずつ比較するべきだろう。

801 :デフォルトの名無しさん:03/04/08 12:46
>>800
エンディアン指摘されて逆ギレ?まぁ、なんにせよ>>800おめ。

802 :デフォルトの名無しさん:03/04/08 12:47
>>799
3バイトを比較する段階でエンディアン云々所の騒ぎではないと思う。

803 :デフォルトの名無しさん:03/04/08 12:47
>>800
嘘800?

804 :デフォルトの名無しさん:03/04/08 12:57
>>791
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&c2coff=1&q=%83%8D%83P%81%5B%83%8B+%83%8D%83J%81%5B%83%8B&lr=

805 :792:03/04/08 13:31
みなみなさまアリガdございます。
勉強になりますた。
色々ぐぐってみまっす。

806 :デフォルトの名無しさん:03/04/08 13:40
>>805
騙るな。

807 :806:03/04/08 13:40
>>806
騙るな。

808 :デフォルトの名無しさん:03/04/08 16:37
黙るな。

809 :デフォルトの名無しさん:03/04/08 16:46
>>1のおかげですっかりネタスレになってしまった伝統スレはここですか?

810 :デフォルトの名無しさん:03/04/08 19:01
どうせお前らすぐに
Cを捨てて(使いこなせてもいないくせに)
C++>>>C とか
Java>>>C とか言うんだろ?

811 :デフォルトの名無しさん:03/04/08 19:20
C>>>Ruby>>>>>>>>>>>C++>>>>>>>>>>>>>>>Java

812 :デフォルトの名無しさん:03/04/08 19:39
>>811
それだと parse error before `>' でした。

 int C,Ruby,Java;
 C>Ruby>C++>Java;

だとコンパイルできますた

813 :デフォルトの名無しさん:03/04/08 19:42
>>812
未定義

814 :デフォルトの名無しさん:03/04/08 19:52
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char ch0;
char ch1;
char ch2;
}INT;

int main(void)
{
int *p;
INT in;

p = malloc(sizeof(char*) * 3);
if ( p == NULL ) {
printf("Memory Error\n");
}
printf("%p\n", &in.ch0);
printf("%p\n", &in.ch1);
printf("%p\n", &in.ch2);
p[0] = (int)&in.ch0;
p[1] = (int)&in.ch1;
p[2] = (int)&in.ch2;

printf("%p\n", p[0]);
printf("%p\n", p[1]);
printf("%p\n", p[2]);
free(p);
return 0;
}

815 :デフォルトの名無しさん:03/04/08 19:53
突然なんだなんだ?

816 :デフォルトの名無しさん:03/04/08 19:54
Memory Errorって出力するだけかYO!

817 :デフォルトの名無しさん:03/04/08 19:55
mallocで確保した領域をアドレス変数の配列として扱いたいのですが、
確保した領域はアドレス変数じゃないみたいなんですけど、
うまいやり方ありますか。

818 :デフォルトの名無しさん:03/04/08 19:56
p[0] = (int)&in.ch0;
p[1] = (int)&in.ch1;
p[2] = (int)&in.ch2;

なんでint型にキャストしているんだ?int *の間違いか?

819 :デフォルトの名無しさん:03/04/08 19:57
アドレス変数へのポインタにキャストしてアドレス変数を代入しなさい

820 :818:03/04/08 19:57
それだとpはint *じゃまずいね。int **だね。
int **p;


821 :デフォルトの名無しさん:03/04/08 20:04
訂正
typedef struct {
int ch0;
int ch1;
int ch2;
}INT;

p[0] = &in.ch0;
p[1] = &in.ch1;
p[2] = &in.ch2;



(22) : warning C4047: '=' : 間接参照のレベルが 'int ' と 'int *' で異なっています。

確保した領域がアドレス変数として確保されればいいんだけど

たんなる変数として確保されているんだよね。

warningなしでスマートにいきたいんですが

822 :デフォルトの名無しさん:03/04/08 20:05
>>821
pがint *だからいけないの。int **にする。

823 :ホント初心者です:03/04/08 20:07
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
float a,b;
a=2.1;
b=3.2;
printf("%f",a%b);
return EXIT_SUCCESS;
}

これもともと整数型だったのをfloatに変えてみたら動かないんですけど、なぜですか?

824 :デフォルトの名無しさん:03/04/08 20:09
実数にモジュロ演算子って使えたっけ?

825 :814:03/04/08 20:12
ありがとう、わかった。
感謝、感謝。


826 :デフォルトの名無しさん:03/04/08 20:13
使えない

827 :823:03/04/08 20:13
>>824
深い意味は無く、
単純に実数だとモジュロ演算はできないって覚えておけばいいのですか?

828 :デフォルトの名無しさん:03/04/08 20:19
とりあえず、2.1%3.24はどういう結果に成るべきなんだ?

829 :823:03/04/08 20:21
>>828
う・・・確かにそうだったw
答えが出せない。
納得しました。アリガト

830 :デフォルトの名無しさん:03/04/08 20:29
int**
ってポインタのポインタだよね?
なんか意味あるの?

831 :デフォルトの名無しさん:03/04/08 20:42
答えが出せないって事は、fmod みたいのを知りたかったわけじゃないのか。

832 :デフォルトの名無しさん:03/04/08 20:47
intだとあまりおいしくないけど、構造体のポインタのポインタは、
構造体をポインタだけで高速にソートしたいときとかに普通に
使われるよ。

どうしてもっていうならポインタを更新したりするパターンで

int realloc_int_array(size_t sz, int **pp)
{
int *p = (int *)realloc(*pp, sizeof(int) * sz);
if (p != NULL) {
*pp = p;
return 0; /* success */
}
return -1; /* fail */
}


833 :デフォルトの名無しさん:03/04/08 21:51
>>814>>793か?
いずれにしても、問題をちゃんと整理してから質問しろよ。

834 :デフォルトの名無しさん:03/04/08 22:10
int */*****************************/*p;

835 :デフォルトの名無しさん:03/04/08 23:48
質問があります。
C言語でFANの回転数を取得するアプリを作りたいのですが、
そもそも、FANの回転数をアプリ側から知ることはできますか?
できるならばその方法をご教示ください。
マザーのI/Oのアドレスにアクセスするのでしょうか?
それともOS自体がFANの回転数の情報を保持してたりするのでしょうか?
よろしくお願いします。



836 :あぼーん:03/04/08 23:49
あぼーん

837 :デフォルトの名無しさん:03/04/08 23:57
FANにエンコーダつけて、カウンターボードのアドレスを読む
FANの回転数など正確にソフトで読むことは不可能だが、
モーター仕様を調べて電圧をADボードから読めば
ある程度の回転数は解るかも。
1分間で何周回ったか数えてC言語のソフトに入力するのがベストかな

838 :デフォルトの名無しさん:03/04/09 00:00
>>835
標準Cにはそんなものありません。

839 :見習中:03/04/09 00:01
すみません、教えてください。

行列(最大10×10)の固有値を
Cのプログラムで求めたいです。

世には色々な方法がありますが、
ソースが手に入って、精度も良いお勧めの方法を教えてください。
希望をいえば、matlabのeigと同じ精度(欲張ってすみません)

行列要素は、実数です。ただし、対称行列ではありません。
C言語によるアルゴリズム辞典
http://www.matsusaka-u.ac.jp/~okumura/algo/
では、全部実対称行列が対象だった。(泣)

よろしくお願いします。



840 :835:03/04/09 00:06
>>837
マザーには、温度情報が伝わっているものが多いと思うのですが、
それを読むことはできないでしょうか?
レジスタかなんかのアドレスさえ判ればなんとかなりそうなのですが。


841 :デフォルトの名無しさん:03/04/09 00:08
>>840
>>1 は見ましたか?

842 :デフォルトの名無しさん:03/04/09 00:09
int n;
printf("FANが回った数を入力してください: ");
if (scanf(" %d", &n) == 1)
printf("FANが%d回、回りました\n", n);


843 :デフォルトの名無しさん:03/04/09 00:15
>>839
CLAPACK

844 :見習中:03/04/09 00:16
>>843さん

CLAPACKってCのソースも手に入るのですか?

845 :デフォルトの名無しさん:03/04/09 00:20
>>844
http://www.mscom.or.jp/~tog/anna/
ここら当たりを見れ。

846 :835:03/04/09 00:21
>>841
すみません、恐らく
標準Cではできない事の質問は使用している開発環境のスレへGo!
で、指摘されていると思うのですが、
標準Cでできると思いますので。。
おそらくioctlかなんかで、レジスタアドレスにアクセスするのですが、
どなたか経験者がいないかと思ったまでです。

全然FANに関係ないのですが、
マルチスレッドプログラムで、共有する外部変数へアクセスするとき、
あるスレッドが外部変数へ書き込みする場合はロックするべきですが、
書き込みが行われない外部変数もロックするべきですか?
(つまり各スレッドから読み出ししか行われない外部変数)


847 :デフォルトの名無しさん:03/04/09 00:22
>>839
固有値だけでいいのなら
NUMERICAL RECIPES in C(日本語版アリ)に載ってるよ。
固有ベクトルについては載ってないけど。

848 :デフォルトの名無しさん:03/04/09 00:26
>>846=>>400

849 :デフォルトの名無しさん:03/04/09 00:29
>>840
FA用PCには温度管理できるマザーもありますが
温度から回転数を計算するためには
回転数とPC内温度と室内温度のグラフを作ってから
推論する必要がありそうですね。(膨大なサンプリングが必要)
どちらにしても、C言語だけでは無理なのです。



850 :デフォルトの名無しさん:03/04/09 00:30
>>843
CLAPACK って、FORTRAN の LAPACK を
f2c にかけただけだったような...。

851 :835:03/04/09 00:33
>>849
そうですか。回転数はやはりアプリからは取得できないっぽいですね。
ありがとうございました。


852 :見習中:03/04/09 00:34
>>845,847さん
助かります!

http://www.mscom.or.jp/~tog/anna/
みたら、3種類もありました。

一番小さい関数にします(笑)

853 :デフォルトの名無しさん:03/04/09 00:40
>>852
非対称行列に使えるのはQR法だけだから気をつけてね。

854 :デフォルトの名無しさん:03/04/09 00:43
>>850
その通り。
ソースをどう使うか書いてなかったから、一番手っ取り早い回答しただけ。

実際、俺も同じようにC言語で固有値求めて、DSPに移植した事有ったから、
CLAPACKじゃないソースは持ってんだけど。
さすがにコレは無断で出せないしなぁ

855 :デフォルトの名無しさん:03/04/09 00:45
>>854
そこをなんとかおねげぇしますだ。

856 :854:03/04/09 00:48
>>855
会社のマシンに入ってるから、今日は無理。
手元には持ってきとくから、他の方法で解決出来なかったら後日質問して。


857 :見習中:03/04/09 00:48
>>853
SPECIAL THANX!

そういうことですか!!
危ないところでした。

非対称行列の固有値を求める
場合の方が需要が多いと思うのだけど、
C言語によるアルゴリズム辞典 には対称行列に限定して
話を進めているんですよね。。。

テスト中に、どうしてもmatlabと値が一致しないので、
俺のバグだよなーって全部チェックしたよ。

858 :854:03/04/09 00:52
>>857
特に固有値の場合、MATLABと結果が一致する事にばかり目を向けないように。
実用上、問題無い場合もある。
最終段階まで演算してみて、グラフとかで確認すべし。

859 :デフォルトの名無しさん:03/04/09 00:52
>>857
そこのリンクにある「ダブルQR法」というのにかければ解けます。
お試しあれ。

860 :デフォルトの名無しさん:03/04/09 00:52
数学きちんと勉強しなかったから行列って何?って感じなんだよね。  ・・・・・(;_;)

861 :デフォルトの名無しさん:03/04/09 00:54
>>857
対称行列に限定したのは多分簡単なヤコビ法を使っているからだろう。
固有値を求めるのは単なる繰り返しによるものだから、キャッシュが
大きいCPUの方が速く求まる。

862 :見習中:03/04/09 01:32
>>858、859、861さんどうも有難うです。

固有値を任意に移動するルーチンを作ったので、
確認のために、固有値を表示させようという意図で
作っていたんです。だから、なるべく、matlabと同じでないと
説得力がないんですよ〜。

「ダブルQR法」ためしてみますね。

863 :見習中:03/04/09 01:46
しゅ、収束しない(泣)

A={ 5 8 3 6 ; 2 9 4 1 9 9 8 3 ; 6 2 1 5]

だめだぁ。

864 :854:03/04/09 01:53
>>862
MATLABと同じ結果が欲しいならCLAPACK。
CLAPACKは、LAPACK(FORTRANで作られた物)をC言語に変換したもの。
MATLABで採用されているのはLAPACK。
FORTRANから変換されたものなので、使い方に癖は有るけど。

865 :見習中:03/04/09 01:59
854さん、今clapack.tgzを落としています。
これってソースが参照できるのですか?

当方 ダイアルアップ。30分は掛かりそう。

866 :854:03/04/09 02:05
>>865
ソースは当然入っています。 大 量 に 。
がんばって、ぐぐって下さい。

867 :デフォルトの名無しさん:03/04/09 02:09
846 のような阿呆が出てこないように、もうちっとテンプレ練った方がいいな

868 :デフォルトの名無しさん:03/04/09 02:12
テンプレ変えれば解決すると思える誰かさんは双頭な低脳だな

869 :見習中:03/04/09 02:19
854さん ありがとう!

やってみます。
アドバイスありがとうです!

870 :デフォルトの名無しさん:03/04/09 02:21
>>867
846が阿呆ってのは禿同だが、上級者なら適切に理由述べて、適切に誘導すべし。
テンプレ見て理解出来るなら、このスレにゃ書かねーわな。

871 :かおりん祭り:03/04/09 02:42
http://saitama.gasuki.com/kaorin/
〜oノハヽo〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄                
  ( ^▽^) < こんなのがございまーす♪ 
= ⊂   )   \_______
= (__/"(__) トテテテ...

872 :あぼーん:03/04/09 02:42
 ( ・∀・)< こんなのみつけたっち♪
http://muryou.gasuki.com/moe/hankaku10.html
http://muryou.gasuki.com/moe/hankaku09.html
http://muryou.gasuki.com/moe/hankaku08.html
http://muryou.gasuki.com/moe/hankaku07.html
http://muryou.gasuki.com/moe/hankaku06.html
http://muryou.gasuki.com/moe/hankaku05.html
http://muryou.gasuki.com/moe/hankaku04.html
http://muryou.gasuki.com/moe/hankaku03.html
http://muryou.gasuki.com/moe/hankaku02.html
http://muryou.gasuki.com/moe/hankaku01.html

873 :デフォルトの名無しさん:03/04/09 02:49
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>871,872

874 :あぼーん:03/04/09 10:51
http://saitama.gasuki.com/kaorin/
  ( `Д´)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V・∀・)/
 (_フ彡        /  ←>>873

875 :あぼーん:03/04/09 11:13
あぼーん

876 :デフォルトの名無しさん:03/04/09 18:17
#define begin {
#define end }
ってやっておいて使うと、
ソースの見た目がスマートになっていいんだけど、
なんでみんな嫌うの?


877 :デフォルトの名無しさん:03/04/09 18:22
とりあえず生き埋めだな

878 :デフォルトの名無しさん:03/04/09 18:29
かえって煩わしいよ。
{}はシンプルにして直感的だしタイピングも楽だ。

879 :デフォルトの名無しさん:03/04/09 18:32
Cに慣れていればbegin-endブロックがスマートとは思えないんですが

880 :デフォルトの名無しさん:03/04/09 18:33
>>879
視野が狭いんですね。


881 :デフォルトの名無しさん:03/04/09 18:38
>>876

if(a) begin
...
}

if(a) {
...
end

でもコンパイルエラーが出ませんし、
エディタの自動字下げ機能が働かなくなりますが、何か?

882 :デフォルトの名無しさん:03/04/09 18:41
ちゅーか、C言語スレでナニイッテンノ?

883 :デフォルトの名無しさん:03/04/09 18:43
>>882
C言語ではないと?

884 :デフォルトの名無しさん:03/04/09 18:45
C++ のテンプレートライブラリみたいに、マクロガリガリで組んだ
ライブラリなんてないんだろうか。

まぁそれはおいといて、言語の文法を弄ってしまうようなマクロは
避けた方がいいんじゃないだろうか。

885 :デフォルトの名無しさん:03/04/09 18:57
#define unless(b) if(!(b))
#define until(b) while(!(b))

とかもだめ?

886 :デフォルトの名無しさん:03/04/09 18:58
駄目なものはダメ。
Perl等でもunlessなんか使うなよ。

887 :885:03/04/09 19:04
>>886
いつもそう言われるので俺は使っちゃいないが、
unless と until を使わない納得いく理由は未だに聞いたこと無い。
有名な言語で実装されてるのに、そこまで敬遠する理由は何?

888 :デフォルトの名無しさん:03/04/09 19:06
884に大体同意かな >文法云々
それにif/unless、while/untilなど、真・偽の動作が逆転した表記が混在するのは鬱陶しいと思う。

889 :885:03/04/09 19:17
確かに2通りの書き方の両方で同じ動作をするというのも
紛らわしいことがあるのかもしれないな。
if を選んだか、unless を選んだかに意味が持たせられるが、
意味を考えずに書いたりしたコードでは混乱する原因にもなるか。

オーケイ。これからも使わないよ。

890 :デフォルトの名無しさん:03/04/09 19:18
そんなコードのデバッグがまわってきたら、何が何でも探し出して
小一時間問い詰めたい。
エディタの色分けもきかんし(設定かえろというのか?)。

891 :884:03/04/09 19:20
>>887
俺は単純に、C 言語では同じ方法を実現するものは一つであるほうがイイと思う。
単純に可読性が落ちるし。初心者がポインタと配列を混同するのがイイ例だ。
単純に入門書が糞なものが多いというのもあるが。

Perl はうろ覚えなんだが、たしか if (a != b) も unless (a == b) も同じだよな?
  unless(a == b): a と b は等し…くない
  if (a != b): a と b は等しくない(キッパリ
…の方がイイと思うな。少なくとも俺はコードから脳内妄想に変換する時に楽だ。

Perl は一つの事をするのにいくつかの方法を差し出すのが言語の思想だろう。
unless や until があるのもそのせいかと。
文法の特徴にも言語の思想は出ると思うよ。begin/end にしても、実用性重視の
C がブレースを選択したのは至極当然だろう。だってタイプが面倒だもん。

…こんなもんでどうだい。俺の解釈だけど。

892 :884:03/04/09 19:21
あぁ、他人と喋りながら文章書いたから、なんだかタケーシな内容になってるな…。
適当に文法を修正して読んでくれ。

893 :デフォルトの名無しさん:03/04/09 19:23
perlだとif、unlessすらあまり使わず済ますんで
a == b and &foo;
a != b or &bar;
とか、もう書いてる時点でも何だか分からなくなる(w

894 :デフォルトの名無しさん:03/04/09 19:24
>>890
VCのユーザ定義キーワードは便利だぞ。

>>891
「ちょっと長めの条件の否定」を使う場合に、
ネストが減って見やすいというのはありますえ。
あと、unless(isdigit(ch)) とか。

895 :884:03/04/09 19:29
>>894
> VCのユーザ定義キーワードは便利だぞ。
む…こんな機能あったのか。ていうか、何のために使うんだ?まさか M$ の人間は
>>876 みたいな事を?…中の人も大変だな。

> 「ちょっと長めの条件の否定」を使う場合に、
むぅ、これは盲点。たしかにそうかもしれんが…否定演算子があるのに文法まで
いじる必要はあるんだろうか、とも思う。

まぁぶっちゃけ好みの問題だろ。

896 :デフォルトの名無しさん:03/04/09 19:44
size_tとかをキーワードにするんじゃねーの?

897 :デフォルトの名無しさん:03/04/09 19:45
マクロが華の LISPer はどういう意見を持ってるのか気になるところだ。

>>895
>ユーザ定義キーワード
特定のトークンに色を付けられる機能。
VC の exe と同じところに USERTYPE.DAT というファイルを作り、
その中にキーワードを列挙するだけという適当な実装方法が泣けるが、
まぁ設定のバックアップがとりやすいのは良い。
色はオプションで変えられる。

小文字の標準マクロ(offsetof など)とか、
WORD, size_t みたいな基本型みたいなもんでよく使うのに
typedef してるがために色のつかない型とか、
ちょっと強調したいのに色を付けるのに使える。
マクロのインテリセンスの無い VC6 での
スペルチェックにもなるかも。
一応普通のキーワードとは色を変えとくが吉。

898 :デフォルトの名無しさん:03/04/09 19:48
>>897
> VC の exe と同じところに USERTYPE.DAT というファイルを作り、

そのファイルをつくるためのフォームはないんですか?(泣

899 :デフォルトの名無しさん:03/04/09 19:50
.NET ではどうなったんだろうねぇ。
ユーザ定義キーワード。
使いやすくなってんのかな。
まだ試したこと無いや。

900 :デフォルトの名無しさん:03/04/09 19:51
おーできたできた。
msdev.exe(Developer Studio)と同じところに置くのね。


901 :デフォルトの名無しさん:03/04/09 19:55
http://kumada.homelinux.com:8080/tips/tip016.html
これか

902 :デフォルトの名無しさん:03/04/09 21:06
2次元配列を引数で渡す方法について教えてください

a()
{
char data[10][10];
 ・
 ・
 b(data);
 ・
 ・
}
b(char get[10][10])
{
 ・・
 x=get[2][2];
 ・・
}

これで合ってますか?
もし、合ってるとしたら、これは a側で作られたエリアを参照していることになるのでしょうか?
どうかごきょーじゅよろしくお願いします。

903 :デフォルトの名無しさん:03/04/09 21:07
>>902
あっている。


904 :デフォルトの名無しさん:03/04/09 21:44
>>903
ありがと

905 :デフォルトの名無しさん:03/04/09 21:46
>>903
トン

906 :デフォルトの名無しさん:03/04/09 23:36
>>903
アリガトウおおお

907 :デフォルトの名無しさん:03/04/10 00:22

 凸  凸
   凸
  凸
凹凹凹凹凹
>>903

908 :姫様をお助けしろ!:03/04/10 01:00
 □□■Ω■□□
 □□■■■□□
 □□□ □□□
 □□  □□□

   ゜
   ━


909 :デフォルトの名無しさん:03/04/10 04:37
CでマザーボードのBIOSの種類やバージョンを
調べることが出来るでしょうか?



910 :デフォルトの名無しさん:03/04/10 05:51
>>909
標準Cでは無理

911 :デフォルトの名無しさん:03/04/10 06:19
戻り値をchar*にしようとすると、「ローカル変数またはテンポラリのアドレスを返します。」
と警告が出ます。ポインタを返すにはどうすればいいですか。


912 :かおりん祭り:03/04/10 06:20
http://www.saitama.gasuki.com/kaorin/
       こんなのございま−す♪
       ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        〜oノハヽo〜
  ,.-''"¨ ̄●`' ‐(^▽^)
 (,,●i,,,i,,,,,,,,i,,,,●),,)⊂ )
    )  (    || |   
    ( ^▽^)  (_(__)
~~~~~  ̄ ̄ ~~~~~    ~~~~~

913 :あぼーん:03/04/10 06:20
 ( ・∀・)< こんなのみつけたっち♪ 
http://muryou.gasuki.com/hankaku/hankaku03.html
http://muryou.gasuki.com/hankaku/hankaku04.html
http://muryou.gasuki.com/hankaku/hankaku02.html
http://muryou.gasuki.com/hankaku/hankaku01.html
http://muryou.gasuki.com/hankaku/hankaku10.html
http://muryou.gasuki.com/hankaku/hankaku09.html
http://muryou.gasuki.com/hankaku/hankaku08.html
http://muryou.gasuki.com/hankaku/hankaku07.html
http://muryou.gasuki.com/hankaku/hankaku05.html
http://muryou.gasuki.com/hankaku/hankaku06.html

914 :あぼーん:03/04/10 06:20
あぼーん

915 :佐々木健介:03/04/10 06:20
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (5      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < こんなサイトを見つけた
|| | | |  \ ┃  ┃/    \  正直、スマンカッタ
| || | |    ̄         \_________
http://saitama.gasuki.com/kensuke/

916 :デフォルトの名無しさん:03/04/10 06:58
>>911
そのエラー内容だとなんか
自動変数のアドレスを返しているみたいだが?

917 :911:03/04/10 07:08
>>916 ?。コードはこんな感じなのですが。
char*CountTime(long miriByou)
{
long mB=miriByou;char s[11];int a;
sprintf(s,"%1d~%2d'%2d\"%2d",mB/3600000,mB%3600000/60000,mB%60000/1000,mB%1000/10);
for(a=0;a<=9;a++)if(s[a]==' ')s[a]='0';
return s;
}

918 :デフォルトの名無しさん:03/04/10 07:44
>>917
char s[11]の存在は関数CountTime内のみ保証する一時的なもの。
だからそんなオブジェクトへのポインタを戻り値にして
使用すべきではない、という警告

君はCの基礎学習が必要や

919 :29:03/04/10 07:44
>>917
とりあえず static char s[11];
としてみ。

sprintfの中の人も大変だな。


920 :デフォルトの名無しさん:03/04/10 08:00
>>917
普通はそのような目的ではchar*を戻り値にしない。

921 :デフォルトの名無しさん:03/04/10 08:23
#include <stdio.h>

void CountTime(long miriByou, char s[11]);

int main( void )
{
char str[11];
CountTime(1500, str);
printf("%s\n",str);
return 0;
}

void CountTime(long miriByou, char s[11])
{
long mB=miriByou;
int a;

sprintf(s,"%1d~%2d'%2d\"%2d",mB/3600000,mB%3600000/60000,mB%60000/1000,mB%1000/10);
for(a=0;a<=9;a++)if(s[a]==' ')s[a]='0';
}

バッファの先頭アドレスを渡す

922 :デフォルトの名無しさん:03/04/10 08:58
>>909
標準Cでも出来るけど、かえって面倒だよ。


923 :デフォルトの名無しさん:03/04/10 09:03
>>922
ソースキボン

924 :デフォルトの名無しさん:03/04/10 10:03
>>921
まあ同じことだが
void CountTime(long miriByou, char s[]); の方がいい。

925 :デフォルトの名無しさん:03/04/10 10:09
C99-IIはこういう仕様にしようよ。

#include <stdio.h>
int main()
begin
 (*printf)("hello, C99-II");
end

926 :デフォルトの名無しさん:03/04/10 10:11
またオマエか…

927 :デフォルトの名無しさん:03/04/10 10:11
>>925
要望スレじゃないYO、質問してください。

928 :デフォルトの名無しさん:03/04/10 10:13
マ板に「C99-IIを作ろう」スレでも立てて引きこもってろ

929 :デフォルトの名無しさん:03/04/10 10:21
ちょっと質問。
仮引数でのchar s[] は char *sと同じになるってことでいい?

930 :917:03/04/10 10:24
お答えありがとうございました。
>>918 警告が出ても思ったとおりの結果になることがあったので、
キャストとかをすれば大丈夫かと思ったのですが。
>>919 警告無しにできましたが、以下のソースでは失敗してしまいます。
>>920 どのような時に使うのですか。
>>921 参照渡しですよね。やはりこのやり方がいいのですかね。
一文で書けるといいかなと思ったのでポインタ返しを試みたのですが。

getch()+エスケープシーケンスですがコードです。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&res=59

931 :デフォルトの名無しさん:03/04/10 10:32
>>930
>どのような時に使うのですか

受け取ったバッファの特定のアドレスを教えたい時とか・・

932 :デフォルトの名無しさん:03/04/10 10:53
>>930
一文で書けると確かにいいだろうけど
他の関数が軒並み戻り値ではなく引数にchar*を受け取るのはなぜかを考えてくれ。

933 :デフォルトの名無しさん:03/04/10 10:58
> for(;pro<=36000000&&cnt<=60;)

while使えばいいのに。

934 :デフォルトの名無しさん:03/04/10 10:58
>>929
イイヨ、イイヨ〜

935 :デフォルトの名無しさん:03/04/10 11:03
規約でwhileとdoとswitchは禁止されていますです。

936 :デフォルトの名無しさん:03/04/10 11:07
>sprintf(s,"%1d~%2d'%2d\"%2d",mB/3600000,mB%3600000/60000,mB%60000/1000,mB%1000/10);
>for(a=0;a<=9;a++)if(s[a]==' ')s[a]='0';

sprintf(s, "%1d~%02d'%02d\"%02d", // 以下略

937 :デフォルトの名無しさん:03/04/10 11:15
>警告無しにできましたが、以下のソースでは失敗してしまいます。

どう失敗したかくらいは書こう。
で、staticの意味くらい調べよう。
staticで確保した領域はただ一つしかないから、二度目の呼び出しで
上書きされてしまう。そのソースの使い方なら、呼び出し元で
別領域にコピーしておく必要がある。

938 :デフォルトの名無しさん:03/04/10 11:33
一文で書けるぞ。
#include <stdio.h>

char *CountTime(long miriByou, char s[]);

int main(int argc, char **argv)
{
 char tmpBuf1[11], tmpBuf2[11];
 printf("%s, %s\n", CountTime(1000, tmpBuf1), countTime(1500, tmpBuf2));
 return 0;
}

char *CountTime(long miriByou, char s[])
{
 long mB=miriByou;

 sprintf(s,"%1d~%02d'%02d\"%02d",mB/3600000,mB%3600000/60000,mB%60000/1000,mB%1000/10);
 return s;
}


939 :デフォルトの名無しさん:03/04/10 11:44
>>938
char *CountTime(long miriByou, char s[])
これを
char *CountTime(long miriByou, char *s)
これにしても一緒?

940 :デフォルトの名無しさん:03/04/10 11:59
>>939
一緒。

941 :デフォルトの名無しさん:03/04/10 12:01
>>938
char *CountTime(long miriByou, char s[])
これを
char *CountTime(long int miriByou, char s[])
これにしても一緒?

942 :デフォルトの名無しさん:03/04/10 12:11
>>941
一緒。

さぁ次は何かなw

943 :917:03/04/10 12:33
お答えありがとうございました。
>>936 初めて知りました。
>>937 時間を表示する所に ・E と表示されました。
>>938 できますね。戻り値を使用するのは警告のと同じですが、
戻り値用のアドレスを指定しているので、しっかり動くのですか?

944 :デフォルトの名無しさん:03/04/10 14:14
>>943=917
関数の戻り値であるポインタは、呼び出し元が確保した配列を指している。
なので、問題がない。

最初のように、呼び出された関数内で定義された自動配列は
呼び出し元に戻るときに破棄されるので参照してはいけない。

staticな自動配列を使った場合は、その配列自体は保証されるが
呼出しごとに破壊されるので呼び出し元での取り扱いに注意が必要。

945 :909:03/04/10 14:47
>>922
詳細キボン

946 :デフォルトの名無しさん:03/04/10 14:52
ぬるぽって0なの?

947 :デフォルトの名無しさん:03/04/10 15:01
 ヒミツヲバラシタナ…!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>946

948 :917:03/04/10 15:53
>>944 分かりました。ありがとうございました。

949 :デフォルトの名無しさん:03/04/10 16:38
呼出しごとに破壊されるってどうゆうこと?

950 :デフォルトの名無しさん:03/04/10 17:02
>>949
呼び出すたびに別の値で上書きされるってこと

951 :デフォルトの名無しさん:03/04/10 18:37
double形の一桁目を抜き出すにはどうしたらいいですか?

int形だったら
int i = 2147483647;
return i % 10;
って出来たのですが

double d = 4294967295;
return d % 10;
だと(error C2296: '%' : 不正な左オペランドです。)がでるんです。

952 :デフォルトの名無しさん:03/04/10 18:39
intにキャストして10で割った余りを得る。

953 :デフォルトの名無しさん:03/04/10 18:39
0.001234 の一桁目を同扱えばよいのか言ってみろゴラア


954 :デフォルトの名無しさん:03/04/10 18:43
>>953
ぬるぽ

955 :デフォルトの名無しさん:03/04/10 18:44
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>953-954

956 :デフォルトの名無しさん:03/04/10 18:50
新スレ
http://pc2.2ch.net/test/read.cgi/tech/1049968153/

957 :デフォルトの名無しさん:03/04/10 18:58
キサマトイウヤシハ
 ショウコリモナク
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>956


958 :デフォルトの名無しさん:03/04/10 19:00
>>952
ダメ。桁数が大きい場合にワヤになる。
fmod で余りを求めてから fabs で絶対値をとって
floor で小数点以下を切り捨てる。

959 :952:03/04/10 19:03
>>958
やっぱりつっこまれたよー ウワァァァン`Д´)/

960 :デフォルトの名無しさん:03/04/10 20:02
>>958
long doubleだった場合もそれでいけますか?
floor とか fmod って double を引数に取るみたいなので
long double ではまた別の方法を使う必要があります?

961 :デフォルトの名無しさん:03/04/10 20:05
http://www2.leverage.jp/start/

962 :デフォルトの名無しさん:03/04/10 20:23
なぁ
doubleとかって表現できる桁数<<<<有効桁数だから
一桁目が何の意味も成さないことが多いんじゃないのか?

963 :デフォルトの名無しさん:03/04/10 20:25
逆やねん
表現できる桁数>>>>有効桁数

964 :デフォルトの名無しさん:03/04/10 20:46
チョト違った
表現できる桁数>>><有効桁数

965 :デフォルトの名無しさん:03/04/10 22:56
2つの6000行9列のファイルを読み込み、それぞれの要素を
割って比を求め、その値をファイルに出力させるプログラムを
書いてみて&教えてください。

966 :デフォルトの名無しさん:03/04/10 23:15
>>965
日本語を正しく書いて下さい。

967 :デフォルトの名無しさん:03/04/10 23:16
>>965
いやでつ

968 :デフォルトの名無しさん:03/04/10 23:24
scanf や fgets くらいは知っているのだろうか

969 :デフォルトの名無しさん:03/04/10 23:26
>>968
それ知ってたら、あとはループと、小学校レベルの四則演算だけだと思うが・・・

970 :デフォルトの名無しさん:03/04/10 23:36
データ数だけ配列準備?

971 :デフォルトの名無しさん:03/04/11 00:00
エクセル使ったら一発じゃねーの?

972 :デフォルトの名無しさん:03/04/11 00:51
データを配列に読み込ませるところで苦労してるんじゃない?



973 :デフォルトの名無しさん:03/04/11 00:55
そんな単純計算はCを使わないほうが簡単そうだ。
今回は awk とか perl がうさげ?

974 :デフォルトの名無しさん:03/04/11 01:01
データ区切りについて何も書いてないけど、965は問題理解してないってこと?


975 :デフォルトの名無しさん:03/04/11 01:02
965大人気だな。

976 :デフォルトの名無しさん:03/04/11 08:37
for文で挫折しました。
countってナンだよ!!

977 :デフォルトの名無しさん:03/04/11 08:40
C言語って覚えてナンの意味があるんですか?
なんかCは終わりとか言われてますけど。

978 :デフォルトの名無しさん:03/04/11 08:43
覚えられなかった人が言うんだよ。

979 :デフォルトの名無しさん:03/04/11 08:51
>>977
習得の意義が思いつかないなら
別に覚えなくてもいいんじゃないか
とりあえず間に合ってるってことだろう

意味があると思うことをやればいい

980 :デフォルトの名無しさん:03/04/11 14:03
10列でスペース区切りのデータファイルを配列に
読み込ませたいのですが、どうすればいいの?

981 :デフォルトの名無しさん:03/04/11 15:04
>>980
fgetsで1行読みこむ
strtok(デリミターをスペース), atoi やらで
strtokがNULLを返すまで配列に格納する

これを10回繰り返す。


982 :デフォルトの名無しさん:03/04/11 16:10
>>977にとって意味があろうと無かろうと
知ったこっちゃないが、必要になったら習得すれば?


983 :デフォルトの名無しさん:03/04/11 18:24
ちょっとスレ違いですが
最近割り算のコストが、結構高いことに気付きました。
そこで もし double a,b; で

for(〜) a=a/b;

と言うのを

b=1/b;
for(〜) a=a*b;

としたらいいじゃんと思ったのですが
問題はありますかね?

984 :デフォルトの名無しさん:03/04/11 18:26
>>983
実測して速度と結果を見るしかないんじゃない?

985 :デフォルトの名無しさん:03/04/11 18:39
vc++ std でためしたら大体6〜7割の時間で処理しています
stdなのであまり最適化されないせいかも知れませんが。

でもやはり扱う数の大小によっては結果の精度に問題が生じますね。
そんだけです。なんか変な質問ですみませんでした。


986 :デフォルトの名無しさん:03/04/11 18:44
川 ‘〜‘)||<ぬるぬる

川〃‘〜‘)||<ぽっ

987 :デフォルトの名無しさん:03/04/11 19:18
速度稼ぐのなら、浮動小数点使わずにすます方向も考えてみる

988 :デフォルトの名無しさん:03/04/11 19:29
>>983
コンパイラによってはそういう最適化をすることもある。

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



990 :デフォルトの名無しさん:03/04/11 20:10
>>980
マルチ氏ねマルチ氏ねマルチ氏ね

991 :デフォルトの名無しさん:03/04/11 21:49

  ∧_∧    char* pbuf = (char*)malloc(SIZEOF_MY_ARRAY);
 ( ´∀`)< if(pbuf == ぬるぽ) {


  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ < return だめぽ;
 (_フ彡        /

}



992 :デフォルトの名無しさん:03/04/11 23:05


993 :デフォルトの名無しさん:03/04/11 23:05
る  

994 :デフォルトの名無しさん:03/04/11 23:06
やめた  

995 :デフォルトの名無しさん:03/04/11 23:06


    ノノノハヽ
   (●´ー`)ハハヽゞ デヘヘ
    ノ つ⊂(´▽`∬∬、
   (__´⌒)⌒)、,,, U)つ


996 :デフォルトの名無しさん:03/04/11 23:08
┌┬┬┬┬┬┬┬┐
├┼┼┼┼┼┼┼┤
├┼┼●┼┼┼┼┤ ●〜┐
├┼┼┼┼┼┼┼┤    ●
├●┼┼┼┼○┼┤ ○〜〜〜〜○
├┼┼┼┼●┼┼┤
├┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┤
└┴┴┴┴┴┴┴┘ ○
●○           |
   ○┐   ●〜〜┘
     ●


997 :デフォルトの名無しさん:03/04/11 23:08
  | M ヽ
  |从 リ)〉
  |゚ ヮ゚ノ| キタ…
  ⊂)} i !
  |_/ヽ|」
  |' 

998 :デフォルトの名無しさん:03/04/11 23:09
         ┏      ┓ ぬる
      >>1    ∧_∧ / ̄ ̄ ̄ ̄
        ̄ ̄\ ( ´∀`)
          (    )   ぽ
          | | | / ̄ ̄ ̄ ̄ ̄
          (__)_)
        ┗      ┛

999 :デフォルトの名無しさん:03/04/11 23:10
999

1000 :デフォルトの名無しさん:03/04/11 23:10
1000?

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

217 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)