C言語なら俺に聞け( ..
[2ch|▼Menu]
39:デフォルトの名無しさん
08/09/16 15:11:49
>>38
そう作られているから。memcpy()と言う関数の振りをしているが、
その実体がCの関数かどうかは実装依存。
逆に言えば、コンパイラベンダが鎬を削るポイントでもある。

40:デフォルトの名無しさん
08/09/16 15:21:04
>>38
CPUは一発でデータをブロック転送できるから。
古いCPUだとブロック転送するよりスタックにいれられるだけいれて並べてくほうが速かったりすることもあるけど、
いまどきブロック転送の方が速い。

41:デフォルトの名無しさん
08/09/16 20:04:20
>>24
1) lpMetSect->lpSharedInfo->lAvailableCount--;
2) lpMetSect->lpSharedInfo->lAvailableCount -= 1;
3) lpMetSect->lpSharedInfo->lAvailableCount = lpMetSect->lpSharedInfo->lAvailableCount - 1;

(3)は左辺と右辺を見比べて、同じ変数かどうか確認しなきゃならないだろ。

42:デフォルトの名無しさん
08/09/16 20:06:54
>>39
実装依存って言えばそうかもしれんけど、それ言ったら、標準関数全部そうだろ。

43:デフォルトの名無しさん
08/09/16 20:07:53
>>41
そんなもん間違うようなやつはそもそも1個でも間違うよ

44:デフォルトの名無しさん
08/09/16 20:16:24
>>43
読みやすさだよ。

45:デフォルトの名無しさん
08/09/16 23:49:55
私が今作っている関数popは通常intを返すが、返すべき値が見つからない場合NULLを返します
しかし私の使っているコンパイラではNULL == 0は真になるので
popの返り値がNULLであるか、0であるかを判別することができません
エラーチェックのために新たに変数を設ける以外の解決法があったらぜひご教示願います
それにしてもなぜこのコンパイラにはNULL == 0が真になるなどという奇怪な仕様が採用されたのでしょうか?
まったくもって不愉快で、理解に苦しむ仕様です


46:デフォルトの名無しさん
08/09/16 23:56:54
引数の一つを書き換える関数にして
戻り値のほうはリターンコードだけにすれば?

47:デフォルトの名無しさん
08/09/17 00:12:44
>>45
NULLはポインタが無効である(いかなるオブジェクトも指示していない)ことを表すために使うものだから、
そもそもintなどポインタ型と併用することを考慮されていない。コンパイルエラーになる処理系も存在する。

一般的には、>>46のいうように引数で返すか、
あるいは本来の戻り値と可否の2つを構造体でまとめるなどという方法を取るしかない。
よその言語では、こういう用途にもNULL(あるいはそれに相当するもの)が使えるものあるんだけどね。

48:デフォルトの名無しさん
08/09/17 00:21:42
>>45 NULL == 0が偽になったら、それこそ大変

49:デフォルトの名無しさん
08/09/17 00:24:43
可変個引数の引数リストってメモリ上にならんではいってるの?

ポインタで移動できるみたいだから、そう思うんだけど。

50:デフォルトの名無しさん
08/09/17 00:28:32
void push(int val);
int pop(void);

のほうが体裁がいいんだろうな。
それだったら
int isempty(void); /* 0以外: スタックが空 0:スタックが空でない */
を作ってそれでチェックするというのもあり。

if (!isempty()) {
 val = pop();
}

51:デフォルトの名無しさん
08/09/17 00:33:36
>>49
そうでないといけないという決まりはないが、そうなっていることが多い。
というかそういうやつでは、可変個でないやつも同じように置かれていて、
その配置を応用しているという作りになっている。

52:デフォルトの名無しさん
08/09/17 00:37:32
あるいはintより大きな整数を返す関数にして、エラー値としてintに収まらない数を返す

53:デフォルトの名無しさん
08/09/17 01:12:51
>>52 ???


54:デフォルトの名無しさん
08/09/17 01:22:17
>>53
「charより大きな整数を返す関数にして、エラー値としてcharに収まらない数を返す」

と同じ。

55:デフォルトの名無しさん
08/09/17 01:28:16
charはint幅でやりとりするけど、それと一緒にしてはいかんよ

56:デフォルトの名無しさん
08/09/17 01:30:43
>>46でいいだろ。


57:デフォルトの名無しさん
08/09/17 01:33:11
>>41
4) --lpMetSect->lpSharedInfo->lAvailableCount;
これも追加しておいてくれお

58:デフォルトの名無しさん
08/09/17 02:19:06
lpMetSect->lpSharedInfo->lAvailableCount += -1;


59:デフォルトの名無しさん
08/09/17 03:00:01
>>50
スタックを構造体で定義して、push, pop, isemptyの引数として渡したいな。
同時に複数のスタックが使えるようになるし。

60:デフォルトの名無しさん
08/09/17 10:47:38
そこまでいくと、C++でやれって感じになるが。

61:デフォルトの名無しさん
08/09/17 11:46:15
すみません、どうしても解らなくて><
#include <stdio.h>

int main(void)
{
int c;

while(c = (getchar() != EOF)) {
printf("%d", c);
}
printf("%d", c);
}
このプログラムで、EOF以外を打つと「11」と、「1」二回繰り返されているようなんですが、
なんで繰り替えすのですかね?
c = (getchar() != EOF)←のような条件自体初めての形ですので動きが解らなくて><

62:デフォルトの名無しさん
08/09/17 11:52:33
改行文字だな

63:デフォルトの名無しさん
08/09/17 11:53:08
while(c = (getchar() != EOF)) { 
printf("ループ内 %d", c); 
} 
printf("ループ外 %d", c); 
} 



64:デフォルトの名無しさん
08/09/17 11:54:20
ごめん違うわ
cに名に入れたか考えてみろ

65:デフォルトの名無しさん
08/09/17 11:58:48
>>63
いや、ループは抜け出してないから、ループ内のprinftが繰り返されてるみたいなんですよ。

>>64
getcharでaを入力したとしたら、cには1が入りますよね?
ってことは1を一回表示したら、またgetcharで入力待ちになると思うんですが……二回繰り返した後に入力待ちになってるんです><

66:デフォルトの名無しさん
08/09/17 12:04:22
自分で書いた汚いCコードを読み込んで綺麗に整形して出力してくれるアプリってないの?


67:デフォルトの名無しさん
08/09/17 12:06:26
>>65
改行も1文字分

68:デフォルトの名無しさん
08/09/17 12:12:08
インデント+α程度の整形ツールならあるけど

69:デフォルトの名無しさん
08/09/17 12:13:37
>>62
>>65
なるほど、やっと理解できました!
でもgetcharは一文字入力なんですよね?
なんというか根本が解ってない感じだw

んー、まずaでループに入り1を出力、次に改行文字でループに入り1を出力……ってことですかね?

70:デフォルトの名無しさん
08/09/17 13:02:33
まぁ、そんなとこだね。
「次に改行文字でループに入り」というよりは、
「次に得るのが改行文字なのでループから脱出せずに」だけれど。

71:デフォルトの名無しさん
08/09/17 13:13:40
入力が行単位でバッファリングされてるとわかりにくいかも
打った文字はEnterを打つまで入力されない
Enterを打つと打った文字+改行が入力されて、getcharでそれを1文字ずつ取り出せる

72:デフォルトの名無しさん
08/09/17 13:25:23
'a'と'\n'の値が両方1ってどんな処理系だよ

73:デフォルトの名無しさん
08/09/17 13:27:06
>>72


74:デフォルトの名無しさん
08/09/17 13:28:03
>>72

75:デフォルトの名無しさん
08/09/17 13:29:13
>>72
ちゃんと元のコード読め


76:デフォルトの名無しさん
08/09/17 13:29:21
畜生見間違えた
そこに括弧ついてんのかよ!

77:デフォルトの名無しさん
08/09/17 13:34:13
……カッコ悪い

78:デフォルトの名無しさん
08/09/17 13:34:39
>>76
ドンマイ!

79:デフォルトの名無しさん
08/09/18 01:15:59
>>8
微妙に意味がちがう。
a = 1;
b = ++a;
b = a++;
では結果がちがう。


func ( a++, a+1, ++a)
のとき、funcの引数がどんなになるか挙動不明。



80:デフォルトの名無しさん
08/09/18 01:23:59
>>79
単体で使った場合を聞いてたのにいまさらなにをw

しかも後半は引数がどうなるか不明つーより未定義動作じゃねーか

81:デフォルトの名無しさん
08/09/18 07:41:19
バイナリファイルを直接数字に変換する方法はどうすればいいのでしょうか?
rubyではunpack("s*")を使うのはしってるんですけど。

82:デフォルトの名無しさん
08/09/18 07:52:47
>>81
rubyのunpackは変換が目的だから、Cの場合はその必要が無い。
例えば、(今ぐぐって見つけた)リファレンスマニュアルの例だとこうなる。
unsigned char foo[] = {1, 2, 0376, 0375};
unsigned short * bar = (unsigned short *) foo;
printf("%u, %u\n", bar[0], bar[1]);

83:デフォルトの名無しさん
08/09/18 14:27:04
URLリンク(www.vipper.org)

すみません、なんでこのプログラムはEOFを入力すれば終了するのでしょうか?><


84:デフォルトの名無しさん
08/09/18 14:35:22
>>83
!= EOF が偽になって getline が 0 を返すから > 0 が偽になって main を抜けるのでは?

85:デフォルトの名無しさん
08/09/18 17:36:33
Cでは0xffのように16進数を使用できますが、2進数は使えますか?

86:デフォルトの名無しさん
08/09/18 17:44:22
>>85
使えません

87:デフォルトの名無しさん
08/09/18 17:46:51
あたかも2進数記述しているようにみえるマクロならある

88:デフォルトの名無しさん
08/09/18 17:48:51
>>86-87
ありがとうございました

89:デフォルトの名無しさん
08/09/18 19:09:38
インクルードについて教えてください。

あるサンプルソースコードを入手して、
~~.slnを実行して、デバッグしたら動きました。

ファイル入出力をしようと思って、
メイン関数が書いてある.cファイルで#include <iostream>とすると、
1>c:\program files\microsoft visual studio 8\vc\include\cstdio(35) : error C2059: 構文エラー : ':'
1>c:\program files\microsoft visual studio 8\vc\include\cstdio(36) : error C2143: 構文エラー : '{' が ':' の前にありません。
が大量に出てきてしまいました。

インクルードしただけです。
何がいけなかったのでしょうか?

90:デフォルトの名無しさん
08/09/18 19:11:44
すみません、上のものです。
C++なので、スレ違いでした。
去ります。すみません。

91:デフォルトの名無しさん
08/09/18 20:27:31
.cファイルで#include <iostream>

そりゃダメだろ

92:デフォルトの名無しさん
08/09/19 02:10:43
C++でコンパイルするオプション付けりゃいいんじゃん。

93:デフォルトの名無しさん
08/09/19 16:34:15
C言語のコンパイラで質問があります。
WindowsXPで、BCC DevelopperとBorland C++ Compiler 5.5.1を使用しています。
プロジェクトを一つ作り、そのプロジェクト内で複数のC言語ファイルを作成しているのですが、
一番最初に作成したC言語のファイルしか、コンパイル、メイク、実行ができません。
どうすれば他のC言語のファイルをコンパイル、メイク、実行する事が出来るのでしょうか?

94:デフォルトの名無しさん
08/09/19 16:36:57
bcc32 main.c foo.c bar.c


95:デフォルトの名無しさん
08/09/19 16:42:27
それを言うならメイクじゃなくてリンクでは

96:デフォルトの名無しさん
08/09/19 16:45:33
それはC言語の問題でもコンパイラの問題でもなくて、
BCC Developerのプロジェクト管理機能の使い方に関する問題だよな?

97:デフォルトの名無しさん
08/09/19 16:49:56
質問です。


int a

if(a)



この場合のifの条件aとはどういう意味ですか?


98:デフォルトの名無しさん
08/09/19 16:51:44
if(a!=0)
とまったく同じ意味

99:デフォルトの名無しさん
08/09/19 17:02:27
えー

100:デフォルトの名無しさん
08/09/19 17:06:59
えーといわれても
何が不満なんだ?

101:97
08/09/19 17:16:27
>>98
ありがとうございました。

>>99は僕じゃないですが、ダジャレですかね?w

102:デフォルトの名無しさん
08/09/19 20:22:19
スレが凍りついた

103:デフォルトの名無しさん
08/09/19 23:18:37
ローグってCで書かれてるの?

104:デフォルトの名無しさん
08/09/19 23:25:16
>>103
だよ。

105:デフォルトの名無しさん
08/09/19 23:32:50
そうか、じゃあ俺もCで書いてみようかな

106:デフォルトの名無しさん
08/09/20 02:58:12
int i;
char buf="cjd";
for(i=0;i<buf[i];i++);
上記for文の境界条件はマイナーですか?

107:デフォルトの名無しさん
08/09/20 03:07:02
何をしないのかわからない>>106

108:デフォルトの名無しさん
08/09/20 03:08:48
>>106
文字列の長さだけまわしてるつもりなら、それはおかしいだろ。


109:デフォルトの名無しさん
08/09/20 03:19:36
(・∀・)ニヤニヤ

110:デフォルトの名無しさん
08/09/20 03:40:45
仮に
char *buf = "cjd";
だったしても、そんな書き方するヤツはプログラムやめたほうがいい。

111:デフォルトの名無しさん
08/09/20 04:37:52
Windowsの場合
#ifdef WIN32

#endif
で処理を分岐するんですが
MACは、何を指定すればいいでしょうか?

112:デフォルトの名無しさん
08/09/20 04:45:32
MACの場合に#defineされるシンボル
決まってなければ、自由に

113:デフォルトの名無しさん
08/09/20 05:01:24
知らないなら黙っててください
邪魔です

114:デフォルトの名無しさん
08/09/20 05:02:35
>>113>>111?

115:デフォルトの名無しさん
08/09/20 05:03:10
禿同

116:デフォルトの名無しさん
08/09/20 05:05:27
>>112みたいな無知ほど書き込みたがる
知らないならすっこんでろっつーの

117:デフォルトの名無しさん
08/09/20 05:12:30
知らないならすっこんでろつうか知っている人いないと思う
そんなもの決め事だから

118:デフォルトの名無しさん
08/09/20 05:13:41
cc -D MACOS 。。。。。

#ifdef MACOS

#endif

119:デフォルトの名無しさん
08/09/20 09:49:46
>>110
K&R、つまりC言語を設計した人にC言語を辞めろと申すか?

120:デフォルトの名無しさん
08/09/20 10:09:36
>>119
いいから見直せ

121:デフォルトの名無しさん
08/09/20 10:09:56
俺には i<buf[i] の意味がわからん。
比較することにどんな意味があるんだ?

122:デフォルトの名無しさん
08/09/20 10:19:19
bufに入っている文字の
(使用中の処理系での)コードとそれが何文字目かということに、
何らかの関係があるんだよ。

123:デフォルトの名無しさん
08/09/20 11:00:24
>>120
すまん早とちりしてた
>>106のおかしなプログラムに対するレスだったのか

124:デフォルトの名無しさん
08/09/20 12:34:34
printf("foo")
は関数で末尾にセミコロンが付くと正確には文になるのですか?
そういった場合printf文というのが適切なのですか?

125:デフォルトの名無しさん
08/09/20 12:39:44
>>124
その通り
正確には単文

Pascalはセミコロンが文と文の区切りに使われるが
C言語はセミコロンは文の終了を表す

126:デフォルトの名無しさん
08/09/20 15:46:13
×単文
○式文

pascal 厨が下手に口を出すからボロが出る
文と複合文はあっても単文はない

127:デフォルトの名無しさん
08/09/20 15:47:28
>>126
馬鹿ですか?
{}で囲まれたのが複文
そうでないのが単文

128:デフォルトの名無しさん
08/09/20 16:00:49
つっこみをよく読めアフォ

129:デフォルトの名無しさん
08/09/20 16:03:28
126==128
お前がアフォ

130:デフォルトの名無しさん
08/09/20 16:05:35
(・∀・)クスクス

131:デフォルトの名無しさん
08/09/20 16:20:47
もう一度言う、「単」文という用語はCにはない

132:デフォルトの名無しさん
08/09/20 16:25:48
C言語 単文 複文 の検索結果 約 619 件中 1 - 30 件目 (0.26 秒)
C言語 式文 複合文 の検索結果 約 162 件中 1 - 30 件目 (0.32 秒)


133:デフォルトの名無しさん
08/09/20 16:27:27
お前らくだらん事でもめないでISO/IEC9899:1999もしくは
JIS X3010:2003の何ページのどこここにあります、ってやってくれ

無駄にスレを伸ばすな

134:デフォルトの名無しさん
08/09/20 16:39:25
>>132
おまえの情報源はそんなものか
お里が知れるな

135:デフォルトの名無しさん
08/09/20 16:41:20
(・∀・)クスクス

136:デフォルトの名無しさん
08/09/20 16:43:07
>>134
お前も煽ってばかりいないで>>133のアドバイスのように
ちゃんと答えてやれ

答えられないと証拠も無いのに、と言われるだけだぞ

137:デフォルトの名無しさん
08/09/20 16:52:58
>>136==125

俺だって、ちゃんと「式文」と教えただろうが無礼者め

138:デフォルトの名無しさん
08/09/20 16:55:05
>>137
それは証拠にならない
規格書のどこに書いてあるか言ってみろ

139:デフォルトの名無しさん
08/09/20 16:56:52
その答えがわかったら、バグが減るの?

140:デフォルトの名無しさん
08/09/20 16:57:54
話を逸らすな馬鹿者

141:デフォルトの名無しさん
08/09/20 16:58:45
(・∀・)クスクス

142:デフォルトの名無しさん
08/09/20 16:59:30
a = 10, b = 10 , c++;
ってあったら文はa = 10, b = 10 , c++でおk?

143:デフォルトの名無しさん
08/09/20 17:00:46
式≠文

式文って式+セミコロンのこと?

144:デフォルトの名無しさん
08/09/20 17:06:44
>>142
厳密には「;」まで含む。

145:デフォルトの名無しさん
08/09/20 17:08:15
規格書にも書いてない造語を勝手に作って人を欺いている
バカがいると聞いて来ますた

146:デフォルトの名無しさん
08/09/20 17:09:50
↑ずっと見てたくせに(プ

147:デフォルトの名無しさん
08/09/20 17:12:07
メモリリークって自プログラムの範囲外まで影響が及ぶことはありますか?
メモリリークとは、各プログラムが確保した領域が開放されないままプログラムが終了したときに、
確保されたまま他のプログラムが使えない領域が残ることだと思い込んでいたのですが違うのでしょうか?

例えば、以下のようにしても勝手に開放されているように思えるのですが、
これはOSが面倒みてくれている、という解釈で正しいですか?

char *c;
c = (char *)malloc(1000000);
return 0; //開放せずに終了

char *c;
c = (char *)malloc(1000000);
c[1000000] = 'a'; //ここで異常終了

148:デフォルトの名無しさん
08/09/20 17:14:55
>>147
OSによる
これこそ環境依存

149:デフォルトの名無しさん
08/09/20 17:15:32
>>147
大丈夫OSが何とかしてくれる
と思ってて問題ないよ

150:デフォルトの名無しさん
08/09/20 17:17:37
>メモリリークって自プログラムの範囲外まで影響が及ぶことはありますか?
はい
>メモリリークとは、各プログラムが確保した領域が開放されないままプログラムが終了したときに、
>確保されたまま他のプログラムが使えない領域が残ることだと思い込んでいたのですが違うのでしょうか?
いいえ
>これはOSが面倒みてくれている、という解釈で正しいですか?
OSによる

151:デフォルトの名無しさん
08/09/20 17:18:00
おいおいmutex持ったまま強制終了したらOSは面倒見てくれないぞ

152:デフォルトの名無しさん
08/09/20 17:20:34
>メモリリークとは、各プログラムが確保した領域が開放されないままプログラムが終了したときに、
>確保されたまま他のプログラムが使えない領域が残ることだと思い込んでいたのですが違うのでしょうか?
はい

153:デフォルトの名無しさん
08/09/20 17:37:53
このスレは池沼の集まりか

154:デフォルトの名無しさん
08/09/20 17:38:58
そう、お前がその筆頭。

155:デフォルトの名無しさん
08/09/20 17:39:48
winとかunix系とかDOSとか、そのあたりのOSはfree()し忘れても、プロセスが終了するとメモリは開放される。

156:デフォルトの名無しさん
08/09/20 17:45:07
INT 21H, AH=31H


157:デフォルトの名無しさん
08/09/20 18:00:35
まとめると
>>147
にある状況はwindows、unix系ではOSが何とかしてくれる
でもプログラムのやりようによっては解放されないこともある(mutexとかなんとかで)
ってことで大丈夫でしょうか

158:デフォルトの名無しさん
08/09/20 18:00:56
>>148-152,155
ありがとうございます。
常駐するようなもの以外は、それほど過敏になることはないんですかね。

159:デフォルトの名無しさん
08/09/20 18:01:13
>>151
そいつはメモリリークというより、リソースリークじゃね?


閑話休題

mallocだと大体のPC環境だと後始末してくれる処理系になってるけど、
共有メモリとかでリークすると、プロセスが終了しても残ったりすることもある。

160:デフォルトの名無しさん
08/09/20 18:32:09
>>138
Cに規格書はない
もしかして規格票って言いたかったのか?

161:デフォルトの名無しさん
08/09/20 18:34:53
↑馬鹿

162:デフォルトの名無しさん
08/09/20 18:44:55
JISでは規格票が正式名称だが、ISOやANSIのものは規格書と呼んでなんら問題ない。

163:デフォルトの名無しさん
08/09/20 19:04:02
ISO や ANSI のどこに「規格書」って書いてあるんだよ? 確か英語だったはずだが・・・

164:デフォルトの名無しさん
08/09/20 19:08:24
>>121
某エディタのソースコードにあって、
文字列か文字の幅を返す関数にそのfor文が使われていました。

165:デフォルトの名無しさん
08/09/20 19:11:06
>>163
単なる和訳だろ。

166:デフォルトの名無しさん
08/09/20 19:20:07
>>164
それはない

167:デフォルトの名無しさん
08/09/20 19:20:40
>>163
英語のものを日本語で呼んではいけないのか。

168:デフォルトの名無しさん
08/09/20 19:26:05
>>167
非標準の邦訳が通じなければ説明責任はそれを言った者にある
ただし別にわかってやれたからって、こちらに利益はないので説明がしたければどうぞご勝手に

169:デフォルトの名無しさん
08/09/20 19:27:28
>>166
ちなみに
DWORD CMyEdit::GetTextWidth(LPCWSTR pstr)
{
DWORD i,n;
for(i=n=0;i<pstr[i];i++){
if(IsMB(pstr + i))n+=2;
else n++;
}
return n;
}

170:デフォルトの名無しさん
08/09/20 19:28:14
以上、馬鹿の負け惜しみでした。

171:デフォルトの名無しさん
08/09/20 19:31:09
「単」純バカのな

172:デフォルトの名無しさん
08/09/20 19:32:22
>>169
「文字列か文字の幅を返す関数」ではないな

173:デフォルトの名無しさん
08/09/20 19:37:49
>>169
i<pstr[i] じゃなくて pstr[i] になってない?

174:デフォルトの名無しさん
08/09/20 19:40:40
>>169
誰がそんな糞コード撒き散らしてんだよ

175:デフォルトの名無しさん
08/09/20 19:42:26
>>173
なってないです。
MyEditというソフトウェアのソースコードMyEditUtil.cppの493行目を見ればわかります。

176:デフォルトの名無しさん
08/09/20 19:45:03
URLリンク(sky_dreamer.at.infoseek.co.jp)

177:デフォルトの名無しさん
08/09/20 19:52:37
>>169
バグだろ。

178:デフォルトの名無しさん
08/09/20 19:54:48
ライセンスがとてつもない矛盾を呈してる件

179:デフォルトの名無しさん
08/09/20 20:06:01
エディタをダウソしてreadmeを見たら、MyEdit.chm の『使用許諾契約書』を読めって書いてあったけど、MyEdit.chmが入ってないな。
フルパッケージのほうもダウソしてみたら、やっぱりMyEdit.chm の『使用許諾契約書』を読めって書いてあるけど、使用許諾のページが開けないじゃん。

180:デフォルトの名無しさん
08/09/20 20:10:37


181:デフォルトの名無しさん
08/09/20 20:14:56
>>179
アーカイブ壊れてるんじゃね?

myedit_v116_full.zip md5 c514e4e1d2680235ab7c61bfd8aed4c0
MyEdit.chm md5 1b63a35be248d1921acd47eb06d50ef1

182:デフォルトの名無しさん
08/09/20 20:20:24
>>181
MyEdit.chmを入れ忘れてるだけじゃね?

183:デフォルトの名無しさん
08/09/20 20:21:25
>>169
grepしたら、そのメソッド、どこからも呼ばれてないみたいだから、やっぱバグだろな。

184:デフォルトの名無しさん
08/09/20 20:28:32
そろそろスレ違いな気もしてきたが。

>>183
エディタのexeの方のソースってどっかにあった?
dllの方だけだと、多分クラスライブラリのインターフェースな関数だと思うから、
grepしても引っかからないのは当たり前っぽいんだけど。

あのエディタでGetTextWidth()が使われてないかはどうにも。

が、まぁ、バグっぽいってのは同意だがねー。

185:デフォルトの名無しさん
08/09/20 20:31:52
MyMemo.exeが本体みたい。

186:デフォルトの名無しさん
08/09/20 20:34:00
>>184
本体のソースは入ってなかったのか。
そんなまじめに見てなかったよ。

187:デフォルトの名無しさん
08/09/20 23:06:15
Cでtemplate的なものをなんとか実装できませんかね?


188:デフォルトの名無しさん
08/09/20 23:07:11
>>187
マクロ

CSTL あたりを参考にどうぞ

189:デフォルトの名無しさん
08/09/21 00:30:45
すいません、初歩的な質問なのですが・・・

割り算で

7÷32 の余りは 0 なんですか?

てっきり、余りは7だと思ってたんですが・・・

190:デフォルトの名無しさん
08/09/21 00:32:32
7 / 32
7 % 32

191:デフォルトの名無しさん
08/09/21 00:33:37
商が0で余りが7

192:デフォルトの名無しさん
08/09/21 00:33:41
>>189
数学の質問(算数か?)は専門スレへ

C言語の話なら割り算とあまりの計算のそれぞれで使う記号は何を使ってます?

193:デフォルトの名無しさん
08/09/21 00:50:01
C言語です。
商なら7/32、余りなら7%32 でプログラム組んでみたのですが…

プログラム
printf("i=%dのとき i/32=%d…%d 余り/8=%d \n",i,i/32,i%32,(i%32)/8);

これを出力すると
i=0のとき i/32=0…0 余り/8=0
i=1のとき i/32=0…1 余り/8=0
i=2のとき i/32=0…2 余り/8=0
i=3のとき i/32=0…3 余り/8=0
i=4のとき i/32=0…4 余り/8=0
i=5のとき i/32=0…5 余り/8=0
i=6のとき i/32=0…6 余り/8=0
i=7のとき i/32=0…7 余り/8=0
i=8のとき i/32=0…8 余り/8=1
i=9のとき i/32=0…9 余り/8=1
i=10のとき i/32=0…10 余り/8=1
i=11のとき i/32=0…11 余り/8=1
i=12のとき i/32=0…12 余り/8=1
i=13のとき i/32=0…13 余り/8=1
i=14のとき i/32=0…14 余り/8=1
i=15のとき i/32=0…15 余り/8=1
i=16のとき i/32=0…16 余り/8=2


となってしまいまして…(@@;

194:デフォルトの名無しさん
08/09/21 00:54:51
>>193
算数はできますか?

195:デフォルトの名無しさん
08/09/21 00:59:20
>>193
それでいいと思うけど、どうなるはずだと思ってるの?

196:デフォルトの名無しさん
08/09/21 01:00:10
算数についての認識が間違ってるなw

その処理はなんらおかしくないw

197:デフォルトの名無しさん
08/09/21 01:06:25
余りを8で割って何がしたいんだ?

198:193
08/09/21 01:08:43
ごめんなさい!あほでした
普通に合っていますね…。

商/ と 余% をごっちゃにしていました…。
しょうもない質問してすいませんでした!(*_*)

199:デフォルトの名無しさん
08/09/21 01:15:51
夜は冷えるね。

200:デフォルトの名無しさん
08/09/21 01:30:36
>>198
配列までしか知らない俺も心配になる。大丈夫か?

201:デフォルトの名無しさん
08/09/21 01:35:20
あんまり馬鹿にするなよ
勘違いなんて誰にでもあるだろう

202:デフォルトの名無しさん
08/09/21 01:38:04
>>201
まーな

|| と && と != を使った条件判断ってあまりくまないから
時々テストの段階で思ったように動かなくて後で気がつくってことはある。

203:デフォルトの名無しさん
08/09/21 01:43:56
条件分岐で&&はかなり使うな
&と混ぜて使うと少し紛らわしい

204:デフォルトの名無しさん
08/09/21 03:06:33
C++!C++!C++!C++ぅぅうううわぁああああああああああああああああああああああん!!!
あぁああああ…ああ…あっあっー!あぁああああああ!!!C++C++C++ぅううぁわぁああああ!!!
あぁクンカクンカ!クンカクンカ!スーハースーハー!スーハースーハー!いい匂いだなぁ…くんくん
んはぁっ!C++様の桃色ブロンドの髪をクンカクンカしたいお!クンカクンカ!あぁあ!!
間違えた!モフモフしたいお!モフモフ!モフモフ!髪髪モフモフ!カリカリモフモフ…きゅんきゅんきゅい!!
小説12巻のC++様かわいかったよぅ!!あぁぁああ…あああ…あっあぁああああ!!ふぁぁあああんんっ!!
アニメ2期放送されて良かったねC++様!あぁあああああ!かわいい!C++様!かわいい!あっああぁああ!
コミック2巻も発売されて嬉し…いやぁああああああ!!!にゃああああああああん!!ぎゃああああああああ!!
ぐあああああああああああ!!!コミックなんて現実じゃない!!!!あ…小説もアニメもよく考えたら…
C + + 様 は 現実 じ ゃ な い?にゃあああああああああああああん!!うぁああああああああああ!!
そんなぁああああああ!!いやぁぁぁあああああああああ!!はぁああああああん!!ベル研究所ぉおおおお!!
この!ちきしょー!やめてやる!!現実なんかやめ…て…え!?見…てる?表紙絵のC++様が僕を見てる?
表紙絵のC++様が僕を見てるぞ!C++様が僕を見てるぞ!挿絵のC++様が僕を見てるぞ!!
アニメのC++様が僕に話しかけてるぞ!!!よかった…世の中まだまだ捨てたモンじゃないんだねっ!
いやっほぉおおおおおおお!!!僕にはC++様がいる!!やったよケティ!!ひとりでできるもん!!!
あ、コミックのC++様ああああああああああああああん!!いやぁあああああああああああああああ!!!!
あっあんああっああんあAda様ぁあ!!シ、Cー!!C#ぅうううううう!!!C++0xぅううう!!
ううっうぅうう!!俺の想いよC++へ届け!!ベル研究所のC++へ届け!

205:デフォルトの名無しさん
08/09/21 10:44:56
C++のアニメ2期って興味あるなwww

206:デフォルトの名無しさん
08/09/21 12:28:44
↓これは、何をする関数ですか?

#include <string.h>
void manko( unsigned long la ,char* str )
{
unsigned long msk = 0x80000000;

for( int i = 31; i >= 0; --i )
{
*(str + 31 - i) = ( msk & la ) ? '1' : '0';
msk >>= 1;
}
*(str + 32) = '\0';
}

207:デフォルトの名無しさん
08/09/21 12:40:30
>>206
関数の名前を見た瞬間に読む気をなくした

208:デフォルトの名無しさん
08/09/21 13:02:47
la に 1, 2, 3, …って入れていって実行してみればいいんじゃないかな

209:デフォルトの名無しさん
08/09/21 13:19:14
#include <stdio.h>
#include <string.h>
void main( void )
{
unsigned long msk = 0x80000000;
unsigned long la = 0x84218421;
unsigned char strings[33];
unsigned char* str;
int i,j;

str = &strings;
j = 0;
for( i = 31; i >= 0; --i )
{
*(str + 31 - i) = ( msk & la ) ? '1' : '0';
printf("%c", *(str + 31 - i) );
msk >>= 1;
if( j >= 3 )
{
printf(" ");
j = 0;
} else {
j++;
}
}
*(str + 32) = '\0';
}

210:209
08/09/21 13:19:57
受け取るデータを関数内でダミー定義するとかして実行すべし。
メモリ見れる環境なら直接見る、見れないならprintfで出してみる。
ま、結論いっちゃうと、"la"で貰った値をビット毎に評価して、真なら"1"を、偽なら"0"を
"str" に書き込んでる。
実行してみるとわかるが、"la" のどのビットが立ってるかがわかる、ということ。

211:デフォルトの名無しさん
08/09/21 15:28:03
実行してみなきゃわからんのか

212:デフォルトの名無しさん
08/09/21 15:56:26
int x;
のようなローカル変数があったとして
そのような変数の宣言は定義を兼ねますので、
口頭で説明する場合はどちらの用語を使用するのが適切でしょうか?
あと上記のような宣言(定義)は初期値が不明ですので、このような宣言(定義)の
特別な呼び方などありましたら教えてください。

213:デフォルトの名無しさん
08/09/21 16:14:56
ローカル変数の宣言と定義が分離することはありえないのでどう呼んでも誤解はないはずだが
強いて言えば宣言だと思う

あとは単に「初期化されていない」で十分

214:デフォルトの名無しさん
08/09/21 16:54:19
>>212
C言語なら、定義の場合は定義と言っとけば大体問題ない。
あと、宣言が定義を兼ねてるのではなく、
ある種の宣言を特別に定義と呼ぶだけなので、
宣言と言ったところで別に問題ないと思う。

ていうか、どっちが適切かなんか文脈次第だろがよ。
漠然と聞かれても「どっちでも良い」としか言いようない。

215:デフォルトの名無しさん
08/09/21 17:42:40
つまり、宣言と定義は混同してよいのだな?

216:デフォルトの名無しさん
08/09/21 17:57:46
>>215
帰れよ

217:デフォルトの名無しさん
08/09/21 18:05:17
答えられない低脳はすっこんでろ

218:デフォルトの名無しさん
08/09/21 18:08:15
sageずに煽るのはいつもの俺言語な変な子
みんな知ってるね

219:デフォルトの名無しさん
08/09/21 18:08:58
>>217
C言語どころか日本語の通じないかたはお帰りください

220:デフォルトの名無しさん
08/09/21 18:14:23
>>219
どの日本語が通じなかったんだ?

221:デフォルトの名無しさん
08/09/21 18:22:32
>220
日本語を理解できることは、このスレで議論する論客として最低限の資格だ
質問する気にしても、人にものを尋ねるときの態度がまるでなっておらず、質問者として最低限の資格もおまえは備えていない

繰り返すがチンパンジーには無理な問題だ
あきらめて帰れ


222:デフォルトの名無しさん
08/09/21 18:23:02
>>221
自己分析がよくできてるね

223:デフォルトの名無しさん
08/09/21 18:24:21
>>221
そんなに悔しかったのか、よかったな

224:デフォルトの名無しさん
08/09/21 18:32:47
結構熱いな、ここw

225:デフォルトの名無しさん
08/09/21 18:45:10
>>215>>220
>どの日本語が通じなかったんだ?
どの、というより全体的に意味の取り方がおかしいと思われる。

どこをどう取ったら「宣言と定義は混同してよい」という結論になるんだ?
日本語が理解出来て無いとしか思えない。

226:デフォルトの名無しさん
08/09/21 19:21:16
すみません。C言語の文法書2冊とWinAPIの本を2冊読みました。そこで
以前から私が作りたかった、ショートカット作成プログラムをぜひとも作りたいのです。

でも、やり方とかMSDNを調べてもわかりません。具体的に手順を書かせていただきますと。

1.コンソールアプリから2つフォルダのフルパスを入力する。
2.WindowsAPIで書いたショートカット作成関数を呼び出してお互いのフォルダにお互いのフォルダの
ショートカットを作成する。

そこで、ショートカット作成のWindows32APIのMSDNの調べ方もしくは
関数そのものを教えて欲しいのです。すみませんが、教えてください。よろしくお願いします。

227:デフォルトの名無しさん
08/09/21 19:23:11
win32APIはここで聞けば?
スレリンク(tech板)

228:226
08/09/21 19:27:27
>>227
どうもありがとうございます。そちらに移動させていただきます。

229:デフォルトの名無しさん
08/09/21 21:28:19
>>225
で、定義と宣言は混同しても文脈次第でどっちでも良いのか、悪いのか?

230:デフォルトの名無しさん
08/09/21 21:29:07
>>226
せっかくだからジャンクションを作ってみてはどうだ?

231:デフォルトの名無しさん
08/09/21 23:14:08
>>229
混同はしてはいけないけど、定義も宣言であるから、
文脈によってはどちらを使っても正しい表現になる場合もある。

どちらを使っても良い場合があるという事から、すなわち混同してよいと解釈したわけ?
やっぱり日本語が理解出来て無いようだね。

232:デフォルトの名無しさん
08/09/21 23:26:46
/*
* A function is only defined if its body is given
* so this is a declaration but not a definition
*/

int func_dec(void);

/*
* Because this function has a body, it is also
* a definition.
* Any variables declared inside will be definitions,
* unless the keyword 'extern' is used.
* Don't use 'extern' until you understand it!
*/

int def_func(void){
float f_var; /* a definition */
int counter; /* another definition */
int rand_num(void); /* declare (but not define) another function */

return(0);
}


233:232
08/09/21 23:42:20
宣言(declaration)は使用を宣言(declare)すること
定義(definition)は変数やマクロや関数のボディを定義(define)すること

ではあるまいか?

234:デフォルトの名無しさん
08/09/21 23:43:45
だから場合によってはひとつで両方兼ねてたりするだろ?

235:デフォルトの名無しさん
08/09/22 00:13:30
Cの用語としては、もうちょっとちゃんと記述されていて、
JISより抜粋。

>識別子の定義(definition)とは、宣言のうち次のものをいう。
>・オブジェクトに対しては、そのオブジェクトの領域を確保する宣言
>・関数に対しては、関数本体を含む宣言
>・列挙定数または型定義名に対しては、その識別子の(唯一の)宣言

余談だけど、C++だとまたもうちょっと違う。

236:デフォルトの名無しさん
08/09/22 08:50:57
(func1) register キーワードのついた別々の変数を用いる
(func2) a, b を array[0], array[1] に置き換えた以外は func1 と同じ
このような時,func1 と func2 の振る舞いは変わりますか?

int func1(void)
{
 register int a, b;

 何か a, b をたくさん使う処理
}
int func2(void)
{
 register int array[2];

 何か array[0], array[1] をたくさん使う処理
}

237:デフォルトの名無しさん
08/09/22 10:37:59
>>236
振舞いは変わらない。それで変わったら困るでしょ。
func2の方は最適化が阻害されて遅くなるコンパイラとかあるかもね。


238:デフォルトの名無しさん
08/09/22 16:16:39
>>231
やっと少しお勉強してきたようだな
たったそれだけのために何時間かかってるんだよ ぼけ

文脈によってはなんて逃げてないで、どういう場合かはっきりしろ
現状、その逃げによって意味をなしていない

>ある種の宣言を特別に定義と呼ぶだけなので、
>宣言と言ったところで別に問題ないと思う。

239:デフォルトの名無しさん
08/09/22 16:38:50 BE:417694526-2BP(0)
× はっきりしろ
○ 教えてくださいお願いします

240:デフォルトの名無しさん
08/09/22 16:52:09
>238
お帰りください

241:デフォルトの名無しさん
08/09/22 16:53:00
>>240
お前が帰れカス

242:デフォルトの名無しさん
08/09/22 16:56:21
>たったそれだけのために何時間かかってるんだよ
これはひどい

>>238
お前さんこそそんな支離滅裂なレスを考えるのに17時間もかけたのかい

てなことになるな

243:デフォルトの名無しさん
08/09/22 17:09:28
>>236
registerストレージクラスをどう解釈するかは処理系依存なのでなんともいえません。

244:デフォルトの名無しさん
08/09/22 17:45:22
>>243
くわしく

245:デフォルトの名無しさん
08/09/22 17:58:35
疑問に思ったら、自分の使ってるコンパイラでアセンブラ出力してみるのがいいよ。

246:デフォルトの名無しさん
08/09/22 18:20:18
foo bar[row][col];
bar[r][c] = hoge;

↑これって

foo bar[row * col];
bar[r * col + c] = hoge;

に等しいのか、それとも

foo (bar[col])[row];
(bar[row])[col] = hoge;

なのか、どっちなんでしょう?

あと下のbarにsizeofするとsizeof(foo) * row * colに等しくなります
下のやつはbar[col]へのポインタの配列だから sizeof(foo*) * rowになると思うのですがなぜこうならないんでしょうか?

247:デフォルトの名無しさん
08/09/22 18:22:03
>>244
詳しくも何も、規格票には「アクセスを可能な限り高速にすることを示唆する」とかなんかしか書いてなくて、
レジスタに割り当てろとも、アクセスを高速にしろとも要求されていない。

248:デフォルトの名無しさん
08/09/22 18:26:58
>>242
即レスがトレードマークな常駐野郎にしては遅かったから変だと思ったんだよ

249:デフォルトの名無しさん
08/09/22 18:28:54
>>246
配列はポインタではない。キミは何かを勘違いしてる。

次の3つは等しい:
foo bar[row][col];

int (bar[row])[col];

typedef foo foos[col];
foos bar[row];

これは縦と横が反対になっている:
foo (bar[col])[row];

これは明らかに違う:
foo bar[row * col];

250:249
08/09/22 18:30:23
>>249
書き間違えた

× int (bar[row])[col];
○ foo (bar[row])[col];

251:デフォルトの名無しさん
08/09/22 18:35:30
>>246
>下のやつはbar[col]へのポインタの配列だから

違うよ
foo (bar[col])[row] は foo[row] が col 個の配列
つまり foo bar[col][row] と同じ

foo[col] へのポインタ row 個の配列が欲しければ
foo (*bar[row])[col]
と書くけど、普通使わないと思うよ

foo へのポインタを row 個持つ配列
foo *bar[row]
の方がよく使う

252:デフォルトの名無しさん
08/09/22 18:40:17
>>247
今はregister付けても大体無視されるよな

253:デフォルトの名無しさん
08/09/22 20:02:14
>>247
いやそうじゃなくて、それで函数の振る舞いまで変わるの?

254:デフォルトの名無しさん
08/09/22 20:06:25
>>252
「無視されます」とかドキュメントに明記してあったりな。

それでも C ではまだ & 付けれないという差があるが、
C++ では & 付けれるようになったんだよな。

255:デフォルトの名無しさん
08/09/22 20:12:51
>>253
変わるわけない
>>243が質問の内容を勘違いしてるだけ

256:デフォルトの名無しさん
08/09/22 20:25:01
そもそも「振る舞い」って何なの?

関数の結果ことなのか、CPUが演算する内容なのか。

257:デフォルトの名無しさん
08/09/22 20:55:38
>>253
未定義動作だから何が起こっても不思議じゃないだろ。


258:デフォルトの名無しさん
08/09/22 21:00:28
>>257
処理系定義と未定義動作は別です。
register変数がどう解釈されるかは処理系定義です。

259:デフォルトの名無しさん
08/09/22 21:06:07
>>257
register付けたら未定義動作ってどんな罠だよww

260:デフォルトの名無しさん
08/09/22 21:13:54
>>258
register付きの配列にsizeof以外の演算子が使えることは保証されていない。


261:デフォルトの名無しさん
08/09/22 21:34:53
C99なら(ry

262:デフォルトの名無しさん
08/09/22 22:00:47
>>260
なるほどね
でもそれだったら「処理系依存なのでなんともいえない」じゃなくて
「未定義だから結果は予想できない」が正しい答えだね

263:デフォルトの名無しさん
08/09/22 22:02:12
何がなんでもケチつけたいんだね

264:デフォルトの名無しさん
08/09/22 22:05:31
要するにコンパイラの解釈うんぬんは関係なくて「配列にregisterつけんなボケェ」でFA?

265:デフォルトの名無しさん
08/09/22 22:07:08
こまかいことにこだわるのがプログラマー

266:デフォルトの名無しさん
08/09/22 22:08:51
>>264
「入門篇で聞くなボケェ」だと思われ

267:デフォルトの名無しさん
08/09/22 22:13:08
入門じゃ無い方のCスレ、どっか行っちゃったからなぁ

268:デフォルトの名無しさん
08/09/22 22:22:07
【初心者お断り】ガチ規格準拠C専用スレ Part133
スレリンク(tech板)

269:デフォルトの名無しさん
08/09/22 22:22:24
>>260
そうなんですか!知りませんでした
どうもありがとうぐございます

270:デフォルトの名無しさん
08/09/22 22:37:22
コンパイラで最適化してくれるから、registerは使わなくてもいい

271:デフォルトの名無しさん
08/09/22 22:51:15
>>270
馬鹿は黙ってろ

272:デフォルトの名無しさん
08/09/22 23:02:44
registerは最適化が進んでいなかった大昔のコンパイラの名残だよ
人間の体でいったら盲腸のようなもの

組み込み系用のマイナーなコンパイラを使っているんなら別だが

273:デフォルトの名無しさん
08/09/22 23:14:46

( ・∀・)  (´・ω・ ≡ ・ω・`)  (・∀・ )

274:デフォルトの名無しさん
08/09/22 23:33:46
いざ、それを使う期に及んではマイナーかメジャーかって問題じゃあんめえ

275:デフォルトの名無しさん
08/09/23 01:31:14
入門者が使う必要は無い
でいいでしょ

276:デフォルトの名無しさん
08/09/23 05:59:28
知識が昭和世代の古い人がいるみたいだね。

277:デフォルトの名無しさん
08/09/23 06:49:20
入門者が使う必要のない機能はない
そいつが入門者を卒業するためにはできることからやってみるのみ

278:デフォルトの名無しさん
08/09/23 07:17:40
C99における可変引数マクロの、##の文字列連結についてお伺いします。
環境はGCCです。

#define a(fmt, ...) fprintf(stderr, "%s():: " fmt, __func__, __VA_ARGS__)
#define b(fmt, ...) fprintf(stderr, "%s():: " fmt, __func__, ## __VA_ARGS__)

a("x=%d", x);と書いたときは、「fmt」が「"x=%d"」、「...」と「__VA_ARGS__」が「x」に対応するので、
fprintf(stderr, "%s()::" "x=%d", __func__, x); と置換されますが、
a("x")と、引数を1つだけしか書かなかった場合には、
fprintf(stderr, "%s()::" "x", __func__, );
とfprintfの引数リストがカンマで終わってしまいコンパイルエラーになります。

そこで、b(fmt, ...)のように##演算子を使うと、問題のカンマが取り除かれるらしいのです。
##は「パラメータ置換後に、両側の空白文字とともに各##も削除されて、
隣接するトークンが連結され、新しいトークンが形成される」、と
K&R第2版で書いてあるのですが、カンマも取り除かれるようになったのでしょうか?
それとも、これはGCCで通じる特別なものなのでしょうか?

長くなりましたが、よろしくおねがいします。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4198日前に更新/128 KB
担当:undef