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

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

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

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

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

各種リンク、関連スレは>>2-13あたり

C言語なら俺に聞け! Part 100
http://pc5.2ch.net/test/read.cgi/tech/1106403600/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
2デフォルトの名無しさん:05/01/31 08:38:47
【コンパイラ】
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/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/

【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/〜lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
3デフォルトの名無しさん:05/01/31 08:39:35
ここvoidに乗っ取られたスレだろ?
4デフォルトの名無しさん:05/01/31 08:45:08
こっちは本スレ?ネタスレ?
5デフォルトの名無しさん:05/01/31 08:46:50
6デフォルトの名無しさん:05/01/31 09:16:13
N個の点(位置は座標にあらわしてます)を一回ずつ巡回したときの最短距離を全探索するプログラムなんですが、コンパイルは出来るのに
出力したときに結果がすべて0になってしまいます。何も代入されないってのはおかしいので質問させていただきます。

以下はその探索に使用するプログラムを抜き出したものです。再帰を使ってます。
m番目にまだめぐってない点を見つけて、次に(m+1)番目に巡ってない無い点を・・・と探して行ってます。
具体的にはN*Nのます目に0(FALSE)を入れたあとで縦に点の番号、横に巡回の順番をとって、
点 n が m 番目に巡回したときに n行m列のます目に1(TURE)を入れていき、最後にその順番に従って距離計算、比較を行っています。

変数の説明ですが、s1、s2、d1、d2は大域で宣言し、 tは縦、yは横、s1は横(点側)から見たとき巡回が重複か否かを見ていて、s2はすでに回った点の番号を入れ、
d1は各点間の距離でこれはすでに計算されています。よろしくお願いします。

void search(int t){
int y,i,j;
for(y = 0; y < N; y++){
if(s1[y] == FALSE){
s1[y] = TURE; s2[t] = y;

if(t < N-1) search(t+1);
else{
for(i = 1; i < N; i++)
d2 += d1[s2[i-1]][s2[i]];
d2 += d1[s2[0]][s2[N-1]];
if(d2 < mini_d){
mini_d = d2;
for(j = 0; j < N; j++)
mini_s2[j] = s2[j]; d2 = 0;
}
}
s1[y] = FALSE;
}
}
}
7デフォルトの名無しさん:05/01/31 09:20:37
書き忘れましたが、最短距離をとるときの点距離を入れる変数mini_d とmini_s2も大域でとっていて、
mainの最後にprintfでこの2つを出力しています。
8デフォルトの名無しさん:05/01/31 10:17:31
>TURE
9デフォルトの名無しさん:05/01/31 10:22:02
orz

でもdefineでもそう定義してありました・・・
ここは直します
10デフォルトの名無しさん:05/01/31 10:23:13
>>6
まさか、mini_dが初期化されてなくて0のままって落ちじゃないよな?
ぱっと見よく判らんから、私なら極力グローバル変数を無くすように書き換えて、
各変数の生存期間を制限した上でそれぞれの挙動を確かめるだろうな。
#私ゃグローバル変数の挙動を追えるほど頭良くないんでね。
11デフォルトの名無しさん:05/01/31 10:36:32
>>10
mini_dは最初は0で初期化しましたけど、それじゃ比較できないよなってことで
適当に大きい数を最初に入れてます
それと自分で実験してみたんですが、大域でとった場合は関数の引数に入れなくても、
またreturnしなくても数値代入ができるようなのでそうしました。
/**/で説明入れてみます。

void search(int t){
int y,i,j;
for(y = 0; y < N; y++){
/*t番目に巡回したときにまだ回ってない点があるならそこにチェック(TRUE)を入れる*/
if(s1[y] == FALSE){
s1[y] = TURE; s2[t] = y;

/*まだ回りきってないなら次に行く点を探す*/
if(t < N-1) search(t+1);
/*回りきっていたら距離計算、比較*/
else{
for(i = 1; i < N; i++)  d2 += d1[s2[i-1]][s2[i]];
d2 += d1[s2[0]][s2[N-1]];
if(d2 < mini_d){
mini_d = d2;
for(j = 0; j < N; j++)  mini_s2[j] = s2[j]; d2 = 0;
}
}
/*バックトラックのために一個前に回った点の履歴を削除*/
s1[y] = FALSE;
}
}
}
1210:05/01/31 10:41:01
>>11
大丈夫、そのコメントくらいは理解できたから。
それが正しいかどうか、グローバル変数も含めて挙動を推測するだけの頭はないがね。
で、私なりの方針を提示したわけだが、それを否定されたら私にできるアドバイスはもうないよ。
13デフォルトの名無しさん:05/01/31 10:44:56
>>12
わかりました
大域変数減らしてみます、ありがとうございました
まずはd2を。
14デフォルトの名無しさん:05/01/31 13:59:14
if(t < N-1) search(t+1);
else{
d2 = 0; /* d2 はここで初期化しないとダメ。*/
for(i = 1; i < N; i++)
d2 += d1[s2[i-1]][s2[i]];
15GANMEN ◆6JRRRjFXoU :05/01/31 14:12:40
フルスクリーンのHTMLを教えてください
16デフォルトの名無しさん:05/01/31 14:16:40
>>15
氏ねば?
17デフォルトの名無しさん:05/01/31 14:58:55
18デフォルトの名無しさん:05/01/31 16:09:53
> mini_d とmini_s2も大域でとっていて、

で、反対語は? > 大域
19デフォルトの名無しさん:05/01/31 17:07:01
>>18
局所変数
20デフォルトの名無しさん:05/01/31 17:37:26
Cを最近始めた者ですが、過去検索などしても分からなかった為、
質問お願いします。
文字をある長さまで指定した文字で充填することは可能でしょうか?
イメージ的にはoracle SQLのRPAD関数のような事がやりたいのですが…。
よろしくお願いします。
21デフォルトの名無しさん:05/01/31 17:41:36
>>20
memset()
22デフォルトの名無しさん:05/01/31 17:42:04
自分で適当な仕様作って、関数書けばいいんじゃない?
別に御仕着せの関数を使わないと、Cじゃなんもできないってわけじゃないんだから。
2320:05/01/31 17:47:28
>20様
>21様
ご回答ありがとうございます。
21様の方法で試してみます。
>22様 もしうまくいかなければ自分で作ってみます。
どうもありがとうございました。
24デフォルトの名無しさん:05/01/31 21:28:24
関数の記憶クラスに関して質問です。
関数の定義で記憶クラスを省略した場合は extern 扱いになりますが、
プロトタイプ宣言の場合も省略時は extern と考えていいですか?
ネットを回ってると、プロトタイプ宣言では関数の定義が外部にある場合は
extern、内部の場合は記憶クラスなしと言う記述があって混乱しています。
また、関数定義では extern、そのソース内のプロトタイプ宣言は static と
指定すると外部からは static 扱いになってるのはそのように決まってるのでしょうか。
早く出た順なのかな、と extern static と同じ関数をプロトタイプ宣言させて、
関数の宣言では extern としても static 扱いだったので…。
VCとBCCのコンパイラで試しました。
25デフォルトの名無しさん:05/01/31 21:32:56
俺は、関数にexternは使わんな
staticは使うけど
26デフォルトの名無しさん:05/01/31 22:07:41
staticが1個でもあるとstatic。

じゃなかったっけ
27デフォルトの名無しさん:05/01/31 23:09:58
>外部からは static 扱いになってる

扱いはしてない
28デフォルトの名無しさん:05/01/31 23:15:27
はるか遠くの関数がallocateした領域でも
領域先頭アドレスさえ間違えなければ
サイズとか分からなくてもきちんとfreeできるものですか

char* p = NULL;

/* 4〜5層下の関数がpにmallocする */
test_func(p);

/* 大きさとか知らんけど解放 */
free(p);
29デフォルトの名無しさん:05/01/31 23:16:26
できるものです
30デフォルトの名無しさん:05/01/31 23:18:05
>>28
test_func(&p);

p=test_func();
3128:05/01/31 23:28:21
>>29-30 アリガトゴザマシタ
mallocした領域の終端には
ボクには見えない機械様用のマーキングかなんかがきっと
あるのですね。
32デフォルトの名無しさん:05/01/31 23:30:37
33デフォルトの名無しさん:05/01/31 23:35:57
レス感謝です。

>>25
自分も普段は関数に extern は使ってないです。
プロトタイプ宣言で static を使ってる例ってネットじゃあまりみないですね。

>>26
それだと道理があいますね。なるほど。。。

>>27
リンク時に外部参照が未解決になるので static 扱いされて参照できない
のかと思ったのですが、もっと別の理由ということでしょうか。
34デフォルトの名無しさん:05/01/31 23:44:57
>>33
> プロトタイプ宣言で static を使ってる例
staticを付けると翻訳単位内でしか呼び出せなくなるのでどうせヘッダに宣言する意味がないから。
35デフォルトの名無しさん:05/01/31 23:53:41
>>33
unko.c
 static void unko() { /*...*/ }

manko.c
 mein() { unko(); }

manko.c では unko は暗黙に extern 宣言される
だからこそリンクでずっこける
^^^^^^^^^
36デフォルトの名無しさん:05/02/01 00:10:02
>>34
ヘッダに宣言しても確かに意味ないですね。
やったら各ソースで見つからないと怒られるのかな。。。後でやってみます。
関数が定義されているソース内のプロトタイプ宣言でも static は結構書いてないのが
多そうな気がするのですが、気のせいでしょうか。

>>35
記憶クラスを省略した場合は extern というのは一応分かってるつもりです。
プロトタイプ宣言の場合は、違う説明をしているサイトがあって混乱してますが。。。
自分が特に疑問に思ったのは下記のような場合です。(関数名はかえました。)

testA.c
 static void testA(void); /* プロトタイプ宣言は static */
 extern void testA(void) { /*...*/ } /* 関数宣言は extern */

testB.c
 int main(void) { testA(); } /* 外部参照の未解決が発生。static が優先されてしまう。。。? */
3736:05/02/01 00:11:53
extern void testA(void) { /*...*/ } /* 関数宣言は extern */
は関数宣言ではなくて、関数定義の間違いでした。
38デフォルトの名無しさん:05/02/01 00:19:35
ill-formed ちゃうか?
39デフォルトの名無しさん:05/02/01 01:08:46
> 関数の定義で記憶クラスを省略した場合は extern 扱いになりますが、

なりません
40デフォルトの名無しさん:05/02/01 08:16:56
>>38
ill-formedtって未定義って解釈でいいでしょうか。
プロトタイプ宣言と関数定義で記憶クラスが違うというのは普通しないですもんね。

>>39
関数で使用できる記憶クラスは extern と static だけですよね。
省略時に extern でないとすると static ってことでしょうか。さすがにそれは。。。
41デフォルトの名無しさん:05/02/01 08:40:45
> ill-formedtって未定義って解釈でいいでしょうか。

全然ちがいます。

> 関数で使用できる記憶クラスは extern と static だけですよね。

いいえ
42デフォルトの名無しさん:05/02/01 08:44:54
知りたければ言語の規格書を読めってことか。
43デフォルトの名無しさん:05/02/01 09:30:24
いいえ
44デフォルトの名無しさん:05/02/01 09:34:29
「ill-formed」をどう訳したら「未定義」になったのか子一時間
教えて欲しい
45デフォルトの名無しさん:05/02/01 09:35:45
externってのはリンカやローダにシンボルの解決をマル投げするっていう意味
46デフォルトの名無しさん:05/02/01 11:45:54
exeファイルからソースをみるにはどうしたらいいのでしょう?
なにかソフトがいるのですか?
47デフォルトの名無しさん:05/02/01 11:48:39
48デフォルトの名無しさん:05/02/01 12:18:26
>>46
非可逆です。
49デフォルトの名無しさん:05/02/01 12:19:35
ANATOMIZERは?
50デフォルトの名無しさん:05/02/01 12:36:09
>>36
>testB.c
> int main(void) { testA(); } /* 外部参照の未解決が発生。static が優先されてしまう。。。? */

プロトタイプを省略すると、
int を返す関数と解釈される。
つまり、「testB.c」では「int testA();」がないと言われるのは当然。
51デフォルトの名無しさん:05/02/01 16:20:08
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int i, r, j, c=0, n[6];
do {
r=rand()%42+1;
for(j=0;j<c;j++) {
if(c==0) break;
if(r==n[j]) break;
}
if(j==c) {
n[c]=r;
c++;
}
} while(c<6);
printf("%d %d %d %d %d %d", n[0], n[1], n[2], n[3], n[4], n[5]);
return 0;
}


ロト6の数字をランダムに作り出すプログラムを作ろうと思ってます。
何度やっても同じ数字しか出ないのですが、プログラム的な問題なんでしょうか?
52デフォルトの名無しさん:05/02/01 16:34:55
srand
53デフォルトの名無しさん:05/02/01 16:36:19
>>51
randの実装を100回くらい読んでみろ。
54デフォルトの名無しさん:05/02/01 17:24:49
質問です。

malloc や calloc で cast 無しでメモリ領域を確保するとき、warning が出ないようにするには
どうすればよろしいのでしょうか?
コンパイラは gcc, g++ です。
55デフォルトの名無しさん:05/02/01 17:27:25
>>54
は?神でいいよ。
5654:05/02/01 17:34:19
>>55
すみません、意味が分からないのですが・・・
コンパイル時に Warning が出て、正常にコンパイルできないのですが・・・
57デフォルトの名無しさん:05/02/01 17:37:30
>gcc, g++
どっちだよ
つか C++ じゃmalloc, calloc なんて使わねーしな
58デフォルトの名無しさん:05/02/01 17:40:48
>>56
mallocの返り値はvoid*型だよね。
で、君が確保したメモリ領域は何型で使うの?
例えば、int*型だったとしたら、そこにvoid*型を代入するのはおかしいよね。
いい?代入というのは左辺値も右辺値も同じ型でないといけないの。
mallocは確保したメモリ領域の先頭アドレスを返してくれるわけだけど、void*型を
int*型にキャストしてから代入しないといけないの。
warningとは、君がそういうことをしていないから警告しているわけ。
errorとは別物だよ。
59デフォルトの名無しさん:05/02/01 17:42:48
>>57
君が使わなくても使う人はいるけどネ。
60デフォルトの名無しさん:05/02/01 17:45:49
誰か前スレのdatをうpしてくんないかな。
6154:05/02/01 17:50:55
>>57
すみません、人(先生)が書いたプログラムなので。
基本的に C のプログラムなのですが、コメントに // を使ったり、
関数の途中で変数宣言したりするので、結局 g++ でコンパイルするしかないのです。

>>58
それは分かるのですが、double 型に int 型の変数を代入したときに自動的に型変換されるように、
malloc や calloc でも自動的に型変換してくれないものかと思ったのですが・・・
62デフォルトの名無しさん:05/02/01 17:57:07
先生生徒揃って無能だな
63デフォルトの名無しさん:05/02/01 18:01:00
>>58
いちいちキャストすんな ぼけ。
64デフォルトの名無しさん:05/02/01 18:01:15
>>60
うpろだ紹介しる。
誰か出してくれるだろ。
明日までに他の誰もうpしなかったら俺がやる。
65デフォルトの名無しさん:05/02/01 18:08:08
>>61
> それは分かるのですが、double 型に int 型の変数を代入したときに自動的に型変換されるように、
> malloc や calloc でも自動的に型変換してくれないものかと思ったのですが・・・
暗黙の型変換は、すべきでないところで暗黙の変換が行われることがあるため、
型を意識してプログラミングしなければならない。
しばしばバグの元になる。
暗黙の型変換はCの汚点の一つ。
66デフォルトの名無しさん:05/02/01 18:11:44
>>61
gccって一行コメントに未対応だったか?
俺が動かした環境だと、なぜか、Windowsからエミュレートしたら動かなかったけど

Warning出て欲しくなければ、コンパイラオプション(-?かな)をチェック。たぶん出来る。
67デフォルトの名無しさん:05/02/01 18:18:33
68デフォルトの名無しさん:05/02/01 18:26:21
>>58
規格ではvoid *と任意のポインタとの相互の変換は暗黙のうちにやって良いことになっているけどね。
69デフォルトの名無しさん:05/02/01 18:27:18
70デフォルトの名無しさん:05/02/01 18:32:10
>>66
違った。日本語のコメントがあったから動かなかっただけだったと思う。
71デフォルトの名無しさん:05/02/01 19:36:04
>>56
嘘をつくな
warning はコンパイルを妨げないぞ
ある処理系では warning でもコンパイルを中止しろというオプションがあったりするが
それを自分で指定しておいて寝言ほざいてんじゃねえだろな
72デフォルトの名無しさん:05/02/01 19:47:40
>>71
「正常に」ってのが、警告無しにって意味じゃない?
まぁ、ソース変えずに警告だけ無くしたいなら、警告消えても消えなくても同じだけど
(∩ ゚д゚)アーアー警告しらなーい
って感じだし。
73デフォルトの名無しさん:05/02/01 20:05:47
#include <stdlib.h>
忘れてるとか
74デフォルトの名無しさん:05/02/01 20:27:33
>>65
PerlやRubyなんか最悪。
Javaはキャストだらけでださい。
Cの方がよっぽどまし。
75デフォルトの名無しさん:05/02/01 20:36:42
質問です

int hoge;

int hoge_hoge()
{
int geho;
hoge=1;
geho=1;
}

int main(void)
{
hoge_hoge();
printf("%d", hoge);
}
とすれば、全ての関数の中でhogeが使えますが
関数内で定義したgehoはmainの中では使えませんよね?
関数内で作った変数を他の関数からも使えるようにすることはできないのでしょうか?
76デフォルトの名無しさん:05/02/01 20:40:50
>>75
いいえ。
77デフォルトの名無しさん:05/02/01 20:41:12
本ぐらい読んでから聞けよ馬鹿
78デフォルトの名無しさん:05/02/01 20:43:12
>>77
ありえねーッ
本読んでもわかんねーッ
79デフォルトの名無しさん:05/02/01 20:44:31
ここで聞いてもわかんねーッ
だれも答える必要ねーッ
80デフォルトの名無しさん:05/02/01 20:55:16
>>75
何のためにint hoge_hogeにしたの?
そういう気分だったから?
81デフォルトの名無しさん:05/02/01 21:16:48
レス感謝です。

>>41
ill-formedtって翻訳かけたら不適格って出てきました。全然違いますね。すみません。
関数で使用できる記憶クラスのくだりはスコープに関連した…が抜けてました。
自信がないですが、extern, static, と関数に使用できるのはあとtypedef・・・?
typedef では関数のポインタに対してで、関数に使用できるとなると違和感があります。
すみません、自分なにかすごい勘違いしてそうです。

>>44
googleで検索かけたら、上のほうに不明瞭と出てきてたので、未定義のことなのかなと
思ってしまいました。infoseek翻訳で調べたら不適格ですね。
となると、本来はコンパイルエラーにならないといけない・・・?

>>50
36の testB.c で記述抜けがありました。試したときは extern void testA(void);
という testA.c の関数定義にそったプロトタイプ宣言を入れてました。

家と会社にある本、解説サイトもこの辺あんまり書いてませんで、
42でも言われてますけど、本当に知りたいなら規格書を読むべきですよね。うーむ。
82デフォルトの名無しさん:05/02/01 21:17:21
>>61
C99も読んでねーのかよ。
83デフォルトの名無しさん:05/02/01 21:52:32
n重のforループを書くにはどうしたらいいのでしょうか。
nについては、1〜20くらいを考えています。
84デフォルトの名無しさん:05/02/01 21:55:12
>>83
再帰すれば?
85デフォルトの名無しさん:05/02/01 21:57:35
>>84
roop()
{
int i;

for( i = 0; i < n; i++ )
{

}
86デフォルトの名無しさん:05/02/01 22:03:19
roop()
87デフォルトの名無しさん:05/02/01 22:05:40
roop()
{
int i;

for( i = 0; i < n; i++ )
{
   roop();
}

それで、変数ひとつ用意して、if文で規定値になるまで再帰する、みたいな条件を書いたんですが、
なにか変なことしてますか??
88デフォルトの名無しさん:05/02/01 22:25:38
>>83
面倒くさいのなら、ソース生成プログラム作れば?
89デフォルトの名無しさん:05/02/01 22:27:33
>>88
そんなことせんでもマクロで十分。
90デフォルトの名無しさん:05/02/01 23:03:41
>81
帰ってきたら結論出てるかと思ったのにまだのようなので調べてみたよ。ISO/IEC 9899:1999 より。

> 6.9.1 Function definitions
> 4 The storage-class specifier, if any, in the declaration specifiers
> shall be either extern or static.
となってるので、関数定義につけられる記憶クラスは extern か static だけ。

> 5 If the declaration of an identifier for a function has no storage-class
> specifier, its linkage is determined exactly as if it were declared with
> the storage-class specifier extern.
なので、省略時は extern 扱い。

> 6.2.2 Linkages of identifiers
> 4 For an identifier declared with the storage-class specifier extern
> in a scope in which a prior declaration of that identifier is visible,
> if the prior declaration specifies internal or external linkage, the
> linkage of the identifier at the later declaration is the same as the
> linkage specified at the prior declaration. (後略)
となっているので、先行する宣言がある場合の extern は先行する宣言の
リンケージと同じになるから、 static の後の extern は許容された上、
static が優先されると思われ。一方、

> 3 If the declaration of a file scope identifier for an object or a
> function contains the storageclass specifier static, the identifier
> has internal linkage.
> 7 If, within a translation unit, the same identifier appears with both
> internal and external linkage, the behavior is undefined.
となっているので、extern の後の static は ill-formed ではないが、undefined
だと思われ。gcc だと警告が出るね。
91デフォルトの名無しさん:05/02/01 23:05:30
>83
再帰を使うというのもありだと思う。特に n が可変なら。
92デフォルトの名無しさん:05/02/01 23:07:13
>>91
その意見は出てるんだよ!
もっと創造的なアイデアを出せよ。しねよ!
93デフォルトの名無しさん:05/02/01 23:11:28
凄く基本的なことだとは思いますが質問があります

AAA.hにAAAクラスを定義してあり
BBB.hにBBBクラスを定義してあるとします。

AAAクラスの中でBBBクラスのポインタを宣言したかったので
AAA.hでBBB.hをincludeしました。
BBBクラスでもAAAクラスのポインタが必要になった時に
リンクはどのようにすれば良いんでしょうか?

A→B B→Aと双方をリンクの場合です
よろしくお願い致します…
94デフォルトの名無しさん:05/02/01 23:13:16
ポインタなら先行宣言するだけでいい
95デフォルトの名無しさん:05/02/01 23:19:37
えっと、スレ違い
96デフォルトの名無しさん:05/02/01 23:24:39
>>93
Cの問題と言えばCの問題と言う気もするが、
クラスを使っているのなら素直にC++スレに逝け!
97デフォルトの名無しさん:05/02/01 23:29:26
roop(int n)
{
int count[N] = {0に初期化};
int max[N] = {どこかで設定};
int i;
for (;;) {
count[0]++;
for (i = 0; i < n-1 && count[i] == max[i]; i++) {
count[i] = 0;
count[i+1]++;
}
if (count[n] == max[n])
break;
なんかやりたいこと;
}
}
98デフォルトの名無しさん:05/02/01 23:30:17
loop
99デフォルトの名無しさん:05/02/01 23:30:21
あー、ifの中の[n]は[n-1]のまちがい
100デフォルトの名無しさん:05/02/01 23:32:56
>92
おおう、済まねぇ。ポップアップで見て間とばしてた。じゃ、こんなんでどう?

int i[N], j, start[N], end[N]; /* start[], end[] は適当に設定しる */
for(j=0;j<N;j++) i[j]=start[j]; /* 初期値 */
while(1) {
/* i[] を使って適当に処理 */
j=0;
while(j<N&&++i[j]>=end[j]) {
i[j]=start[j];
j++;
}
if(j==N) break;
}

最後の判定を最初の while に持ってくることもできるし、中の while を for に書き直すことも
できるけど、一応素直にしてみた。
101デフォルトの名無しさん:05/02/01 23:34:40
被った…orz
102デフォルトの名無しさん:05/02/01 23:39:56
103デフォルトの名無しさん:05/02/01 23:48:30
>>60
>>1
10475:05/02/01 23:57:44
誰か教えてくれないでしょうか?
105デフォルトの名無しさん:05/02/01 23:59:32
何を教えてほしいのかわからん。
106デフォルトの名無しさん:05/02/02 00:01:00
>>104=75
出来ない。

そもそも、ローカル変数はstaticを付けない限り、
関数から抜けた時点で存在がなくなるし。
10775:05/02/02 00:06:48
>>106
ありがとうございます
じゃぁ、グローバル変数として上にぞろぞろとかくしかないのですね…
ディスプレイ構造体等、増えるにつれてわけがわらなくなってきたので
ローカルで宣言したものを使えないものなのかと思いきいてみました
どうも有難うございました
108デフォルトの名無しさん:05/02/02 00:11:18
グローバル変数にしなくても引数で渡すとか、いろいろ解決方法はあるだろうに。
109デフォルトの名無しさん:05/02/02 00:11:37
ていうか、C言語以外でもできねえだろ
何がしたいのやら
110デフォルトの名無しさん:05/02/02 00:12:58
>>107
データ構造の勉強汁
111デフォルトの名無しさん:05/02/02 00:14:25
私が引き継いだコードは 
全部mallocした後に'\0'で初期化されているんですが、 
これは糞コードの類に入るんでしょうか? 

callocでやるべき? 

11251:05/02/02 00:15:34
>>52
サンクス。
113デフォルトの名無しさん:05/02/02 00:18:46
>>111
漏れならcalloc()使うな。
114デフォルトの名無しさん:05/02/02 00:21:06
callocのソース見たいんですが
webで公開されてますか
115デフォルトの名無しさん:05/02/02 00:21:21
>>111
ループで回して'\0'代入しているなら糞コード。

# 浮動小数点数の配列の確保で、
# ループで0.0を代入しているなら糞コードではないと思うが
116デフォルトの名無しさん:05/02/02 00:21:41
0初期化する必然性があることはまれだけどな。
117デフォルトの名無しさん:05/02/02 00:22:43
>>114
それ以前に見る必然性がない。
118111:05/02/02 00:24:20
malloc
memset
の繰り返しでした

callocを使わないんですかと聞いたら
「あまりそういうソースは見ないな」
とベテランの先輩がおっしゃっていたのです
119デフォルトの名無しさん:05/02/02 00:24:36
mallocした中身にcharしか入れないんだったら、
callocでやってもよいって程度。
120デフォルトの名無しさん:05/02/02 00:28:16
>>118
まぁ、あまり見ない。
121デフォルトの名無しさん:05/02/02 00:28:28
以前、他の会社から受けた仕事で、
コーディング規約の中に、

 char buf[256] = {'\0'};

等の初期化を使わず、

 char buf[256];
memset( buf, 0, sizeof(buf) );

の様にいちいち memset() しなきゃならない、
と言う糞規約があったことを思いだした。


浮動小数点数の時にどうするのか?と小一時間(ry
122デフォルトの名無しさん:05/02/02 00:32:28
>>118
「メモリ確保はmalloc」のように決めといたほうが、いろいろと楽。
123こもん:05/02/02 00:33:39
C++のプログラムで5教科・英語・国語・理科・社会・数学の50人分の
各個人の格教科の点数と合計データと平均データを
合計点数が大きい順で並べるプログラムを作ってくれませんか?
124デフォルトの名無しさん:05/02/02 00:34:54
だからスレ違い
125デフォルトの名無しさん:05/02/02 00:40:12
>>90
とても詳細に調べていただきまして、ありがとうございます。
規格の記述箇所まで教えていただきまして・・・。
辞書と翻訳サイトを使って、引用の箇所を出来るだけ読んでみました。
引用下の解釈があってやっと読めた感じです。おかげさまで24での疑問が解決しました。
また、関数で使用できる記憶クラスが extern と static だけと覚えていたのが
間違っていなくてよかったです。
細かく調べたいなら、やはり規格を参照しないと駄目ですね。
英語ですと誤読しそうなので、今度JISの規格書を図書館から借りてきたいと思います。
ありがとうございました。
126デフォルトの名無しさん:05/02/02 00:44:48
JISのでも誤読する可能性大
127デフォルトの名無しさん:05/02/02 01:12:17
>>123
エクセルでやれば良し
128デフォルトの名無しさん:05/02/02 01:13:29
>>127
実用的にはその方がいいね。
129デフォルトの名無しさん:05/02/02 01:39:44
「ストリーム」って何ですか?
130デフォルトの名無しさん:05/02/02 02:00:07
榊原郁恵にきいてください。
131デフォルトの名無しさん:05/02/02 02:02:35
美味しいよね
132デフォルトの名無しさん:05/02/02 02:15:23
>>129
流れ。
133デフォルトの名無しさん:05/02/02 07:35:40
>>102
アリガトー
134デフォルトの名無しさん:05/02/02 09:31:06
>>123
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MEMBER 50
#define COURSE 5

typedef struct {
int score[COURSE];
int total;
double average;
} DATA;
DATA r[MEMBER] = {
中略
};
135デフォルトの名無しさん:05/02/02 09:34:25

int main(void)
{
int i,j;

for (i = 0; i < MEMBER; i++) {
r[i].total = 0;
for (j = 0; j < COURSE; j++)
r[i].total += r[i].score[j];
r[i].average = r[i].total / (double)COURSE;
}
qsort(r, MEMBER, sizeof(DATA), cmp);
for (i = 0; i < MEMBER; i++) {
for (j = 0; j < COURSE; j++)
printf("%d ", r[i].score[j]);
printf("%d %g\n", r[i].total, r[i].average);
}
return EXIT_SUCCESS;
}
以下略
136デフォルトの名無しさん:05/02/02 09:35:14
ここまでできればあと3行でできる。
137デフォルトの名無しさん:05/02/02 09:40:39
藻前等宿題スレでやれよ。
138デフォルトの名無しさん:05/02/02 09:42:19
つーか、なにこの糞コード。よくこんなもん他人に晒せるな。
139デフォルトの名無しさん:05/02/02 09:44:09
自意識過剰な馬鹿相手にすんなよ
140デフォルトの名無しさん:05/02/02 09:47:19
↑プッ
141デフォルトの名無しさん:05/02/02 09:51:48
皆さんに質問です
ファイルから設定を読みこむときって皆さんはどうやってますか?
width=500
height=600
と、設定ファイルにかかれているとき
Perlなら、widthを変数名に、500を値にいれていたのですが
C言語ではどうするのでしょうか?

もしよろしければ適当にソースを書いていただければ幸です
142デフォルトの名無しさん:05/02/02 10:03:57
>>141
データ構造に合わせる
143デフォルトの名無しさん:05/02/02 10:10:56
widthをHashキーにして500をHashに入れます。
144デフォルトの名無しさん:05/02/02 10:45:00
145デフォルトの名無しさん:05/02/02 11:31:00
Windowsじゃないです
146デフォルトの名無しさん:05/02/02 13:21:33
C言語初心者による横レス。
もうちょっと良い方法もあるとは思うので、参考までに。

widthとかheightとかの、キーの種類や数が固定なら
それに対応する専用の変数を用意しとけばいいんでない?

キーが固定じゃないなら、
「キーの文字列」と「値」を両方格納できる構造体でも作っておいて
自前でそれを調べて値を返す関数を作るとか、そんな感じ。
147デフォルトの名無しさん:05/02/02 13:38:06
Perlのsplitみたいな関数はありますか?
特定の値を文字列から取りだしたいです
148デフォルトの名無しさん:05/02/02 13:54:00
getline(line);
parseline(keyword, value);
if strcmp(keyword, 'width') == 0 then
width := value;
else if strcmp(keyword, 'height') == 0 then
height = value;
else ...
149デフォルトの名無しさん:05/02/02 13:59:57
>>147
あるかどうか自分で調べろ。
http://cham.ne.jp/piro/p_stdfunc.html

無ければ作れ。
150デフォルトの名無しさん:05/02/02 15:39:54
関数fcloseを使用しているのですが、
//fclose(fp);
のようにコメントアウトするとエラーがでないのですが、
コメントアウトを外すと
free():invalid pointer 0x859b6a8
という風に実行中にエラーをはきます。

どうすれば、いいのでしょうか?
それ以降ではfpは使用していないので、fcloseしても問題ないような気が・・・
151デフォルトの名無しさん:05/02/02 15:47:03
>>150
同じファイルポインタを2回fcloseしてたりする?
152デフォルトの名無しさん:05/02/02 15:50:23
>>151
してないです。
153デフォルトの名無しさん:05/02/02 15:53:41
>>150>>152
助けるにしても情報が足りなさすぎです
154デフォルトの名無しさん:05/02/02 15:58:51
普通、OSは無言だが、隠さずに出せよ
155デフォルトの名無しさん:05/02/02 16:05:21
推薦書「OSは止まらない」
156デフォルトの名無しさん:05/02/02 16:09:20
でも、個別(カスタム)は知りません。だな
157デフォルトの名無しさん:05/02/02 16:12:16
>>150
似たことがあった。自分の場合、他のポインタで
メモリ破壊してるとこがあってそれを直すと解決した。
そんなことない?
158デフォルトの名無しさん:05/02/02 16:13:05
void fuc(){
FILE *fp;
char date[30];
strcpy(date,"a.txt");

fp=fopen(date,"r");

・・・

fclose(fp);

}

なんですが、、、
ファイルポインタを作りすぎると100個くらい?
エラーになるのですか?
159デフォルトの名無しさん:05/02/02 16:15:49
>>157
それは、既知だよ。ここに来るやつは。知ってるよw
160157:05/02/02 16:20:20
>>159
これはすつれい。
161デフォルトの名無しさん:05/02/02 16:22:32
>>160
同じだ、何回メモリ暴走したことか、意味が無いな
162デフォルトの名無しさん:05/02/02 16:28:07
>>158
ファイルポインタを作りすぎるとって、一般的に100もファイルを開けるOSは少ないと思うのだけど。
ファイルポインタがエラーでNULLになるんでない?
163デフォルトの名無しさん:05/02/02 16:32:55
いや、どこまでOSを信用できるかだ、というか
OSに同化できるかだ
164デフォルトの名無しさん:05/02/02 16:36:14
>>162
100個くらいで大丈夫よ、安心して、
165デフォルトの名無しさん:05/02/02 16:41:30
ちなみにFOPEN_MAXなんて定数がある。
166デフォルトの名無しさん:05/02/02 16:53:59
難しい、結局、メモリ上限だな、FN_MAXが意味無いと同じだ、ウワーン
好きにやれよ
167デフォルトの名無しさん:05/02/02 18:01:00
念のためage
168デフォルトの名無しさん:05/02/02 18:01:11
構造体で次のようにやるとエラーがでるんですけど
struct A{
  int a;
  int b;
};
struct B{
A[10]; ←ここ
};
こういう使い方はできないんですか?
169デフォルトの名無しさん:05/02/02 18:04:34
>>168
struct B {
  struct A a[10];
};
「struct A」はあくまでも型名。
170デフォルトの名無しさん:05/02/02 19:02:38
struct A{
  int a;
  int b;
};
struct B{
A A[10]; ←ここ
};
コレなら作れる
171デフォルトの名無しさん:05/02/02 19:08:18
>>169-170
あ、そういえばそうだった・・・
なんか勘違いしてた・・・アリガトンゴザイマス
172デフォルトの名無しさん:05/02/02 20:31:21
>>170
ここのスレタイをよく読め。
173デフォルトの名無しさん:05/02/02 20:46:25
質問です。

C言語では配列の添え字を宣言する際に2のべき乗を使うと
内部演算がビットシフトで表現され、処理が高速になる。

と聞いたのですが、これを的確に実験する方法はあるでしょうか?
174デフォルトの名無しさん:05/02/02 20:48:50
こんなの実験も何もないだろうが。
アセンブラに落とせ。
175173:05/02/02 20:58:31
アセンブラに落とす、とはどういった作業のことでしょうか?
申し訳ないです。
176デフォルトの名無しさん:05/02/02 21:01:27
>>175
gcc -S hoge.c
177デフォルトの名無しさん:05/02/02 21:19:44
それは「C言語では」というより、「何か特定のコンパイラでは」だな。
178173:05/02/02 21:25:41
>>174=176(?)
お礼を忘れていました。すいません。有難うございます。

っと、>>176の作業によってアセンブラソースが生成されました。
が、これのどこを見ればいいのかさっぱりわかりません。
アセンブラのソースは少しだけ意味がわかる程度でして・・・。

私が考えるに、実行速度の向上はわずかで、
非常に大きなプログラムを書いたときに影響が出てくるのかということ。
で、ちょこっとのプログラムでは向上を確認できないのではないかと。

なに言ってるかわかんなくなってきました。頭冷やしてきます。
179デフォルトの名無しさん:05/02/02 21:38:01
影響が出るか出ないかは、プログラムの大きさじゃなくて、
何回その部分を実行するかで決まる。

で、興味を持ったから試してみたけど、
gccだと全部シフトと加減算にしてしまってるように見えるな。
乗算にした方が速いケースってないんだろうか。
180デフォルトの名無しさん:05/02/02 21:39:46
>>178
>>176は私ですー にゃんにゃん
つまり、別人^^;

あのですね、掛算をするときは最適化されちゃってあまり効果がないかもですが、
割算の時は効果がでるかもですー。

例えば、こういうコードをコンパイルするとどうなるでしょうか。
(やってみてくださいね)
test3とtest4では最適化されて同じ(アセンブリ)コードになってしまうかもしれませんが、
test1とtest2ではたぶんtest2の方が長いコードになってしまうとおもいますー
int test1(int a) {
return a>>1;
}
int test2(int a) {
return a/2;
}
int test3(int a) {
return a<<1;
}
int test4(int a) {
return a*2;
}
181デフォルトの名無しさん:05/02/02 21:51:02
#include <stdio.h>
#include <stddef.h>

main(){
struct station{
int bango;
char *p_name;
struct station *pm;
};

struct station m1 = {1001, "tokyo" , NULL};
struct station m2 = {1002, "shinbashi", NULL};
struct station m3 = {1003, "shinagawa", NULL};
struct station m4 = {1004, "kawasaki" , NULL};
struct station m5 = {1005, "yokohama" , NULL};

struct staion *p_m1;

m1.pm = &m2; //次のデータを指すようにポインタを設定する
m2.pm = &m3;
m3.pm = &m4;
m4.pm = &m5;

printf("bango namae\n");
for(p_m1 = &m1;p_m1 != NULL;p_m1 = p_m1->pm) //ポインタの更新
printf("%4d %s\n", p_m1->bango, p_m1->p_name);
}
182173:05/02/02 21:51:29
やってみました。
たしかに、test2のみ長いコードになりました。
シフト演算はたしかに高速であるということですよね?

・・・で、問題は配列の添え字が
・2のべき乗
・そうでない場合
この実行速度の比較なんですが・・・どう繋がるんでしょう・・

私はあほなんでしょーか。
183181:05/02/02 21:52:00
↑動かん
何で?
184デフォルトの名無しさん:05/02/02 21:53:37
>>181=183
コンパイルエラーがでるの?
実行時エラーが出るの?
実行時エラーは出るけどまともな結果がでないの?
185デフォルトの名無しさん:05/02/02 21:56:20
エラー E2451 未定義のシンボル pm(関数 main )
エラー E2451 未定義のシンボル bango(関数 main )
エラー E2451 未定義のシンボル p_name(関数 main )


参考書の通りにやってるんだけどなー
186181:05/02/02 21:57:06
>>184コンパイルエラーでつ
187デフォルトの名無しさん:05/02/02 21:59:59
>>182
配列の添え字って
char* p;
int i;
p[16*i] = 0;
ってのは
p+(16*i)なわけだから
p+(i << 4)
と表現できるでしょ
188デフォルトの名無しさん:05/02/02 22:00:42
別のスレに池
189デフォルトの名無しさん:05/02/02 22:04:11
シフト演算が高速なのは工程数より
レジスタがどういう処理行うかって問題じゃないかぁ…
明らかに加算するよりbitシフトのが速そうな気がするじゃん
190デフォルトの名無しさん:05/02/02 22:08:35
配列の要素をアクセスするのにシフト使う?

char image[256*256];
みたいなんだったらシフト&マスクで高速化できる場面もありそうだけど。
191デフォルトの名無しさん:05/02/02 22:14:39
>struct staion *p_m1;
192デフォルトの名無しさん:05/02/02 22:56:49
このコードは移植性がありますか?

#include <stdio.h>          
void f(int a);              
void f(int a)              
{                          
  printf("a = %d\n", a);    
}                          
                           
int main(void)              
{                          
  void (*x)(int, int);      
  x = (void (*)(int, int))f;
  x(1, 2);                  
  return 0;                
}                          
193デフォルトの名無しさん:05/02/02 23:02:16
ない
194デフォルトの名無しさん:05/02/02 23:11:40
嘘臭えアル
195173:05/02/02 23:13:12
例えば、二次元配列を一次元で表現するとして
int a[16][16];
これを
int a[256];
ってやるってことで、要素(6,8)にアクセスするときに
a[6][8]
ってやるところを
a[0x68]
ってやったりはしてます。
この辺とは関係ないんでしょうか・・・。
196デフォルトの名無しさん:05/02/02 23:14:02
移植性って言っても対象が解からないと意味なし。
197デフォルトの名無しさん:05/02/02 23:14:49
>>195
それは関係ありませんよー にゃんにゃん
198173:05/02/02 23:15:32
>>181
えっと、

struct staion *p_m1;
     ~~~~~~~
これはstationじゃないですか?
199173:05/02/02 23:17:59
>>195
うー。ということは配列の添え字に2のべき乗を使う意味は
無いということなんでしょうか・・・?
200デフォルトの名無しさん:05/02/02 23:20:30
>>199
特別な使い方をしない限り、ない。
201173:05/02/02 23:25:46
>>質問に答えてくれたみなさま
有難うございました!勉強になりました。

実は明日までにレポートを書き上げる必要があって、
てんやわんやです。

がんばります!それでは。
202デフォルトの名無しさん:05/02/02 23:51:03
>>197
その口調、やめてくれないか?
すごく気持ち悪い
203デフォルトの名無しさん:05/02/02 23:55:20
>202
確かに。
目の前にいて、かつ、不細工や奴が言ってたら、条件反射で顔面殴りそうだ。
204デフォルトの名無しさん:05/02/02 23:57:48
うるさいぼけー にゃんにゃん
205デフォルトの名無しさん:05/02/02 23:58:48
はきゅーん
206デフォルトの名無しさん:05/02/03 00:01:37
>>202
ひどいよー にゃんにゃん
207大原ゆき:05/02/03 00:02:54
わかりました。
次回からはにゃんにゃん抜きで書きます。
208デフォルトの名無しさん:05/02/03 03:44:12
わかりました。
次回からはにゃんにゃん抜きで書きますにゃん
209デフォルトの名無しさん:05/02/03 03:45:17
-gついててもオプティマイズオプションは有効なままのほうが
便利なときって、どんなとき?
210デフォルトの名無しさん:05/02/03 05:02:06
>>209
デバッグが終わったことになっていて、実稼働を行なう時に、
core吐いて止まることが予想出来る場合、その時調べやすい
211デフォルトの名無しさん:05/02/03 06:30:34
1次元配列と2次元配列でたとえば
int a[6],b[2][3]を確保して
a[0]とb[0][0]、a[1]とb[0][1]、a[2]とb[0][2]、
a[3]とb[1][0]、a[4]とb[1][1]、a[5]とb[1][2]が
それぞれ同じアドレスを参照してa[0]を変えたらb[0][0]も一緒に中身が変わるようにしたいんだけど

#include <stdio.h>
void main(void)
{
int *a[2];
int b[6];

a[0]=&b[0];
a[1]=&b[3];
}

って書き方でいいかな?
なんか問題ある気がするんだけど他にいい方法ないかな?
あとポインタにするのは2次元配列のほうにしてほしいのよ
212181:05/02/03 07:50:27
>>191>>198

えっとね・・・

・・・釣ってきますgj
213デフォルトの名無しさん:05/02/03 08:16:41
>>211
ポインタと配列の箱の絵でも書いて、じっくり考え直した方がよい。
214デフォルトの名無しさん:05/02/03 09:46:26
#include <stdio.h>

int main(void)
{
int a = 0;
switch (a) {
case 0:
printf("a is 0.\n");//この行をコメントにすると、コンパイルエラー
int b = 2;
printf("b is %d.\n", b);
break;
case 1:
printf("a is 1.\n");
}
return 0;
}
このソース(swtest.c)なんですが、
このままだと、問題なくコンパイル(gcc -Wall swtest.c)できるのに、
printf("a is 0.\n");
の行をコメントにしてからコンパイルしようとすると、
swtest.c: In function `main':
swtest.c:9: error: parse error before "int"
swtest.c:10: error: `b' undeclared (first use in this function)
swtest.c:10: error: (Each undeclared identifier is reported only once
swtest.c:10: error: for each function it appears in.)
となって、エラーとなってしまいます,,,。
どうしてなんでしょうか?(環境はMacOSX10.3+GCC3.3です。)
215デフォルトの名無しさん:05/02/03 09:54:50
どこでも宣言ってことはC99にしてるのかね。
case自体はラベルだから、gotoのラベルと一緒で
次に「文」が続く必要があるけど、宣言って、文じゃなかったかな。
覚えてないや。
216デフォルトの名無しさん:05/02/03 10:11:50
>>215
ありがとうございます。
同じswitchでもJavaとは微妙に違うんですね。
勉強になりました。
217デフォルトの名無しさん:05/02/03 12:54:22
かなり大きいソース公開サイトがあった気がするんですが、名前を思いだせません。
教えてください。
218CodeGuru?:05/02/03 12:58:53
>>217
スレ違い。
219デフォルトの名無しさん:05/02/03 13:01:11
>>217
sourceforge
koders
220デフォルトの名無しさん:05/02/03 13:10:05
>>218-219
そうやって教えると、>>217 はいつまで経っても莫迦のまま。
221デフォルトの名無しさん:05/02/03 13:12:52
>>220
お前が馬鹿だ。
222デフォルトの名無しさん:05/02/03 13:15:09
>>221
園児の脊髄反射乙。
223デフォルトの名無しさん:05/02/03 13:34:56
>>222
なんだとこの
224デフォルトの名無しさん:05/02/03 14:18:23
217がバカだと何か困ることがあるのか
225デフォルトの名無しさん:05/02/03 14:43:42
>>224
そりゃ困る。
馬鹿が伝染るからな。
226デフォルトの名無しさん:05/02/03 14:43:51
>>219
ありがとうございます。
後者の存在は初めて知りました。
227218:05/02/03 15:06:54
漏れはありがたくなかったらしい。
228デフォルトの名無しさん:05/02/03 15:17:53
>>227
ほら、言わんこっちゃない…
229デフォルトの名無しさん:05/02/03 15:46:33
>>224
業界に入られた時に非常に困るだろ。
230デフォルトの名無しさん:05/02/03 15:53:11
231デフォルトの名無しさん:05/02/03 15:55:39
>>225
伝染すると誰がどう困るのか
232デフォルトの名無しさん:05/02/03 16:07:12
>>231
どんどん伝染を繰り返し、馬鹿が増える。
馬鹿が増えると文明を維持することが困難になる。
文明を維持することが困難になると人類の繁栄に影響がでる。
人類の繁栄は最優先事項なので、馬鹿が伝染すると困る。
233デフォルトの名無しさん:05/02/03 17:28:19
ある可変引数関数の引数を、他の可変引数関数の引数に指定する事はできます?

void pp(char *fmt, ...) {
printf(fmt);
}

とか。



234デフォルトの名無しさん:05/02/03 17:36:45
>>233
printfの場合はvprintfを使え。
自作の関数の場合は初めからprintf/vprintfの用にva_list版も作って置け。
235233:05/02/03 18:17:53
>>234
わかりました。ありがとうございます。
236デフォルトの名無しさん:05/02/03 22:15:39
>>227
名前なんかいちいち見ないよ
237デフォルトの名無しさん:05/02/03 22:21:23
あなたが、3つのドアの1つを選んで賞品を獲得するゲーム番組に出ているとします。
ドアの1つには賞品の車があります。残りの2つのドアはハズレでヤギがいます。
あなたがドアの1つ、たとえば1番ドアを選びます。
司会者は、それらのドアに何があるかを知っており、ヤギのドアを1つ、例えば3番ドアを開けてみせます。
そこで司会者があなたに、「2番ドアに変更してもいいですよ」といいました。
2番ドアに変えたほうがいいのでしょうか。


↑の確率を試行回数1万回くらいで実験してみたいんですが
どんな風に書けばいいの?
238デフォルトの名無しさん:05/02/03 22:47:28
>>237
ごく単純なマルコフ過程。
239デフォルトの名無しさん:05/02/03 22:48:36
変えた時と変えない時?
変えた時は1/2で変えない時は1/3。以上
240デフォルトの名無しさん:05/02/03 22:50:42
>>239
はい?もう一度良く考えて。
241デフォルトの名無しさん:05/02/03 22:55:27
>>240
え”!!違うの?ずっとそうだと思ってた
242デフォルトの名無しさん:05/02/03 22:56:20
3人の囚人A、B、Cがいる。三人とも処刑されることになっていたが、
王子が結婚するというので王様が一人だけ恩赦にしてやることになった。
誰が恩赦になるのか決定されたが、まだ囚人たちには知らされていない。
結果を知っている看守に、囚人Aが『BとCのうち、どちらかは必ず処刑
されるのだから、処刑される一人の名前を教えてくれても、私に情報を
与えることにはならないだろう。一人を教えてくれないか。』と頼んだ。
看守は、その言い分に納得して『囚人Bは処刑されるよ』と教えてやった。
囚人Aは、「はじめ自分の助かる確率は1/3だった。いまや助かるのは
自分とCだけになったので、助かる確率は1/2になった」と喜んだ。
さて、看守の返事を聞いた後の囚人の助かる確率はどれだけか?
243デフォルトの名無しさん:05/02/03 22:58:15
スレ違い
Cの話にアレンジできない低脳は氏んで
244デフォルトの名無しさん:05/02/03 22:59:20
質問です。
文字列とポインタに関してです。

ポインタの文字列というものを勉強しているとき、
char *ptr = "123";
ptr = "456";
と途中で書き換えられる。
と書いてありました。
しかしもう少しよんでいくと、ポインタの文字列リテラルの中身を書き換えてはいけない
と書いてありました。
いったいどういうことでしょうか?

ポインタで文字列を扱った場合、書き換えてはいけないのですか?
245デフォルトの名無しさん:05/02/03 23:00:27
>>242
237と問題違うし
246デフォルトの名無しさん:05/02/03 23:00:30
Cスレイラネごみ
247デフォルトの名無しさん:05/02/03 23:00:56
>>243
アレンジできてないのはお前一人
248デフォルトの名無しさん:05/02/03 23:01:18
>>237
どう言う確立で司会者が変更して良いというのか。
249デフォルトの名無しさん:05/02/03 23:01:34
>>244
どこに書いてた?
250デフォルトの名無しさん:05/02/03 23:02:42
>>249
明解C言語という本です。
251デフォルトの名無しさん:05/02/03 23:02:48
>>242
1/3
252デフォルトの名無しさん:05/02/03 23:02:51
何を書き換えた?か。
253デフォルトの名無しさん:05/02/03 23:03:01
>>237
司会者がどこが当たりか知っているのか?
それによっては条件が変わってくるぞ
254デフォルトの名無しさん:05/02/03 23:05:14
>>244
ソレはptrは書き換わってるが、"123"を書き換えてるわけじゃなく。
255デフォルトの名無しさん:05/02/03 23:05:28
>>253
書いてあるだろよ
256デフォルトの名無しさん:05/02/03 23:05:34
選んだ時点で1/3。
で、ハズレを教えてもらって残り2択となり、
選んだものがハズレの場合、変えた時点で
当たるわけだから、変えたときは2/3かな?
違う?

何言ってるかわからなくなった。
orz
257244:05/02/03 23:07:00
>>254
456という文字列の先頭ポインタをさしているんですよね?
それは456という文字が連続してあるからでしょうか?
これが457だとエラーになるのでしょうか?
それならなっとくが出来ます。
258デフォルトの名無しさん:05/02/03 23:08:02
>>257
氏ねばいいのに
259デフォルトの名無しさん:05/02/03 23:08:48
>>237
変えるか変えないかの二択の時1/3、
再分配すると1/2じゃないかね
260デフォルトの名無しさん:05/02/03 23:09:41
>>258
御前が市ね。スレの雰囲気を崩すな。
低脳は困る。
261デフォルトの名無しさん:05/02/03 23:10:25
>>244

char *ptr = "123";

ptr = "456"; /* できる */
strcpy(ptr, "456"); /* できない */

ということじゃないの。
262デフォルトの名無しさん:05/02/03 23:11:28
早くアレンジしろ!!
コード書けねえバカクズばっかり!!!!!!!!!!!
263デフォルトの名無しさん:05/02/03 23:11:55
char *ptr = "123";

ptr = "456"; /* できる */
*ptr = '4'; /* できない */
264デフォルトの名無しさん:05/02/03 23:13:18
*ptr = '456';
265244:05/02/03 23:15:55
なるほど!
よくわかりました。ありがとうございました。
266デフォルトの名無しさん:05/02/03 23:17:20
char *ptr= "早くアレンジしろ!!\nコード書けねえバカクズばっかり!!!!!!!!!!!";
267デフォルトの名無しさん:05/02/03 23:31:55
>>265
そんなんで分かっちゃだめだよん
268デフォルトの名無しさん:05/02/03 23:34:34
>>237

はじめにハズレを選んでいた場合、変えたら必ず当たる。
はじめにあたりを選んでいた場合、変えたら必ず外れる。

で、はじめにハズレを選ぶ確率は2/3なので、
変えた場合、必然的に2/3で当たることになる。

実験するまでもなくね?
269デフォルトの名無しさん:05/02/03 23:40:51
【文字列リテラル】
"January" や "February" のように " " で囲んだ文字列を
「文字列リテラル」又は「文字列定数」と呼びます。
文字列リテラルは「定数」であり、本質的に値を変えないものです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
しかし、値を変えないはずの文字列リテラルですが、この単元で説明したように
ポインタを用いて指定をした場合、その変更が可能になってしまいます。
そのため、ANSI規格では文字列リテラルを「定数」とは呼びません。

たとえば、

char *p = "ABC";
strcpy(p, "DEF");

とした場合、処理系によっては文字列の書き換えが可能になります。
(処理系によっては動作不能になります。)
文字列リテラル内の文字列を変更してよいかどうかは、処理系に依存しますが、
ANSI規格では、文字列リテラルの変更は未定義(何が起こるかわからないということ)です。
http://www9.plala.or.jp/sgwr-t/c/sec10-3.html
270デフォルトの名無しさん:05/02/03 23:49:42
>>244

char *ptr = "123";
ptr = "456";

おそらくこれで、文字列が書き換わっていると勘違いしていると思われる。

char *org_ptr = "123";
char ptr = org_ptr;
ptr = "456";
printf("%p, %p\n", org_ptr, ptr);

これを試してみれ。文字列が書き換わっているんじゃなくてアドレスが
書き換わっているだけだ。
271デフォルトの名無しさん:05/02/03 23:56:47
リテラルってこんな感じのことを代わりにやってもらうんだっけ?

char *point;
point=( char *)malloc( sizeof(char) * (strlen(str)+1) );
strcpy(point,str);
272デフォルトの名無しさん:05/02/03 23:58:42
そんな風に思ってるバカはお前だけ
273デフォルトの名無しさん:05/02/04 00:00:10
(´-`).。oO(どうやったらこの流れから>>271のような発想が出てくるんだろう……)
274デフォルトの名無しさん:05/02/04 00:00:38
僕もリテラルでつくった文字列は共有される場合があるから書き換えるとまずいと聞いた時があります
結局大丈夫なんですか?
275デフォルトの名無しさん:05/02/04 00:03:20
>>274
そんなレベルの問題じゃない
276デフォルトの名無しさん:05/02/04 00:04:12
>>274
>>273

日本語も理解できない池沼ですか?
277デフォルトの名無しさん:05/02/04 00:05:13
リテラルっておいしいんだよ。煮つけにしたりとか。はちみつ塗って焼いてもいいね。
278デフォルトの名無しさん:05/02/04 00:05:58
>>271
まぁ大体そんな感じだな。
279デフォルトの名無しさん:05/02/04 00:07:07
>>275
ま、実際に規格を作る段階で>>274のような実装の処理系があるから
ということで検討がなされたんだけどね。

規格となってしまった現在ではそういうレベルの問題じゃないというのは同意。
280デフォルトの名無しさん:05/02/04 00:11:19
ビットマップ画像処理プログラムで、上下反転を行うと画像によってはエラーが出てしまいます。
どうやら画像サイズに関係しているみたいです。(1024*768 160*120ならOK,800*600 1024*819ならNG)
memcpyでエラーが発生してるってことはデバッガで確認しましたが、理由がわかりません。
あくまで推測ですが、ポインタが怪しいかと。

環境
OS Windows
VC.NET

ソース一部。
前略
typedef struct{
unsigned char b;
unsigned char g;
unsigned char r;
}pixel;
中略
void henkan_mirrou(BITMAPINFOHEADER *bminfo, pixel *img){
int x,y;
pixel cache;

for(x=0;x < bminfo->biWidth;x++){
for(y=0;y < (bminfo->biHeight/2);y++){
memcpy( &cache, (img + (y*bminfo->biWidth) +x) , sizeof(pixel) );//←←←エラー(?)
memcpy( (img + (y*bminfo->biWidth) +x) , (img + (bminfo->biHeight-y) * bminfo->biWidth +x) , sizeof(pixel) );
memcpy( (img + (bminfo->biHeight-y) * bminfo->biWidth +x) , &cache, sizeof(pixel) );
}
}
}

以上。
ご教授下さい。
281デフォルトの名無しさん:05/02/04 00:11:24
>>278
アフォ?
282デフォルトの名無しさん:05/02/04 00:14:17
>>280
エラー出してるんなら原因わかるでしょ。
283デフォルトの名無しさん:05/02/04 00:16:18
>>279
レベルが違うとはどうゆう違いなのでしょうか?
244さんが言う「ポインタの文字列リテラルの中身を書き換えてはいけない」
とは

char *p = "\n";
*p = '\a';

printf("\n");

がおかしくなる処理系の場合を指しているんじゃないんですか?
284デフォルトの名無しさん:05/02/04 00:18:48
おかしくならない処理系でも書き換えてはいけない。
285デフォルトの名無しさん:05/02/04 00:21:05
何でこんなバカなの…
286280:05/02/04 00:21:53
>>282
解決方法がわからないから困ってるんです。

追加
・別関数の左右反転は正常にできる。
・画像サイズが大きいと発生というわけでも、小さいから発生と言うわけでもないみたいです。
287デフォルトの名無しさん:05/02/04 00:24:23
>>280
(1) y=0 の時に bminfo->biHeight-y はどこを指す?
(2) 4バイト境界の罠
288デフォルトの名無しさん:05/02/04 00:25:16
>>286
エラーとは何?
memcpyの前後で書かれるべき値が書かれてないってこと?
289280:05/02/04 00:35:48
>>287
(1)の観点で、
bminfo->biHeight-y -1
としてみました。
解決できました。ありがとうございました。
290デフォルトの名無しさん:05/02/04 00:41:12
union {
 int a;
 struct {
  int b1;
  int b2;
 } b;
};

という構造で a と b1 は同じ領域を占めることって保証されてますか?
291デフォルトの名無しさん:05/02/04 00:42:20
>>290
保証されません。
292デフォルトの名無しさん:05/02/04 00:50:21
union {
 struct {
  int a1;
  int a2
 } a;
 struct {
  int b1;
  int b2
 } b;
};

でもこの場合a1とb1が同じ位置になることは保証されますよね
どうして結果が違うんでしょう??
293デフォルトの名無しさん:05/02/04 01:05:45
unchi
294デフォルトの名無しさん:05/02/04 09:22:15
コンパイルした後のexeファイルからソース見ることってできるます?
295デフォルトの名無しさん:05/02/04 09:23:13
コンパイルした後のexeファイルからソース見ることってできるます?
296デフォルトの名無しさん:05/02/04 09:23:34
できるません。
297デフォルトの名無しさん:05/02/04 10:06:01
source.c
----------------
#include <stdio.h>

int main(void)
{
int c;
FILE *fp = fopen("source.c", "rb");
while((c = fgetc(fp)) != EOF){
fputc(c, stdout);
}
fclose(fp);
return 0;
}
----------------
298デフォルトの名無しさん:05/02/04 10:33:29
"b"がださすぎ。
299デフォルトの名無しさん:05/02/04 10:35:20
exeって書いてあったからね
300デフォルトの名無しさん:05/02/04 10:41:50
>>299
それがどう関係する?
301デフォルトの名無しさん:05/02/04 10:42:53
さっき人にwhile文の無限ループ時にはいる
1って何型?って聞かれたんですが・・・。
何型なんでしょう?
302デフォルトの名無しさん:05/02/04 10:48:59
>>301
while 云々関係なく「1」はint型
303デフォルトの名無しさん:05/02/04 10:49:05
int
304デフォルトの名無しさん:05/02/04 10:53:51
実行している自分自身の絶対パスを取得する方法って何でしょう?
LINUX版の「_pgmptr」とかないっすか?
305デフォルトの名無しさん:05/02/04 11:00:11
お前の環境はなんなんだ
306デフォルトの名無しさん:05/02/04 11:07:44
>>304
標準的な方法はない
307デフォルトの名無しさん:05/02/04 11:10:00
>>304
argv[0]
308デフォルトの名無しさん:05/02/04 11:15:47
「頼むから>>1のFAQに一通り目を通してくれよ」と切に思う今日このごろ
309デフォルトの名無しさん:05/02/04 12:53:43
>>307
それはOSに依存してるよ〜
UNIX系環境ではコマンドラインの一番目が来ちゃう
310デフォルトの名無しさん:05/02/04 13:05:37
GetModuleFileNameみたいなのがあればOK
UNIX系環境では知らん
311デフォルトの名無しさん:05/02/04 13:41:57
もう構造体とかオブジェクト指向がどうとかポインタとか
さっぱりわかりません
分けわっかんなああああああああああああああい
312デフォルトの名無しさん:05/02/04 13:47:11
>>311
あなたはプログラミングに向いていません。
313デフォルトの名無しさん:05/02/04 13:50:50
>>312
プログラミング関係ないよ。
314デフォルトの名無しさん:05/02/04 13:51:04
>>312
それを言うなぁ!!
日曜プログラマなのでちょこっとづつ理解していくさT〜T
315デフォルトの名無しさん:05/02/04 13:52:46
>>314
にゃんにゃん
316デフォルトの名無しさん:05/02/04 13:54:15
>>314
大原ゆきに教えてもらえ。
317デフォルトの名無しさん:05/02/04 13:56:21
>>315
にゃふうん

>>316
だれだよソレT〜T
318デフォルトの名無しさん:05/02/04 13:58:26
319デフォルトの名無しさん:05/02/04 14:05:23
>>311
構造体…一緒に使うデータなんかは纏めておいたほうが楽だよね?
オブジェクト指向…構造体についでにそれの処理法も纏めておくと
           中でなにやってるか気にせずに済んで楽♪
ポインタ…これはC言語及びC++言語のある意味最大の特徴
      俺は理論だけじゃ完全に理解できなかったので
      デバッガ使って何やってるか追い駆けた
320デフォルトの名無しさん:05/02/04 14:05:29
構造体とオブジェクト指向はなんとなーくわかった
クラスがどーとかうすーい記憶が。
ポインタなんて一生わかんね!
わかんなくてもAPI使えるからいいもん!

>>318
にゃん抜きな人なのね
ありがと。
321デフォルトの名無しさん:05/02/04 14:09:56
>>319
      ,,、,、、,,,';i;'i,}、,、
       ヾ、'i,';||i !} 'i, ゙〃
        ゙、';|i,!  'i i"i,       、__人_从_人__/し、_人_入
         `、||i |i i l|,      、_)
          ',||i }i | ;,〃,,     _) 汚物は消毒だ〜っ!!
          .}.|||| | ! l-'~、ミ    `)
         ,<.}||| il/,‐'liヾ;;ミ   '´⌒V^'^Y⌒V^V⌒W^Y⌒
        .{/゙'、}|||//  .i| };;;ミ
        Y,;-   ー、  .i|,];;彡
        iil|||||liill||||||||li!=H;;;ミミ
        {  く;ァソ  '';;,;'' ゙};;彡ミ
         ゙i [`'''~ヾ. ''~ ||^!,彡ミ   _,,__
          ゙i }~~ } ';;:;li, ゙iミミミ=三=-;;;;;;;;;''
,,,,-‐‐''''''} ̄~フハ,“二゙´ ,;/;;'_,;,7''~~,-''::;;;;;;;;;;;;;'',,=''
 ;;;;;;;;''''/_  / | | `ー-‐'´_,,,-',,r'~`ヽ';;:;;;;;;;, '';;;-'''
'''''  ,r'~ `V ヽニニニ二、-'{ 十 )__;;;;/ 
322デフォルトの名無しさん:05/02/04 14:10:41
>>319
オブジェクト指向の説明間違っているぞ。
323デフォルトの名無しさん:05/02/04 14:11:04
>>319
すんげー噛み砕いて教えてくれた!
ありがとう!
ポインタのお勉強をしてみるかぁ
324デフォルトの名無しさん:05/02/04 14:18:53
俺はi386アセンブリのソース書くようになって初めてポインタを理解した。
325デフォルトの名無しさん:05/02/04 14:23:15
基本情報用にCASLIIをやってポインタがどういうものかわかった
326デフォルトの名無しさん:05/02/04 14:40:11
俺の姉さんはボインだ
327デフォルトの名無しさん:05/02/04 14:42:33
328デフォルトの名無しさん:05/02/04 15:02:47
ポインタ関連で質問。

char *str[]={"abcdef", "ghijkl", "mnopqr"};

と定義したとき「b」だけを出力するならstr[0][1]でいいと参考書にあるのですが
これだとコンパイラは通っても実行結果が出てきません。
どのようにしたら「b」だけを出力できるのですか?
329デフォルトの名無しさん:05/02/04 15:07:26
>>328
どうやって出力しましたか?
ポインタはきっと関係ない。
330デフォルトの名無しさん:05/02/04 15:08:12
>>328
printfで出力するのなら%sではなく%cにしろ。
331328:05/02/04 15:11:34
>>329
pritnf("%s", str[n][1]);

です。nはint型で0が入ってます。
ちなみにstr[n]に置き換えると「abcdef」が出力できました。
332328:05/02/04 15:15:44
・・・と書いてるうちに>>330が答えてくれましたね。
ちゃんとできました。ありがとうございます!
333デフォルトの名無しさん:05/02/04 15:30:17
>>330のエラー原因予測能力に感動した!
334デフォルトの名無しさん:05/02/04 15:31:34
>>328
とりあえず、「文字」と「文字列」の区別は付けた方が良いよ。
335デフォルトの名無しさん:05/02/04 15:31:47
↓小泉乙
336デフォルトの名無しさん:05/02/04 15:33:09
私は>>328の質問にもれなく答えたつもりですよ?
337デフォルトの名無しさん:05/02/04 15:37:58
構造体って
昔gotoでがちゃがちゃ遊んでたベーシックとは違って
あぁあわかっちゃったT-T
338デフォルトの名無しさん:05/02/04 17:44:09
構造改革はやくやれ!
339デフォルトの名無しさん:05/02/04 19:00:18
フラグの指定を FLAG1 | FLAG2 | FLAG3 と書くのはおかしいと思います。
FLAG1とFLAG2とFLAG3という意味なんだから
FLAG1 & FLAG2 & FLAG3 が正しいですよね。
C言語作った人は英語を知らなかったんでしょうか?
340デフォルトの名無しさん:05/02/04 19:10:42
fool
341デフォルトの名無しさん:05/02/04 19:21:58
342デフォルトの名無しさん:05/02/04 19:22:43
>>339
おまえはFLAG1+FLAG2+FLAG3と書いてればよし
343デフォルトの名無しさん:05/02/04 19:25:59
typedef struct tp{
unsigned int type0:1;
unsigned int type1:1;
unsigned int type2:1;
}TYPE;


0:1の「:」って何でつか??
344デフォルトの名無しさん:05/02/04 19:30:26
何でしょう、それはねー、コロン(Colon)でいいか?
345デフォルトの名無しさん:05/02/04 19:32:36
>>343
虫眼鏡で拡大してよく見てみろ

 ビット

フィールド

と書いてあるのが分かるから。
346343:05/02/04 19:37:25
コロンでつ。

ビットフィールド?
347デフォルトの名無しさん:05/02/04 19:42:41
凄いね。絶対自分で検索なんてするものかという強烈な意思が感じられるよ。
将来大物になるよきっと。
348343:05/02/04 19:55:32
   ┌type0(1ビット
TYPE[][][]─type2(1ビット
    └type1(1ビット

って書いてあるんだけど何のことか分からん
349デフォルトの名無しさん:05/02/04 19:56:51
わかんないなら使うな!
350デフォルトの名無しさん:05/02/04 20:00:32
2ch は、いまは google に並ぶ情報源(品質はともかく)
どっちを選ぶかは個人差の影響が強く出る

2ch で聞く場合の「ぐぐれ」は
google を使う場合で言えばデッドリンクに相当する承知のノイズ
言うだけ無駄だってことに気付いていないピエロは 2ch のコメディアンw
351デフォルトの名無しさん:05/02/04 20:03:17
>>350
僕のサイトに来てください!

1:192.168.0.774:05/01/25 19:45:33 ID:zJhPTC7W
http://www.ric.hi-ho.ne.jp/yosuke-07215021/

2:192.168.0.774:05/01/25 19:47:31 ID:s5U6TTtG
さっさと削除依頼出せ糞

3:192.168.0.774:05/01/25 20:38:35 ID:LzJU6YiX
先週ホムペを作りましたぁ(●´ω`●)ゞ エヘヘ♪
ハムスター中心のサイトですが、気に入ってくれたら嬉しいデ━━(●´∇`)b━━ス
サイト名ゎ☆ハム福餅★
http://www.geocities.jp/asyu0508/です
是非来て.+:。(●ゝω・)〜☆NE!!。゚+.
相互も募集chu━━(・´3`・)━━!!!

4:192.168.0.774:05/01/26 23:11:08 ID:x4sVVaC/
あまり来ないでくれよ。
http://room.pic.cx/bbs02/?i=yohtaso_inc

5:192.168.0.774:05/01/27 16:42:41 ID:zoFAVlN1
どんどん来てください。

http://www.aspara-media.com/
352デフォルトの名無しさん:05/02/04 20:04:07
やはり、ハードウェアから見た演算装置を教えないゆとり教育の弊害だな。
353デフォルトの名無しさん:05/02/04 21:22:42
ビットフィールドなんて実務じゃつかわん
覚えたてで使いたがる低スキルがいるがやめれ
制御系は使うかもしれんが
354デフォルトの名無しさん:05/02/04 21:25:11
>制御系は使うかもしれんが

低スキルってオマエ・・・・w
355デフォルトの名無しさん:05/02/04 21:51:27
>>353
使わんってw、32ビットを丸々フラグで良いよ
356355:05/02/04 21:53:58
つまり、自分が使わない範囲内においては使わない。
というこった。
357355:05/02/04 21:59:00
つまり、俺理論を勝手に一般化するのは馬鹿のやること。
というこった。
358デフォルトの名無しさん:05/02/04 21:59:51
わざわざビットフィールドなんてつかわんだろ
ビット演算でたりるから
359デフォルトの名無しさん:05/02/04 22:02:34
だって、制御系だって、メガバイトオーダーでコンパクション
必要ないだろう?、昔は2Kバイト境界でチップが増えるし、1Mバイトとから
2Mバイトの境界は楽だよな
360デフォルトの名無しさん:05/02/04 22:04:05
ttp://www.hidecnet.ne.jp/~sinzan/tips/c/c_tip03.htm
このページのワイルドカードを含む文字列比較の関数なんですが、
case '*'のところがよくわかりません。
どなたか解説お願いします。
//*********************************************************
// 第1引数にワイルドカードを含む文字列を指定する。
// 2つの文字列が一致すれば真、さもなくば偽を返す。
//*********************************************************
int StrMatch( const char *ptn, const char *str )
{
switch( *ptn )
{
case '\0':
return '\0' == *str;
case '*':
return StrMatch( ptn+1, str ) || (('\0' != *str) && StrMatch( ptn, str+1 ));
case '?':
return ('\0' != *str) && StrMatch( ptn+1, str+1 );
default:
return ((unsigned char)*ptn==(unsigned char)*str) && StrMatch( ptn+1, str+1 );
}
}//StrMatch
361デフォルトの名無しさん:05/02/04 22:12:54
そういうのはlispででもやってろ
362デフォルトの名無しさん:05/02/04 22:14:43
多倍長の乗算を高速フーリエ(FFTとかいうやつ)で12*2=24ってやりたいんだけど

int n=4;
double theta=3.14159265358979323846*2/n;
double ar1[]={0,0,1,2};//実数
double ar2[]={0,0,0,2};
double ar3[]={0,0,0,0};
double ai1[]={0,0,0,0};//虚数
double ai2[]={0,0,0,0};
double ai3[]={0,0,0,0};
fft(n,theta,ar1,ai1);//ar1,ai1をFFT変換
fft(n,theta,ar2,ai2);//ar2,ai2をFFT変換
for(int i=0;i<n;++i)
{
ar3[i]=ar1[i]*ar2[i]/n;
ai3[i]=ai1[i]*ai2[i]/n;
}
fft(n,-theta,ar3,ai3);//FFT逆変換

ってやるとar3が{2,1,2,1}ってなってしまう。
期待してるのは{0,0,2,4}です。
単純に繰り上がりの処理とかもなしでかまいません。
どこが間違ってるのか解説してくれる方いませんか?
お願いします。

ちなみにfftって関数は
ttp://momonga.t.u-tokyo.ac.jp/%7Eooura/fftman/ftmn1_2.html#sec1_2
からコピーしたのを使っています。
363デフォルトの名無しさん:05/02/04 22:20:36
fftを作った人に質問するのが道理、
もし答えられないならここに来い、かまってやる
364デフォルトの名無しさん:05/02/04 22:23:33
fftつくったひとのHPみてもぜんぜん理解できなくて
すごそうな人なので怖くて聞けませんorz
かまってください。お願いします
365デフォルトの名無しさん:05/02/04 22:26:06
>>364
断る
366デフォルトの名無しさん:05/02/04 22:27:55
>>364
J.W.CooleyとJ.W.Tukeyから派生したもの以外知らない。
だよ
367デフォルトの名無しさん:05/02/04 22:30:43
>>365
>>366
そうですか。ありがとう。
もうすこし自分でがんがるとです
368デフォルトの名無しさん:05/02/04 22:35:14
>>360
*がなかなか簡潔で良いね。少し感心した。
369343:05/02/04 23:14:50
>>353
確かに漏れは低スキルだけど
基本情報の勉強中に突然出てきたから分からなかったのだ
370デフォルトの名無しさん:05/02/04 23:16:19
>>369
ビットフィールドはさらっと流すだけでいいと思う。
おそらく一生使うことはない。
万が一見かけたときに「あー、こんなのがあったな」って思い出す程度で十分っす。
371360:05/02/04 23:16:51
>>368
解説きぼんぬ。わかりません.orz.
372デフォルトの名無しさん:05/02/04 23:19:46
環境依存なのが痛い。
373デフォルトの名無しさん:05/02/04 23:20:52
>>360
条件(1) StrMatch( ptn+1, str ) ptn+1 と str がマッチすれば成功。
(例)ptn:"*ABC", str:"ABC" ・・・ ptn+1:ABC, str:ABC だから成功。

条件(2) (*str!='\0') && StrMatch( ptn, str+1 ) strの最後まで、strを(再帰で)進める。
(例) ptn:"*ABC", str:"xyzABC"
・・・ str:"yzABC" --> "zABC" --> "ABC" ここで条件(1)が成立。
374360:05/02/04 23:24:45
>>373
ありがとうございます。よくわかりました。
375デフォルトの名無しさん:05/02/04 23:41:03
ビットフィールド毛嫌いする香具師って、使いこなせない怖がりなのかね。
376デフォルトの名無しさん:05/02/04 23:42:20
>>375
馬鹿? 4バイトくらい使えない貧乏コンパイライラネ
377デフォルトの名無しさん:05/02/04 23:52:40
>>375
確かにそれは中山道に遊女なしと言うくらいだからな。
378デフォルトの名無しさん:05/02/05 00:22:49
「vectorは配列として実装され、イテレータは唯のポインタ」
これってちゃんとansiとかの規格で決まってるものなんでしょうか?

ansiの公式とかいってみたんですが、英語だし、Cのページにすら辿り付けません。
379デフォルトの名無しさん:05/02/05 00:26:03
スレ違い
380デフォルトの名無しさん:05/02/05 00:28:45
英語も読めない、日本語も読めない、使ってる言語すら知らない。
どうしようもない
381デフォルトの名無しさん:05/02/05 00:29:44
ごめんなさい。
382デフォルトの名無しさん:05/02/05 00:39:50
iteratorがpointerかはわからないけど
配列なのは決まってる。
というか、きまってなくて追加だか変更されたきがする
383デフォルトの名無しさん:05/02/05 00:44:17
>>382
いつからvectorがCに?
384デフォルトの名無しさん:05/02/05 00:47:14
>>378
#include <iostream>
#include <vector>

template <class T>
class Null {
    template <class U> struct Po { enum { isPointer = false }; };
    template <class U> struct Po<U*> { enum { isPointer = true }; };
public:
    enum { isPointer = Po<T>::isPointer };
};

int main()
{
    std::cout << std::boolalpha << Null<std::vector<int>::iterator>::isPointer << std::endl;

    return 0;
}
385デフォルトの名無しさん:05/02/05 00:51:01
だから、c、はいらない、c++もいらないでc++で十分、さようなら
386デフォルトの名無しさん:05/02/05 00:53:49
387デフォルトの名無しさん:05/02/05 01:16:30
Windowsでread/write lockを実現するAPIってなぬ?
ソラリスのrwlockしたい。
388デフォルトの名無しさん:05/02/05 01:20:13
>>387
この糞野郎
スレくらい適切な所を選べ
389デフォルトの名無しさん:05/02/05 01:33:10
>>388
ここじゃねぇべか?
う○こ産はどこさ行けばえぇだ?
390デフォルトの名無しさん:05/02/05 01:37:16
>>389
ここはC言語のスレであって、世にあるAPIの使い方のスレではないことに注意。
391デフォルトの名無しさん:05/02/05 01:51:54
>>390
別にいいじゃねえか
いちいち細かいんだよおまえ
392デフォルトの名無しさん:05/02/05 01:53:41
うさこちゃん
393デフォルトの名無しさん:05/02/05 02:00:50
>>391
プログラミングはもっと細かいぞ。
一字一句間違ってはいけないし、代入するとき変数の型が違ってもいけない。
しかも、1回や2回、演算回数が無駄に多いと修正すべきだと言われる。
394デフォルトの名無しさん:05/02/05 02:06:55
>>362
じこれす

int n=4;
double theta=3.14159265358979323846*2/n;
double ar1[]={0,2,5,6};
double ar2[]={0,0,0,4};
double ar3[]={0,0,0,0};
double ai1[]={0,0,0,0};
double ai2[]={0,0,0,0};
double ai3[]={0,0,0,0};
fft(n,theta,ar1,ai1);
fft(n,theta,ar2,ai2);
for(int i=0;i<n;++i)
{
ar3[i]=ar1[i]*ar2[i]-ai1[i]*ai2[i];
ai3[i]=ar1[i]*ai2[i]+ai1[i]*ar2[i];
ar3[i]/=n;
ai3[i]/=n;
}
fft(n,-theta,ar3,ai3);

にしたらうごいた。でも結果が10倍されてるの
なんでだろ〜
395デフォルトの名無しさん:05/02/05 02:13:15
ぎゃはは
396デフォルトの名無しさん:05/02/05 02:14:36
double theta=3.14159265358979323846*2/n;
397デフォルトの名無しさん:05/02/05 02:31:00
およそ3?
398デフォルトの名無しさん:05/02/05 02:33:35
ゆとり教育を受けてきた私に言わせると円周率は3だ。
399デフォルトの名無しさん:05/02/05 02:37:02
>>398
ゆとり教育を受けてないのがバレバレですが
400デフォルトの名無しさん:05/02/05 02:37:32
およそ400げと
401デフォルトの名無しさん:05/02/05 02:40:04
>>399
なぜだ、なぜ私が信じられない!!!
402デフォルトの名無しさん:05/02/05 02:40:52
自作自演乙
403デフォルトの名無しさん:05/02/05 02:46:22
piを実数に置き換えるなんて数学に対する冒涜だな
404デフォルトの名無しさん:05/02/05 02:47:39
405デフォルトの名無しさん:05/02/05 02:57:52
K&R高杉・・・
406デフォルトの名無しさん:05/02/05 03:08:16
外接、内接、無駄かもしれないが追い込め
407デフォルトの名無しさん:05/02/05 03:42:33
>>394
配列サイズは桁数の2倍必要、あと数字の並びが逆だと思う。256*4なら、

int n=6;
double theta=3.14159265358979323846*2/n;
double ar1[]={6,5,2,0,0,0};
double ar2[]={4,0,0,0,0,0};

でやってみそ。
408デフォルトの名無しさん:05/02/05 03:53:37
>>SIZEOF(TYPE)*KAZU
女でも分かるわ。?
409デフォルトの名無しさん:05/02/05 04:00:11
>>408
SIZEOF(KASU) == 408
410デフォルトの名無しさん:05/02/05 04:22:21
Strref entriesってなんですか?
411デフォルトの名無しさん:05/02/05 04:32:25
誤爆?
412407:05/02/05 04:41:00
>>394
試してみた。ごめん、そのfftは配列サイズが2のn乗でないとうまくいかない。n=6はダメ
桁あふれしなければ4のままで大丈夫だった。これで、1024が表示された。

int n=4, i;
double theta=3.14159265358979323846*2/n;
double ar1[]={6,5,2,0};
double ar2[]={4,0,0,0};
double ar3[]={0,0,0,0};
double ai1[]={0,0,0,0};
double ai2[]={0,0,0,0};
double ai3[]={0,0,0,0};
fft(n,theta,ar1,ai1);
fft(n,theta,ar2,ai2);
for(i=0;i<n;++i)
{
ar3[i]=ar1[i]*ar2[i]-ai1[i]*ai2[i];
ai3[i]=ar1[i]*ai2[i]+ai1[i]*ar2[i];
ar3[i]/=n;
ai3[i]/=n;
}
fft(n,-theta,ar3,ai3);

for(i=0;i<n-1;i++){
ar3[i+1]+=(int)ar3[i]/10;
ar3[i] = (int)ar3[i] % 10;
}
for(i=n-1; i>=0; i--) printf( "%d",(int)ar3[i]);
printf("\n");
413デフォルトの名無しさん:05/02/05 10:33:36
fork()関数で生成した子プロセス内でいじった変数を
親プロセスに返したいんですけど何か良い方法はありませんか?
414デフォルトの名無しさん:05/02/05 10:36:14
signal
pipe
socket
415デフォルトの名無しさん:05/02/05 10:38:46
>>414
ありがとうございます。
調べて、適切なものを使ってみます。
416デフォルトの名無しさん:05/02/05 11:14:14
>>415
もっとお手軽にファイル経由とか。
417413:05/02/05 11:16:55
>>416
それは、考えていたんですが、何度も使うので効率が悪そうだなと思いまして。
418デフォルトの名無しさん:05/02/05 11:17:07
それのどこがお手軽なんだ
419デフォルトの名無しさん:05/02/05 11:27:32
共有メモリでも使え。
420378:05/02/05 12:43:49
>>382,384
ありがとうございます。
でも384はBCCだとコンパイルできなんだ…
421デフォルトの名無しさん:05/02/05 12:54:00
>>398
因みに、今の指導要領では円周率は概念を教える時には3.14を(例に?)使って教えて、計算では適宜3を使用するっぽい
変数を覚えたら、πを使うっぽい
422デフォルトの名無しさん:05/02/05 13:18:32
>418
汎用性の高さとデバッグの容易さでは?<お手軽
423デフォルトの名無しさん:05/02/05 15:06:07
お前らよくこんな糞言語使ってられますね?

if ( sizeof( int ) < -1 ) puts("設計したやつ馬鹿だろw");
424デフォルトの名無しさん:05/02/05 15:16:00
JavaはC++はオブジェクト指向というらしいですが、
Cは何指向というのでしょうか?
425デフォルトの名無しさん:05/02/05 15:17:52
手続き型
426デフォルトの名無しさん:05/02/05 15:20:16
関数型
427394:05/02/05 15:40:42
>>412
めちゃくちゃありがとう。
これで他倍数計算できそうです。感謝!
この数字の並びを逆にするのは使っているFFT関数の仕様なのかな
428デフォルトの名無しさん:05/02/05 16:24:56
Cマガジン見たらjavaになってた...
今からC勉強するのはあんまりよくないの?
javaの方がいい?
ちなみに基本情報も受けたい。
429デフォルトの名無しさん:05/02/05 16:26:01
430デフォルトの名無しさん:05/02/05 16:36:36
Cなんか勉強したって全然意味ないでしょ
将来糞ほどの役にも立たないよ
431デフォルトの名無しさん:05/02/05 16:45:57
Cは入門用言語
他の言語を勉強するときも、Cやっていた方が理解しやすい


もっとも、Cやっている時間も他の言語につぎ込んだ方が早いだろうが
432デフォルトの名無しさん:05/02/05 16:48:25
>>424
実用型
433デフォルトの名無しさん:05/02/05 16:53:22
グダグダのガタガタ
434デフォルトの名無しさん:05/02/05 16:54:56
せめてセキュリティくらいは勉強してくれ。
435デフォルトの名無しさん:05/02/05 17:58:53
>>430
かなり役立ってます。
人それぞれ
436デフォルトの名無しさん:05/02/05 18:02:09
>>435
どんな風に役に立ってるの?
437デフォルトの名無しさん:05/02/05 18:14:21
>>436
給料もらうぐらい役立っている。
438デフォルトの名無しさん:05/02/05 18:18:29
Cの案件など全然見ないのだが
439デフォルトの名無しさん:05/02/05 18:19:21
業務系はしね。
440デフォルトの名無しさん:05/02/05 18:38:24
質問です。
ビットとは何のことなんでしょうか。
今、ビット演算子のところを勉強しているのですが
何のことなのかよく分りません。
441デフォルトの名無しさん:05/02/05 18:43:41
ググった方がいいだろ
こんなとこで聞くより
442デフォルトの名無しさん:05/02/05 18:46:37
c#はここでいいんですか?
443デフォルトの名無しさん:05/02/05 18:46:50
>>441
2進数で表した数、で合ってますか?
444440:05/02/05 18:49:37
ビット演算子は少し分りました。
でも、どうして数値を2倍にするときに*2ではなく、<<を使うんですか?
*2と記述したほうが読みやすいと思うんですけど・・・
445デフォルトの名無しさん:05/02/05 18:49:52
だからせめて調べてから質問しろと
446デフォルトの名無しさん:05/02/05 18:56:01
11 * 10 = 110 だろ?
447デフォルトの名無しさん:05/02/05 18:59:33
>>446
どーでもいいけど、それ、10進数でも成り立つな。
448デフォルトの名無しさん:05/02/05 18:59:55
だから分かりやすいんじゃん
449デフォルトの名無しさん:05/02/05 19:00:01
AA+BB = BB
450デフォルトの名無しさん:05/02/05 19:00:45
>>446
「基数」倍するということの本質の片鱗に触れた希ガス
451デフォルトの名無しさん:05/02/05 19:03:31
>>447
11 * 1010 = 11110
452440:05/02/05 19:05:45
あー、やっぱりビット演算子が分らん。
ビット演算子って頻繁に使われるんですか?
453デフォルトの名無しさん:05/02/05 19:06:14
組み込み系ではビット演算やりまくるよ〜と聞いたのですが、
どういう意味でしょうか・・・
454デフォルトの名無しさん:05/02/05 19:08:32
>>444
>*2と記述したほうが読みやすい

色んなものをデバッグしてみりゃわかるけど
<<1 と *2 は両方向瞬時に連想できないと仕事にならん
455デフォルトの名無しさん:05/02/05 19:10:10
>>452
>>453
二人まとめて組み込み系でググってみろ
456440:05/02/05 19:12:05
>>454
でも、*2のほうが直感的に分りやすいから、<<1と書く必要はないと思うんですよ。
実際に2倍や4倍にするときに<<って使われているんですか?
457デフォルトの名無しさん:05/02/05 19:15:18
>>453
CPUの中ではビット演算しかしてないわけだがw
458デフォルトの名無しさん:05/02/05 19:17:54
>>453
組み込みでなくても使うぞ

例えばウインドウを表示するのにこんな関数を呼び出すが、
hwnd = CreateWindow("foo", "bar",
WS_POPUP | WS_CAPTION | WS_THICKFRAME | WS_SYSMENU | WS_MAXIMIZEBOX,
0, 0, 640, 480, 0, 0, 0, 0);
複数選択のオプションを組み合わせるのにビットORを使っている
459デフォルトの名無しさん:05/02/05 19:19:33
>>456
その方が高速な可能性が高いからそうやっている。しかしながら最近の
コンパイラでは自動的にそのように置き換えを行っていることが多い。
460デフォルトの名無しさん:05/02/05 19:20:34
>>456
こういう出力を期待してたら
○○○●○●

○○●○●○
あれ? 何で2倍になってるんだろう・・・

てなことが色んなとこで出てくるよ
461デフォルトの名無しさん:05/02/05 19:21:12
>>456
<<すると2倍4倍になるのはあくまで結果の話であって、2倍4倍するために<<使うやつは今どきいない。
462440:05/02/05 19:23:50
色々答えてくれて、どうもありがとうございます。
まだよく分ってないけど、なんとか頑張って理解してみます。
463デフォルトの名無しさん:05/02/05 19:27:48
>>461
おまえさん、金額に0つけたら10倍になるのもあくまで結果の話とのたまうか?
464デフォルトの名無しさん:05/02/05 19:37:48
>>461
私の知り合いに居ますよ
465デフォルトの名無しさん:05/02/05 19:48:18
>>463
0つけたら10倍になるのは結果だが・・・。
逆に10倍にするために0つけることは日常的によく使うな。
でもそれは俺らの脳が10進法ならそれで十分なことを知ってるからであって、乗算の本来のやり方じゃない。
9倍や13倍に応用できない。

最近のコンパイラはその辺最適化してくれるし、
プログラムの場合乗数が変化する可能性も考慮したほうがいいのだから
あえて<<る必要が無い。
466デフォルトの名無しさん:05/02/05 19:52:10
>>451
意味わかってね。
467デフォルトの名無しさん:05/02/05 19:55:50
>>461
じゃね、>>は?
468デフォルトの名無しさん:05/02/05 19:55:52
>>438
うちはCできる人募集中ですよ。
(実際には、最低でもCはできることが条件)
469デフォルトの名無しさん:05/02/05 19:56:38
>>468
俺はCだけでなく懸垂が20回できる。
470デフォルトの名無しさん:05/02/05 19:57:59
けんすい20回!まじすごです。
471デフォルトの名無しさん:05/02/05 19:58:28
シフトだけでなくローテートもできる高級言語はないものか?
472デフォルトの名無しさん:05/02/05 20:01:05
素朴な疑問なんだけどローテートしたらどんな実装のときに便利になるの?
473デフォルトの名無しさん:05/02/05 20:01:23
>>468
漏れ5分間息止めれるけどどうですか?
474デフォルトの名無しさん:05/02/05 20:04:06
>>473
俺2分… すごいな。
そういえば、ハレー彗星がやってきた時、世界中の空気が5分間だけなくなるとかいう
噂が立って、自転車のチューブがよく売れたという話が…
475デフォルトの名無しさん:05/02/05 20:24:47
>>465
ちょっと待て、9進法でも13進法でも通用する話だぞ?
日常的に2進法使ってない PG がいないとは言い切らないけど
自慢するこっちゃねえぜ、少なくとも

>最近のコンパイラはその辺最適化してくれるし、
アフォなコンパイラは普通にあるよ
逃げらんない形でのご対面が怖いんだよ
476デフォルトの名無しさん:05/02/05 20:30:06
>>475
・アフォなコンパイラを使わないといけない
・シフト演算使って時間を短縮させないといけない
そんな現場に素人連れて行くのが間違い。
477デフォルトの名無しさん:05/02/05 20:33:41
>>476
意味わかんね
478デフォルトの名無しさん:05/02/05 20:35:30
>最近のコンパイラはその辺最適化してくれるし、

>アフォなコンパイラは普通にあるよ

両方とも本当のことだと思う
479デフォルトの名無しさん:05/02/05 20:38:46
> 日常的に2進法使ってない PG がいないとは言い切らないけど
つか、最近のWeb系では2進法使えるPGの方が少数派。
480デフォルトの名無しさん:05/02/05 20:39:05
bccコンパイラはアホな子ですか?
481デフォルトの名無しさん:05/02/05 20:41:11
leaって安いんだよなw
482デフォルトの名無しさん:05/02/05 20:41:22
どんなコンパイラがアホなの?
また、それを使わなければいけない状況とは?
483デフォルトの名無しさん:05/02/05 20:42:47
>>482
組み込みとかでアホなコンパイラしかない場合とかじゃない?
484デフォルトの名無しさん:05/02/05 20:46:03
>>479
専門外の能力がないことを恥じることはないが自慢することでもない
485デフォルトの名無しさん:05/02/05 20:48:59
> 日常的に2進法使ってない PG がいないとは言い切らないけど

> つか、最近のWeb系では2進法使えるPGの方が少数派。

>>478っす。これも多分両方とも間違ってないとおもうけどね。
486デフォルトの名無しさん:05/02/05 20:49:01
>>483
あぁ!あるあるあるあるアルマジロですよ!!
487デフォルトの名無しさん:05/02/05 20:56:16
>>486はスレッドストッパー
488デフォルトの名無しさん:05/02/05 21:15:24
C言語でポリモルフィズムを実現するにはどうすればいいんですか?
489デフォルトの名無しさん:05/02/05 21:17:32
関数ポインタは使えないの?
490デフォルトの名無しさん:05/02/05 21:20:23
>>488
すべてのデータをvoid *で受け渡しして各メソッドでキャストすればOK
491デフォルトの名無しさん:05/02/05 21:23:06
必ずvtblをつくるようにすれ
492デフォルトの名無しさん:05/02/05 21:24:54
構造体に関数ポインタを入れておく方が楽だと思うんだが
493デフォルトの名無しさん:05/02/05 21:27:04
>>492
アルカリ性の逆
494デフォルトの名無しさん:05/02/05 21:27:36
>>491
ソースの字面が汚い
495デフォルトの名無しさん:05/02/05 21:30:30
>494
ええーまじですこ?
496デフォルトの名無しさん:05/02/05 21:35:15
C言語で無理にポリモフィズムなんかしたって報われないよ
それぞれの言語に合ったやり方というのがある
本当に必要なら別の言語にしなさい
497デフォルトの名無しさん:05/02/05 21:36:12
ではPHPにしときます
498デフォルトの名無しさん:05/02/05 21:43:12
>>497
え〜!?
499デフォルトの名無しさん:05/02/05 21:45:31
>>496
>C言語で無理にポリモフィズムなんかしたって報われないよ

unix 系のファイルシステムは、まさに多態性を行っているように
見えるけど、やっぱりあそこら辺を実装するためには
C++ とか Java とかを使うべきだとでも?
500デフォルトの名無しさん:05/02/05 21:46:56
>>497です。べつにVFSはいらないのでPHPでいいですよね?
501デフォルトの名無しさん:05/02/05 21:47:18
intの変数a,b,c,dがあって、どれか一つでも0以外だったら、というコードは
普通は
if (a || b || c || d) {...}
のように書くと思いますが、
これを
if (a | b | c | d) {...}
と書くのは、邪道ですか?

ショートサーキットのルールとコンパイラの最適化を見越すと
条件が変数の読み込みだけであるなら、
大差ないとはいえ、一応後者の方が速そうですが。
502デフォルトの名無しさん:05/02/05 21:52:50
邪道ではないが、速い方がいいのなら予測で書かずに実測するべき。
503デフォルトの名無しさん:05/02/05 21:54:58
邪道とまでは言わないけど、式は式として書いたほうがいいよ。
504デフォルトの名無しさん:05/02/05 21:56:13
>>501
後で保守が大変だぞぉ
505デフォルトの名無しさん:05/02/05 22:00:22
いきなり失礼。いっきに質問ふたつしちゃいます。

if(!a--)
と、
hoge->foo->bar

こうやって書くと、いけませんか?
評価順番とか考えると。
506デフォルトの名無しさん:05/02/05 22:02:03
まぁ、コメントは書いとけ。
/* どれか一つでも0でない場合 */
507デフォルトの名無しさん:05/02/05 22:05:31
>>501
60過ぎのジジィが書きそう
508デフォルトの名無しさん:05/02/05 22:06:26
>505
文法的にはなんら問題なし。

漏れはそのif()見かけたら、そのソースは厄介だろうなって感覚を覚えるけどね。
509デフォルトの名無しさん:05/02/05 22:12:45
hoge->foo->barって良くないの?
510デフォルトの名無しさん:05/02/05 22:14:40
なんも問題ないけど?
511デフォルトの名無しさん:05/02/05 22:17:11
なるほど。
ありがとうございます。
確かに、これ書いてあるソース厄介っす(w
今見てるけど。

# 関数ポインタ使うのはいいけど、まるで goto 並に処理飛びまくってます。(愚痴
512デフォルトの名無しさん:05/02/05 22:20:35
> # 関数ポインタ使うのはいいけど、まるで goto 並に処理飛びまくってます。(愚痴
それは別。詳細設計がまずいだけ。
513デフォルトの名無しさん:05/02/05 22:21:36
関数ポインタ使うぐらいなら素直に関数型言語使っとけって。
514デフォルトの名無しさん:05/02/05 22:23:55
関数ポインタの、どこが、何が goto と似てるのか、小一時間問いつめたい!!
515デフォルトの名無しさん:05/02/05 22:27:08
>>505
> if(!a--)
コレはあとで見直したとき面倒そうだな・・・
516デフォルトの名無しさん:05/02/05 22:32:20
>>515
未熟者
517デフォルトの名無しさん:05/02/05 22:33:30
return ○○

void ○○( void )
{
return △△
}

void △△

こんな感じのがいっぱいあって、しかもこれがご丁寧にファイル分割してある・・・
ループの中でのこういう分岐の嵐。自分には読みにくい・・・
素直に switch case じゃ駄目なんかなぁ、とかオモタわけです。
518デフォルトの名無しさん:05/02/05 22:34:57
>void ○○( void )
>{
>return △△

アホ
519デフォルトの名無しさん:05/02/05 22:40:24
void*
520デフォルトの名無しさん:05/02/05 22:51:46
C言語、どれくらい出来たら上級者といえますか?!!
malloc とか出来るようになったら上級者ですか?!
521デフォルトの名無しさん:05/02/05 22:55:10
>>520
いろんな言語のパラダイムを学び、TuringMachineが何かということを理解し、
アルゴリズムとデータ構造の基本を学び、Cがどのようにしてアセンブリに変換される
のかということを学べば中級だろうね。
Cコンパイラが作れる程に理解したら上級。
522デフォルトの名無しさん:05/02/05 22:55:21
>>517
設計した人が関数型言語の使い手なんだろうな
と、このようにCでバリバリFPやOOP的に書くと、世の中のCしか
使わない人種がコードを読めなくなるので逆に設計が悪いとか
言われる
だから>>488はCでポリモフィズムなんてやめときなさい
523デフォルトの名無しさん:05/02/05 22:56:41
TMが何かなんて理解する必要無いだろ
524デフォルトの名無しさん:05/02/05 22:59:03
>>522
> 設計した人が関数型言語の使い手なんだろうな
どう見たら関数型言語っぽいんだよ。入力引数void・返り値voidだぞ。
525デフォルトの名無しさん:05/02/05 22:59:53
ある。
そうでないと計算量理論が理解できないから。
526デフォルトの名無しさん:05/02/05 23:01:04
前の職場にチューリングマシンを語るのが大好きで、
スレッドを毛嫌いするおっさんがいたな
527デフォルトの名無しさん:05/02/05 23:02:17
ほげほげ
528デフォルトの名無しさん:05/02/05 23:02:29
>>526
低賃金労働者は口を動かさず手を動かしてなさい。
529デフォルトの名無しさん:05/02/05 23:06:04
宇宙空間にはエーテルが詰まってるんだよ!
voidも同じだ!
530デフォルトの名無しさん:05/02/05 23:08:08
皆さんにお伺いしたいのですが、どうやって勉強してますか?

 (a) サイトで勉強している
 (b) 本を読んでいる。(その場合、一日何冊ぐらいのペースで本を読んだりしてますか?)
 (c) その他

軽いアンケートのようなものですが、お答えいただければ嬉しいです。
531デフォルトの名無しさん:05/02/05 23:10:48
(d) プログラムを書いている
532デフォルトの名無しさん:05/02/05 23:12:08
独学でいろいろ書いててわからなくなったらとりあえずぐぐってみる

わからなかったらとりあえず学校の図書館に篭る
533デフォルトの名無しさん:05/02/05 23:12:42
(e)教えてもらう
534デフォルトの名無しさん:05/02/05 23:13:36
(e) ソースを読んでいる
535デフォルトの名無しさん:05/02/05 23:15:29
とりあえず皆、型にはまらない性格だということがわかりました。
536デフォルトの名無しさん:05/02/05 23:17:20
(f)天才だから勉強するまでも無い
537デフォルトの名無しさん:05/02/05 23:17:45
>>530
主に本を読み、補助的にサイトを読んでいる。
セミナーにも参加している。
538デフォルトの名無しさん:05/02/05 23:18:34
山にこもる
539537:05/02/05 23:20:05
>>530
一日何冊という読み方ではなく、たくさんの本の中から必要な部分だけを抜き出して読む。
540デフォルトの名無しさん:05/02/05 23:20:27
(g)日々祈る
541デフォルトの名無しさん:05/02/05 23:26:52
つうかあれだCって本質はかなり単純な言語で
その本質さえ感じることができれば
あとはOSのシステムコールなりAPIなりを扱うだけでそこそこのものはできる


つまり学ぶんじゃない!感じるんだ!
542デフォルトの名無しさん:05/02/05 23:28:24
>>541

    f`::'ー 、,-、-、_ _,....-- 、_  _,....-=―ヽ―-、-、_
   ,.r'‐'゙´ヽ,r'  ヽ \ー、_:::::::::/,´:::::::::::,:::::::,::::::::ヽ::\`ー、
 ,〃ィ  ,rヽ'-ヽ i 、 、 ヾ,、 `'y',ィ´/::::::::/|::::::ハ_::::::::ト、::::\ \           そ
r'/〃//    | i! |, \、_`ー!rf.,イ-,ィ/u ノ::::/ |::::`::::|iヽ::::::ヽ  ヽ.
iヾ!l i /,.=ヽ  i,ケ ハ,i', Y't=ラ゙,〉'|::::r'|! 彡´ ,!--、 |i!|::|::i::::::',   ',        う
  {ヾllッ-,   〃ノ'-'、||ii i|i| |-/! /^ヽ    ´   ヾ|从ノ::i::::|   ||
  >|゙! 0ヽ ノ' ´ 0 レノWノi |,.、!/ 0       0  ',' レ|,イ::::i,,_ | !        だ
  ',i ヽ- ,      _, "  |i| | |             ´ '´ハ',Y  .!
  /l   `        !| | i `´ r     'ー‐' u   (-, ' |   !      っ
  /久        U  |! i|'´'、u              z_,ノ/ .i |
 /イ |ヽ '==..‐_、      |!,'|Y´,ヽ  ___        ハ_ ,/i | |      た
 |ト|、',::::\     _,.-‐イ//-'´::::!\'ー‐--ニュ     / ト_、 _| _!,=,|
  〉:ヾ_'、::::`ー‐r<   //イ|::::::_、:::`7i\ __,..-‐'´  .| |`゙"::"::|-"       の
 'ー‐'´¨`'ー、/,rケ  /,'1ノ人'-‐'`y'/::::, i| ,!,      |`iiイ:::::::::|
    ,〃7,‐/ {   ´_,-'´ ,,‐!、=,/.〃::::i i|kハ    / ,ヾ、::::::|.|!         か
   ,ッ'、_〃'f /゙-<´  r〃 〃 /イ::::,!ッ'/  ',  / /   |ト、:|:リ       ・
  rir' 〃,y'、久_,.rヽ/〃  川/iケir'〃/ ,-'水´  /    〃  \         ・
  f::}'ー'〃_i| /::::f|::::',  .〃 r/if |||ir' f| レ' r'o | .〃-、 〃     "i       ・
  ,);'ーッ゙-. レ:::::/_|::::::',_,〃=_、!!|| !i/ ||:,ri   !o ∨/_)_〃        |
543デフォルトの名無しさん:05/02/05 23:30:13
んなこたぁない
544デフォルトの名無しさん:05/02/05 23:30:16
Cプログラマが保守性の悪いコードばかり書くということを
体現しているスレだな
545デフォルトの名無しさん:05/02/05 23:31:34
C言語に限らず、他人の書いたコードで保守性のいいコードなんて見たことない。
546デフォルトの名無しさん:05/02/05 23:33:11
>>545
おお、あなたカワイソウなひと!
わたしのコード見なさい。
547デフォルトの名無しさん:05/02/05 23:39:20
無能が80%のこの業界。汚いコードにしか出会えないのは可愛そうだ。
548デフォルトの名無しさん:05/02/05 23:46:59
良いコードを見て目からウロコがおちることも楽しみなひとつ

良し悪しはその人の実力でまちまちなところもあるけど。
549デフォルトの名無しさん:05/02/06 00:12:17
>>546
みしてくれ
550デフォルトの名無しさん:05/02/06 00:35:02
>>549
漏れんとこくるか?
551デフォルトの名無しさん:05/02/06 00:38:15
うpすればいいだけの話
552デフォルトの名無しさん:05/02/06 00:43:28
漏れも無いけど心配すんな
553デフォルトの名無しさん:05/02/06 02:48:10
見ろよ青い空白い雲
554デフォルトの名無しさん:05/02/06 03:35:13
ザーメン
555デフォルトの名無しさん:05/02/06 03:50:42
CあるいはC++を主体にコードを書いて
ライブラリだけFortranのサブルーチンを使ったりすることってできますか?
FortranのオブジェクトファイルとCのオブジェクトファイルを
リンクしている簡単なサンプルを紹介しているページを探しているんですけど
見つかりません。どなたか教えていただけないでしょうか?
556デフォルトの名無しさん:05/02/06 05:21:16
> ライブラリだけFortranのサブルーチンを使ったりすることってできますか

できますが、最近は大概の有名なライブラリーもCで書き直されているものが多いですね。

> FortranのオブジェクトファイルとCのオブジェクトファイルを
> リンクしている簡単なサンプルを紹介しているページを探しているんですけど

それはコンパイラー依存。どのCとどのFortranを使うかによる。
中には相性が悪い物もあるし。
557デフォルトの名無しさん:05/02/06 05:26:43
>> 501
> ショートサーキットのルールとコンパイラの最適化を見越すと

こいつアホ。ショートサーキットというか「前から順番に評価して、条件を満たさなくなったら
それより後ろは評価しない」が意味をもつのは、副作用のある式だけだ(関数呼び出しとか)。
だから「||」がそれをやらなきゃいけない運命の演算子だからといって、
副作用がない式ばかりのときには関係ないので、それが原因で遅くなることはあり得ない。

それぐらい考えなくてもわかるだろ ぼけ
558デフォルトの名無しさん:05/02/06 08:25:23
最近のパイプラインの深いプロセッサでは
分岐命令が4つの場合と1つの場合では速度が全然変わる
こんなことすら知らない化石頭のじじいはさっさと消えろボケ
559デフォルトの名無しさん:05/02/06 08:27:24
>>557
そうかあ? ショートサーキットが入るって事は分岐が入るってことで、
昨今の投機実行やら分岐予測をやらかすプロセッサなら、十分性能に影響ありだぞ。
パイプラインがストールする可能性を考慮したら一本道の|と分岐ありの||を
比べることとは沈丁花にも三分の利だぞ。
560デフォルトの名無しさん:05/02/06 08:39:17
予想される回答
「こいつぼけ。たかが4個の分岐で性能の大勢に影響するわけないだろあほ」
かな。
561デフォルトの名無しさん:05/02/06 08:53:44
やくざ映画みたばっかりのDQN工房みたいに
人のスタイルを真似しているような奴だからな
562デフォルトの名無しさん:05/02/06 09:01:09
>>560
数日間鳴りを潜めて、なに食わぬ顔で戻ってくるんじゃないの
563デフォルトの名無しさん:05/02/06 10:37:21
こいつぼけ。たかが4個の分岐で性能の大勢に影響するわけないだろあほ
564デフォルトの名無しさん:05/02/06 10:43:32
大勢に影響するかどうかを大勢を見ずに言うアフォハケーン
565デフォルトの名無しさん:05/02/06 13:05:39
二つ以上の文をマクロにするとき do {} while(0) で囲うのが
普通と思っていたんですが、これって実は普通じゃないですか?

#define (a,b,c) \
do { \
 foo(a,b); \
 bar(b,c); \
} while(0)
566デフォルトの名無しさん:05/02/06 13:12:52
#define (a,b,c) \
{ \
 foo(a,b); \
 bar(b,c); \
}

で駄目な理由は?
567デフォルトの名無しさん:05/02/06 13:39:14
>>566
すみません、マクロに名前を付け忘れましたが仮に
#define do_something(a,b,c) とすると、

 if (expression)
  do_something(a,b,c);
 else
  do_otherthing(a,b,c);

という文を考えたときに do ... while(0) じゃないと
構文エラーになります。{} だけだと

 if (expression)
  do_something(a,b,c)
 else
  do_otherthing(a,b,c);

とセミコロンを省略する必要があります。
ああ、こういうのって普通どうでもいいんですかね・・・
568デフォルトの名無しさん:05/02/06 14:01:51
> 最近のパイプラインの深いプロセッサでは
> 分岐命令が4つの場合と1つの場合では速度が全然変わる

だーかーらー、副作用がない式ばかりなら || でも | でも最適化したら
条件判断は1個だけだといってるだろ ぼけ

逆に副作用がある式なら | にしたって1回じゃすまない
569デフォルトの名無しさん:05/02/06 14:03:33
「どうでもいい」んじゃなくて「常識すぎてだれもいわない」だけ。
こうやって、話題でもないのにうれしそうに出してくるやつは、
よほど「最近知ったばかりでうれしい」馬鹿っていう証拠。
570デフォルトの名無しさん:05/02/06 14:03:50
つまりマクロだと認識せずに使わせたいと?
マクロである以上それを認識せずに使うとバグが発生する可能性が存在する
なら;つけるとダメになるほうが認識しやすいのではないか?
571デフォルトの名無しさん:05/02/06 14:13:51
>>570
>マクロである以上それを認識せずに使うとバグが発生する可能性が存在する
>なら;つけるとダメになるほうが認識しやすいのではないか?

>>570 にとっては
isalpha() なんてのも、
「悪い設計」っていう認識なんだろうな。
572デフォルトの名無しさん:05/02/06 14:21:39
>>570
コンパイルエラーが起きず、通常通らないような処理だとしてもそう思う?
#やっとく方が無難だよ。
573デフォルトの名無しさん:05/02/06 14:28:15
質問です。

大きなCSVのデータファイル(全て数値(整数のみ)で200MB程度)を
すばやく配列に読みこむ方法に関して、教えて下さい。
データファイルをどうにかして、バイナリ化(?)しておいて、読みこめば、
早くなるかな。。。とか考えいるのですが、どんなもんでしょか?
574デフォルトの名無しさん:05/02/06 14:39:30
>>573
その大きさだとどうやっても読み込みに時間が掛かる気がするが、
先ずはどうやったらどのくらい時間が掛かるのか調査するところから始めるべし。
575デフォルトの名無しさん:05/02/06 14:40:05
>>573
>大きなCSVのデータファイル(全て数値(整数のみ)で200MB程度)を
>すばやく配列に読みこむ方法に関して、教えて下さい。

原理的に、回答は不可能。
しかし、もしもこの質問が

>全て数値(整数のみ)で200MB程度のデータをすばやく読み込みたいのです。
>今はCSV形式を使用しているのですが、これをバイナリ化(?)しておいて、
>読みこめば、速くなるでしょうか?

という文章だったならば、回答の余地があるけど。
576デフォルトの名無しさん:05/02/06 15:09:40
>>567

#define do_something(a,b,c) \
({ \
 foo(a,b); \
 bar(b,c); \
})

でどう?
577デフォルトの名無しさん:05/02/06 15:18:36
>>576
実行してみたのか?
578デフォルトの名無しさん:05/02/06 15:39:30
> マクロである以上それを認識せずに使うとバグが発生する可能性が存在する

いいえ「するものもある」だけ。もちろん副作用などでないように書くのが当然。
579デフォルトの名無しさん:05/02/06 15:42:04
>>salpha() なんてのも、
>>「悪い設計」っていう認識なんだろうな。

いいや。なんら問題ない。同じascii用ならば、
isalpha(*p++)ってやっても問題ないし。(中に条件文かいてるような間抜けなマクロはない!)
580デフォルトの名無しさん:05/02/06 15:45:37
>>579
>中に条件文かいてるような間抜けなマクロはない!

getchar() も間抜け?
581デフォルトの名無しさん:05/02/06 15:48:35
getcharは引数ないのでOK。
副作用があるやつマクロってのは、引数が2回以上展開されるようなやつだ。
582デフォルトの名無しさん:05/02/06 15:51:57
0x0080,0x0010,という2進数が入ったtxtファイルから16進読み込み
する方法はありますか?
583デフォルトの名無しさん:05/02/06 15:56:09
0,1,8の三つの数使っといて二進数?
584デフォルトの名無しさん:05/02/06 16:08:28
>>566のやつは思いっきりバグの原因になる可能性があるわけだが…
585デフォルトの名無しさん:05/02/06 16:10:29
>>583
あふぉ?
586デフォルトの名無しさん:05/02/06 16:21:07
C言語で、専用のウィンドウ(DOS窓でない)で起動するRPGを作りたいのですが、C言語を覚えた後は何をすればいいのでしょうか?
587デフォルトの名無しさん:05/02/06 16:22:07
>>583
そりゃマクロ名ないからねえ。
コンパイルさえとおらん
588デフォルトの名無しさん:05/02/06 16:22:53
> 今はCSV形式を使用しているのですが、これをバイナリ化(?)しておいて、

こいつまぬけ
589デフォルトの名無しさん:05/02/06 16:30:27
>>586
専用のウィンドウ(DOS窓でない)で起動するRPGを作ると
よいと思う。
590デフォルトの名無しさん:05/02/06 16:50:16
専用のウィンドウで起動するということは、エクスプローラーで起動できないようにするってこと?
591デフォルトの名無しさん:05/02/06 16:53:37
592デフォルトの名無しさん:05/02/06 17:05:04
なんかイタいスレ上げないでください
593デフォルトの名無しさん:05/02/06 17:30:36
>>586
DOS窓が云々と言うあたりからゲイツ環境っぽいが
もしそうなら Win32 API を憶えればいい
ウインドウを表示するだけで 100 行くらい書くが
めげないでがんばれ
594デフォルトの名無しさん:05/02/06 17:38:30
既にあるファイルをコンソールアプリへドラッグ&ドロップで開いた後に
新しく別名でファイルを作成させたいのですが、

# include <stdio.h>

int main (int argc, char *argv[])
{
FILE *fp;

fp = fopen (argv[1], "r");

// ここには開いたファイルから文字列を取得して加工する処理が入ります

fclose (fp);

fp = fopen ("newfile.txt", "w");
fputs ("文字列", fp);
fclose (fp);

return 0;
}

このようにすると
コマンドプロンプトから引数を付けてやれば「newfile.txt」は作成してくれるのですが、
でも何故かドラッグ&ドロップでは何の反応も無いんです。
どうにかドラッグ&ドロップでファイルを開き、
新規ファイルを作成する方法は無いのでしょうか?

環境は WinXP VC++ 6.0 です。
595デフォルトの名無しさん:05/02/06 17:41:04
治んないです
596デフォルトの名無しさん:05/02/06 17:42:08
>>594
標準Cではできません
597デフォルトの名無しさん:05/02/06 17:42:12
スレ違いだと
598デフォルトの名無しさん:05/02/06 17:48:27
>>596
ええ・・・・、そうなんですか。
Windowsアプリ覚えようかな・・
599デフォルトの名無しさん:05/02/06 17:51:41
>>598
596の意味わかってんのか?
600594(598):05/02/06 17:56:17
>>599
あ、なんか光が見えてきた感じがする。
601デフォルトの名無しさん:05/02/06 18:06:46
>>594
# include <stdio.h>

int main (int argc, char *argv[]) {
 int cc;
 printf("%s\n%s\n%s\n",argv[0],argv[1],"newfile.txt");
 cc=getchar();
 return 0;
}

D&Dで起動させてみ。
602デフォルトの名無しさん:05/02/06 18:07:47
あるプログラムをコンパイルしたら
xaaview.c:139: warning: assignment discards qualifiers from pointer target type
といわれました、

そして少し改変してみたのですが
xaaview.c:139: warning: assignment makes integer from pointer without a cast
といわれます
具体的に、何がわるいのでしょうか?
603デフォルトの名無しさん:05/02/06 18:10:39
>>602
具体的なソースなしに”具体的な回答”は出来ない。
604デフォルトの名無しさん:05/02/06 18:11:45
あたま
605デフォルトの名無しさん:05/02/06 18:13:35
char *s, *i;
*i = "hoge";
s = i;
ソースは違いますが具体的にはこのようなかんじです

s = i; が139行目にあたります
606最凶VB厨房:05/02/06 18:16:47
*i="hoge";
これなんだ?
607デフォルトの名無しさん:05/02/06 18:19:48
すいません
i = "hoge";
です
608最凶VB厨房:05/02/06 18:27:29
全然具体的でないし、コンパイラは何を使ってるか書かないと
C言語初心者の俺には全然わからんわぁ。
char *s;
int i;
s = "hoge";
i=s;
こんな感じなコードを書いてるんじゃないかと推測。
ではお出かけ。
609デフォルトの名無しさん:05/02/06 18:32:16
その部分だけでいいから実際のソース載せてみてよ。無理なの?
610デフォルトの名無しさん:05/02/06 18:48:46
具体的に何が悪いかは、ソースを見ないとなんとも言えない
その変数を宣言した部分とエラーが出る行の前後3行くらいだしてみ?
611デフォルトの名無しさん:05/02/06 19:19:27
NDAで晒せないとか・・・
612デフォルトの名無しさん:05/02/06 19:27:05
前者は
const char *に char *を代入したりすると出るし、
後者は
int に char *を渡したりすると出る
613デフォルトの名無しさん:05/02/06 19:44:22
晒せないなら2chできくな間抜け
614602:05/02/06 19:46:22
以下は実際のソースからの抜粋です
何度もすいません

static void init_display(const char *gridarg) {
char *s;
if (grid == 1){
s = gridarg;
while(c = *s++) {
if(c<'0' || c>'9') {
if (c == 'x'){
gridx = r;
r = 0;
} } } } }

int main(const int argc, char **argv) {
char *gridarg;
while( getopt(argc, argv, "wz:") != -1 ){
switch( optopt ){
case 'z' :
grid = 1;
gridarg = optarg;
break;
} }

このようなかんじです
615602:05/02/06 19:49:10
すいません 抜きすぎました
main のなかで
init_display(gridarg);
と言うかたちで呼び出しています

改行がおおいと言われたので閉括弧をすべてくっつけました
すいません
616602:05/02/06 19:51:19
他にもかなり型宣言が抜けたりしています
何か他にもありましたら指摘お願いいたします
617デフォルトの名無しさん:05/02/06 19:58:31
行ナンバーを表示するエディタを使いましょう
618デフォルトの名無しさん:05/02/06 20:01:51
>>614
> 以下は実際のソースからの抜粋です
> 何度もすいません
>
> static void init_display(const char *gridarg) {
> char *s;
> if (grid == 1){
> s = gridarg;

char * に consht char * を代入するな。
s の宣言を const char *s にしろ。
619602:05/02/06 20:02:41
上記のとうり
s = gridarg;
の行が139行目です

138行目と、140-144行目はソースのままです
620602:05/02/06 20:10:24
>>618
ありがとうございます
全くその通ですね・・・

だから型が違うっていわれてたのか・・・
すいません、初めからソースを書けばいいものを失礼しました
621594:05/02/06 20:52:58
でできた・・!

新しく作成させるファイルをフルパスで指定したら言うこと聞いてくれました。。。

fp = fopen ("e:\\fullpath\\newfile.txt", "w");

DOS画面から元ファイルを引数にして起動させる時にはフルパスいらないのに、
D&Dさせるときはフルパスじゃないとだめなんて、不思議。
朝から悩んで12時間疲れたぁ
622デフォルトの名無しさん:05/02/06 20:55:55
>>621
実は今までもファイルは作成されていたけど、
どこか別のディレクトリに作成されていたから気付かなかっただけじゃないか?
623デフォルトの名無しさん:05/02/06 20:59:42
ちょっとスレ違いかもしれないけど、おしえてください。

int main( void ) {
int a ;
cout << "数字を入れる" ;
scanf( "%d",&a ) ;
cout << "演算結果:" << a ;
getchar() ;
return 0 ;
}

これって、なんでscanf から実行されちゃうんですか?
624デフォルトの名無しさん:05/02/06 21:03:44
これはよい

               ゚・ 。  ・。
 チャーハン!     。・゚・⌒)
チャーハン! _ _  o━ヽニニフ ))
        (゚∀゚ )彡。・゚。・⌒)
       ⊂   o━ヽニニフ )
        ( ⌒) ≡=−
        し'c  ≡=−

スレですね
625デフォルトの名無しさん:05/02/06 21:21:01
>>621
カレントディレクトリについて勉強してきな
626デフォルトの名無しさん:05/02/06 21:21:28
>>623
ちゃんと仕様通り、順番通りに実行されている
表示を思った順番で出したかったらf
627デフォルトの名無しさん:05/02/06 21:26:37
C:\Documents and Settings\既定 あたりに newfile.txt が出来てそう
628デフォルトの名無しさん:05/02/06 21:28:01
ここのスレとか見てると、「仕様どおり」という言葉をよく目にしますが、
それはどこを見て「仕様どおり」と分かるのですか?

何かの本でしょうか? だとしたら、自分もそれ欲しいです。
もしよろしければ、本のタイトル教えてください。
正式名称は 『ANSI C 規格書』 とかでしょうか? 馬鹿にされそうですが、よろしくです。
629594:05/02/06 21:29:41
>>627
ひゃー!そこに見つけた。たっくさんありますがぁくぁwせdrftgyふじk
E:\しか検索してなかった。あぁなんてバカ
630デフォルトの名無しさん:05/02/06 21:30:56
>>568
へえ。副作用がなければ||は最適化で条件判断一個なんだ。

void foo(int a, int b, int c, intd) {
 if (a || b || c || d) {
  /* do something */
 }
}

このifは副作用ないんだけど、最適化で条件判断一個になるんだ…
なるんだよね?

天に臓物を捧げるようなデマ飛ばしちゃいかんよ、チミ。
631デフォルトの名無しさん:05/02/06 21:48:49
>>630
>なるんだよね?

もしかしたら
if (a || b || c || d)

if (((a!=0)<<3) | ((b!=0)<<2) | ((c!=0)<<=1) | (d!=0))
にコード変換してくれるかも。

副作用さえ起こらなければ、
別に「評価の中断」をしようがしまいが
どちらでもかまわない筈。
632デフォルトの名無しさん:05/02/06 21:53:06
>>631
おー、これは私の修行が全く足りていませんでした。
失礼いたしました。
633デフォルトの名無しさん:05/02/06 21:57:07
処理系依存
634デフォルトの名無しさん:05/02/06 22:07:36
ソースを見ていたら
if (image->format != ZPixmap)
など、 -> とあるのですが
これはどういったいみなのでしょうか?
635デフォルトの名無しさん:05/02/06 22:10:43
>>634
(*image).format
と同じ
つまり構造体のポインタを用いてメンバにアクセスする場合に用いる
636デフォルトの名無しさん:05/02/06 22:10:48
ポインタからのメンバ変数の呼び出し
637デフォルトの名無しさん:05/02/06 22:13:28
638デフォルトの名無しさん:05/02/06 22:33:24
639デフォルトの名無しさん:05/02/06 22:35:53
このスレで最適化の話で議論したり結論を求めたりするキモい人がいるんですね。
640デフォルトの名無しさん:05/02/06 22:36:37
ウホかと思ったら違ったw
641デフォルトの名無しさん:05/02/06 22:39:10
ワクワク
642デフォルトの名無しさん:05/02/06 22:52:40
>>628
>>5のPDF
643デフォルトの名無しさん:05/02/06 23:52:56
>>638
>>642
どうも、ありがとうございましたっ。
644デフォルトの名無しさん:05/02/07 00:17:19
>>630-632
規格の文面は知らないけど
if (a || b || c || d)
の場合、aの条件が成立していたら、
b以降は、「評価してはいけない」んじゃないかな。
これはもちろん、関数呼び出しや変数の増減以外の、
単純な「変数の値の評価」も含めて。

というのは、極端な話、メモリマップドIOの領域だったら
読み出すだけで動作が変わるわけだし。
volatileを付けても「変数の値が前回と違うかもしれないから毎回読み出す」だけで
「最適化のためにメモリから読み出す」という動作(がもしあるならば)には影響しないはず。

実際、件のif (||)を最適化して分岐を減らすコンパイラというものを
俺は見たことはない。
(脳内コンパイラや脳内標準規格を持っている人のことは知らないが)
645デフォルトの名無しさん:05/02/07 00:20:49
規格には
Unlike the bitwise binary & operator, the && operator guarantees
left-to-right evaluation; there is a sequence point after the evaluation
of the first operand. If the first operand compares equal to 0, the second
operand is not evaluated.
とある。特記されている内容もないし、>>644が正解では?
646デフォルトの名無しさん:05/02/07 03:08:52
>>630-632 は、>>557で無知を晒して、間違いを指摘されたぼけ君が
>>568 で墓穴を掘ってるのをからかってるだけでしょ。

ぼけが、ぼけつを掘る。なんちって。。。
647デフォルトの名無しさん:05/02/07 06:58:55
では今度は「評価」の定義が問題となるな。

まさに形而上学の論争だね。
「"評価" は実在するか?」

検索よろ。
648デフォルトの名無しさん:05/02/07 08:06:53
「定義」とは?
「問題」とは?
「形而上学」とは?
「論争」とは?
「実在」とは?
649デフォルトの名無しさん:05/02/07 09:01:30
「とは」とは?
650デフォルトの名無しさん:05/02/07 09:02:12
千早の本名だ!
651デフォルトの名無しさん:05/02/07 09:10:53
ム板の雑談スレはここですか?
652デフォルトの名無しさん:05/02/07 10:04:32
そうです
653デフォルトの名無しさん:05/02/07 10:16:25
>>568自体が、>>557に矛盾しているな。
>それが原因で遅くなることはあり得ない。
と書きながら、
>最適化したら
と、暗にそのままでは遅いと認めてるし。

で、結局>>501は、
「極度に速度が要求される部分」に「ちゃんとコメントを付けて」
使用するのはアリ、でFA?
654デフォルトの名無しさん:05/02/07 10:38:45
>>651
HSPスレにお行きなさい。みなが勇者を待ち望んでおります。
655デフォルトの名無しさん:05/02/07 10:42:03
アセンブリ言語知らずにスピードを語るな。
656デフォルトの名無しさん:05/02/07 10:47:34
いかにもバカっぽい書き込みでよろしい
657デフォルトの名無しさん:05/02/07 16:45:20
現場の人間は「アセンブリ言語」なんて言わない
658デフォルトの名無しさん:05/02/07 16:47:39
現場=低賃金労働者に聞こえる
659デフォルトの名無しさん:05/02/07 18:01:25
現場の人間はアセンブラ言語。学生はアセンブル言語。
660デフォルトの名無しさん:05/02/07 18:06:39
プッ 使ったこと無いくせに
661デフォルトの名無しさん:05/02/07 18:09:09
プロはアッセンブラーに決まってんだろ
662デフォルトの名無しさん:05/02/07 19:26:11
0.45以上1以下の実数の乱数を発生させるにはどうしたらいいですが?

ググッても出てこなかったので。
663デフォルトの名無しさん:05/02/07 19:29:08
日本人が片仮名語を使うな
664デフォルトの名無しさん:05/02/07 19:29:18
0以上1未満の乱数をおよそ0.45以上1以下の実数の乱数として使う
665デフォルトの名無しさん:05/02/07 19:33:23
>>662
0.00〜1.00までとかの乱数を、0.45〜1.00の範囲に変換すればいい
(0〜100を45〜100にするのと同じ要領)
666デフォルトの名無しさん:05/02/07 19:35:36
>>665
もう少し詳しく教えてください。
667デフォルトの名無しさん:05/02/07 19:35:44
>>665
そのargorithmが分からないから質問しているんですが
668デフォルトの名無しさん:05/02/07 19:44:08
はぁ?
669デフォルトの名無しさん:05/02/07 19:53:19
666です

>>667は偽者です
670デフォルトの名無しさん:05/02/07 19:56:42
そんな事はどうでもいい
あんたはわかったのかね、わからなかったのかね
671デフォルトの名無しさん:05/02/07 19:59:29
>>658
搾取者より尊い
672デフォルトの名無しさん:05/02/07 20:15:58
>>666
値域0.0-1.0から値域0.45-1.0への変換
if (a == 0) b = .45;
if (a == 0.1) b = .45 + .055
if (a == 0.2) b = .45 + .11
以下同様に
if (a == 1) b = 1;
673デフォルトの名無しさん:05/02/07 20:19:55
>>662
aが0.0〜1.0の範囲の乱数として、
a * (1.0-0.45) + 0.45
674デフォルトの名無しさん:05/02/07 20:20:08
>>666
もう少し

1.0〜100の間の乱数を作る
2.0〜100を0〜55に変換(100→55になるようにすればOK)
3.0〜55を45〜100に変換
675デフォルトの名無しさん:05/02/07 20:22:22
>>658
本当なんだから仕方ない。
676デフォルトの名無しさん:05/02/07 20:35:36
(・3・)
677デフォルトの名無しさん:05/02/07 21:36:26
while (*expression) {
 if (isdigit(*expression) {
  m = strtol(expression, &expression);
  push(m);
 } else {
  switch (*expression++) {
   case '+':
    m = strtol(expression, &expression);
    push(m);break;
   case '-':
    m = -(strtol(expression, &expression));
    push(m);break;
   case '*':
    m = strtol(expression, &expression);
    pop(&n);
    m = n * m;
    push(m);break;
   他の演算子たち
}
スタックの中身を合計

これで累乗を
pop(&n);
if (n>0) {
 n = -n;
 m = -(pow(n, m));
} else
 pow(n, m);

とすると式の始めがマイナスの記号の時正しくない結果になってしまいます。
なにかいい方法があれば教えてください。
678デフォルトの名無しさん:05/02/07 21:36:48
(rand()%(100-45)+45)/100.0
679デフォルトの名無しさん:05/02/07 21:38:24
アフォ
680デフォルトの名無しさん:05/02/07 21:42:55
>>677
- の - で + にしたいのか、
絶対値部分を取り出して符号反転する気なのか、
どっちだ?
681677:05/02/07 21:46:57
ぬるぽ
682デフォルトの名無しさん:05/02/07 21:50:45
>>681
いまどきそんな事を言う人間いたんだ
恥ずかしくない?人として
683677:05/02/07 21:52:27
うん
684デフォルトの名無しさん:05/02/07 22:03:28
がるぽ
685デフォルトの名無しさん:05/02/07 22:15:19
>>681 ガッ
>>684 ヌッ
686デフォルトの名無しさん:05/02/07 22:38:16
687デフォルトの名無しさん:05/02/07 22:41:51
数年ぶりにC/C++触った。
動的2次元配列って、どんなんだっけ?
char**pp;
int x,y;
int xx=9,yy=9;

pp=new char*[xx];
for(x=0;x<xx;x++){
pp[x]=new char[yy];
for(y=0;y<yy;y++){
pp[x][y]=x*y;
}
}

for(x=0;x<xx;x++){
delete [] pp[x];
}
delete [] pp;
こんな感じでコンパイル通っちゃったけど、だいじょうぶ?
688デフォルトの名無しさん:05/02/07 22:48:05
>>687
CとC++の区別もできねえ奴は氏ね
689デフォルトの名無しさん:05/02/07 22:50:08
区別ができてねえ上に構造化も OOP もカス以下だな
690デフォルトの名無しさん:05/02/07 22:54:05
>688
ごめんよ。氏ぬほど頑張って思い出すよ。

>689
すまんね。リハビリ程度にmainにベタ書きしてもた。
もっと練ってから来るよ。
691デフォルトの名無しさん:05/02/07 23:00:04
数年でここまで忘れられるもんじゃないだろ
692デフォルトの名無しさん:05/02/07 23:00:38
>>680
nが-だったら絶対値を-符号にしてpush
+だったら絶対値をpushという風に考えてました。

上記のソースでは0-2^2だと正しい答えになりますが
-2^2だと-4になってしまうので困ってたんですが
-が式の先頭だったら単項の-として扱えば計算できますね。
簡単なことでした。ありがとうございまた。
693デフォルトの名無しさん:05/02/08 00:56:06
> 改行がおおいと言われたので閉括弧をすべてくっつけました

そのくせ括弧の内側をあけるぼけ。
694デフォルトの名無しさん:05/02/08 00:58:52
誤爆?
695デフォルトの名無しさん:05/02/08 01:00:13
> そのargorithmが分からないから質問しているんですが

やーい > r
696デフォルトの名無しさん:05/02/08 01:01:59
誤爆?
697デフォルトの名無しさん:05/02/08 01:03:19
>>619
> 上記のとうり

ぼけ > うり
698デフォルトの名無しさん:05/02/08 01:04:30
池沼?
699デフォルトの名無しさん:05/02/08 01:14:39
時代の流れについていけない人が居る模様
700デフォルトの名無しさん:05/02/08 01:23:28
700
701デフォルトの名無しさん:05/02/08 01:52:46
プログラミング系の講座サイトをまわってC言語を学んでいる者ですが、
ほとんどのサイトで

『グローバル変数は有害である。使うべきではない』

と言われていますが、プロの方たちはグローバル変数をひとつも使わないのでしょうか?
もし使うのなら、どういった基準で使うのでしょうか?

参考> チームではなく個人でプログラム
702デフォルトの名無しさん:05/02/08 01:54:08
>>701
OOP学べば?
703デフォルトの名無しさん:05/02/08 01:55:00
コード量にもよるけれども、個人でやる分にはそこまで神経質に
なる必要はないんじゃないか?
704デフォルトの名無しさん:05/02/08 01:55:57
>>701
何故有害なのかを理解してる?
705デフォルトの名無しさん:05/02/08 01:58:57
>>701
グローバル変数ってどの関数からでも参照できちゃうでしょ?
だから、収集つかないの。どの関数からその変数が変更されるかっていうのを把握する
のは、とても難しいのね。
それで、グローバル変数はなるべく使わないということ。
使用するシーンの一例として、ごく小規模なプログラムで、画像処理用のバッファなど
をグローバル変数として宣言して使うことはあるかもしれません。
そういう単一の、共有するリソースならばグローバル変数として扱っても良いでしょう。
C++が使えるなら、グローバル変数を使うシーンは全くありません。
706デフォルトの名無しさん:05/02/08 02:05:56
まともなデバッガのない貧弱な開発環境を使ってます。

printf()をあちこちに埋め込むようなデバッグをしているのだが、
全部の関数の開始時とリターン時にprintfを書くのが面倒でつ。

なんか良い方法ないかな?
全部の関数のin,out時にprintfできる便利な方法があったら
教えて下さいです。
707デフォルトの名無しさん:05/02/08 02:07:53
プリプロセッサでやりゃいいじゃん
708デフォルトの名無しさん:05/02/08 02:07:56
>>701
It depends.
709デフォルトの名無しさん:05/02/08 02:13:17
>>701
グローバル変数は常にメモリ領域を確保してるからメモリの無駄遣いになりやすい
710デフォルトの名無しさん:05/02/08 02:14:43
>>709
そんな決まり、どこにあった?
711デフォルトの名無しさん:05/02/08 02:17:31
>>710
独習Cに書いてあったw
712デフォルトの名無しさん:05/02/08 02:18:28
笑い事じゃねえだろ
713711:05/02/08 02:20:57
「独習Cに書いてあったw 」←受け売りを平然と書き込む自分に対する嘲笑
714701:05/02/08 02:27:28
たくさんの方にレスしていただいてどうもです。

自身の力不足のため場面によってはグローバル変数以外の手段を見出せないことがあるのですが、

>グローバル変数を使うシーンは全くありません。(>>705さん)

と、グローバル変数に代わる手段があるそうなので、
これからはそういったものを勉強し、役立てたいと思います。
715デフォルトの名無しさん:05/02/08 02:29:45
いや、グローバル変数バリバリ使っていいって
716デフォルトの名無しさん:05/02/08 02:31:14
>>701
>と言われていますが、プロの方たちはグローバル変数をひとつも使わないのでしょうか?
翻訳単位をまたぐようなグローバル変数は使わない。

>もし使うのなら、どういった基準で使うのでしょうか?
小規模な使い捨ての個人のプログラムに使う。
他人の、結果がグローバル変数渡しの関数を使わなければならないときに渋々使う。
グローバル変数がプロセスやタスクの終了まで定数と保障されているなら使う。
717デフォルトの名無しさん:05/02/08 02:37:21
話は変わるんだけどストリームってどうやって理解したらいいの?
参考書みると「C言語の定義でいう「ファイル」同士の差異を吸収してくれるもの」とかいう訳のわからない
説明が載ってるんだけど要するににBIOS=ストリームってこと?
718デフォルトの名無しさん:05/02/08 02:41:00
Basic Input Output Stream
719デフォルトの名無しさん:05/02/08 02:42:16
城達也
720デフォルトの名無しさん:05/02/08 02:42:38
アイストリーム
721デフォルトの名無しさん:05/02/08 02:43:46
>>718
サンキュ、BIOSってその略だったんだ・・・・^^;
722デフォルトの名無しさん:05/02/08 02:47:19
>>721
真に受けるな!!!!
723デフォルトの名無しさん:05/02/08 02:50:48
Basic Input Output System
724デフォルトの名無しさん:05/02/08 02:52:26
チッ!
725デフォルトの名無しさん:05/02/08 06:52:01
>>717-724
ワロタ
726デフォルトの名無しさん:05/02/08 06:57:11
Busu Inkin Omanko Seeeseee
727デフォルトの名無しさん:05/02/08 07:05:32
>>717
「どんなに凝った料理を食べても、
結局、体から出てくる時は皆同じ」って事。
728デフォルトの名無しさん:05/02/08 07:39:30
消化不良のときは違うぞ
729デフォルトの名無しさん:05/02/08 07:44:28
>>727
そうだ、お前のうんちの中のとうもろこしの残骸を食べてやろう。
730デフォルトの名無しさん:05/02/08 10:02:23
いえ、それはわたしがもらいます。
あなたは残りの部分を
731デフォルトの名無しさん:05/02/08 10:25:45
ようやく俺俺が埋まったか。
732デフォルトの名無しさん:05/02/08 10:33:41
で、ここがネタスレに?
733デフォルトの名無しさん:05/02/08 10:38:46
もともと寝たスレみたいなもんじゃんか
734デフォルトの名無しさん:05/02/08 10:53:48
vectorはC++でしか使えないんでしょうか?
Cで使おうとしたんだけど動いてくれない・・・
735デフォルトの名無しさん:05/02/08 11:02:18
作ればいい。
736デフォルトの名無しさん:05/02/08 11:14:24
ガウス関数を乱数として用いたいのですが、
#include<math.h>
int k;
float a;
double f[100];
for(k=1;K<100;k++){
f[k]=exp(-k*k/(s*s));
}
とおいたのですが、f[k]は常に1になってしまい、乱数を発生しません。
どこが悪いのでしょうか??
737デフォルトの名無しさん:05/02/08 11:20:26
適当に打ち込まずに、正確にコピペしる
738デフォルトの名無しさん:05/02/08 11:21:34
Visual C++を使っています。
MFCを使わないでWin32でプログラムしてます。
画像の保存の仕方がよく分からないのですが手軽にできる方法はないでしょうか?
公開するのではなく自分で使うだけなので動けば何でもいいです。
739デフォルトの名無しさん:05/02/08 12:19:05
>>738
標準Cではできません
740デフォルトの名無しさん:05/02/08 12:34:50
>>705
>グローバル変数ってどの関数からでも参照できちゃうでしょ?
>だから、収集つかないの。

収集がつかなくなるような使い方、設計の方が悪いのであって、
グローバル変数自体が悪いわけではない。

そもそも、適切な設計をすれば、
グローバル変数を多用するような事にはまずならない。
自分たちの非をグローバル変数のせいにするな!
741デフォルトの名無しさん:05/02/08 12:48:40
742デフォルトの名無しさん:05/02/08 12:49:07
>>740
グローバル変数使わなければ自動的に回避できる問題が多いのに、
わざわざグローバル変数使ってまで注意深く設計する意図がわかりません。
743デフォルトの名無しさん:05/02/08 13:00:44
グローバル変数に強い思い入れのある信者もアンチも
ネットの下らない議論で時間を浪費するので生産性が低いのは羞恥の事実。
744デフォルトの名無しさん:05/02/08 16:20:57
普通に作ればグローバル変数なんてそうそう使わない
昔はBASIC出身者が濫用してたらしいが

それにグローバル変数使うと後から読む際読みにくくなる

自分の場合使わない一番の理由は名前考えるの面倒だからなんだけどね
745デフォルトの名無しさん:05/02/08 16:23:42
さぞかし素敵なローカル変数名なんでしょうなぁ。
#iとかjとかaとかbとか? プ
746デフォルトの名無しさん:05/02/08 16:25:49
flagという名前のグローバル変数よりはましかと。
747デフォルトの名無しさん:05/02/08 16:43:16
昔見たコードでループに使う変数がグローバルになってた事がある。
748デフォルトの名無しさん:05/02/08 17:05:04
ローカル変数でも、C言語だと最初に宣言しないといけないので、煩雑になる(C99は良いけど)
一応、互換性考えて無意味に最初に宣言する事が多いけど、変数が増えてくるとややこしい
(ループ内でしか使わないようなのもあるし)
749デフォルトの名無しさん:05/02/08 17:22:25
1 2 3 4 5
1 2 5 6 7
3 5 6 6 6

このようなデータのファイルを配列に入れたいのですが、うまくできません。

for(i=0;i<Num;i++){
 for(j=0;j<point;j){
  fscanf(fp3,"%d ",&hop[i][j]);
}

}


このようなプログラムではだめなのでしょうか?
750名無しさん@Vim%Chalice:05/02/08 17:48:39
gdbserverでリモートデバッグしたことありますか?
751デフォルトの名無しさん:05/02/08 18:04:26
>>748
俺は C99 で書いちゃう。もしくは

{
int i;
for (...) {
...
}
}

…かな。

>>749
#define ROWS    5
#define COLS    3

for (i = 0 ; i < ROWS ; ++i) {
    for (j = 0 ; j < COLS ; ++j) {
        fscanf(fp3, "%d", &hop[i][j]);
    }
}
j が増えてねーぞ。
752デフォルトの名無しさん:05/02/08 18:25:05
グローバル変数なんて使ってると、構造化プログラミングに反するぞ。
関数の再利用がし難くなる。
753デフォルトの名無しさん:05/02/08 18:29:29
再利用しないもん、使い捨てだもん。
新しく作ったほうが安いもん。
754デフォルトの名無しさん:05/02/08 19:29:59
MSが作ったものを再利用させてもらってるんだけどね
755デフォルトの名無しさん:05/02/08 19:47:54
ソース八行目です
if ((y%4 == 0 && y%100 != 0 )||y%400 == 0) {

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
sample3.c:
エラー E2206 sample3.c 8: 不正な文字 '|' (0x8162)(関数 main )
エラー E2206 sample3.c 8: 不正な文字 '|' (0x8162)(関数 main )
エラー E2377 sample3.c 8: If文に ) がない(関数 main )

と表示されて実行できません、何故か何処が誤ってるか解らないんです
何回か再試行していますが、こう表示されてしまいます。
間違っている所を、ご示唆お願い致します。
756デフォルトの名無しさん:05/02/08 19:50:33
半角にしろ
757デフォルトの名無しさん:05/02/08 19:51:12
||の間にスペースがあるからじゃないの
758デフォルトの名無しさん:05/02/08 19:54:07
|| これが文字パレットからしか出せないんです・・・
どうやれば出せるのでしょうか?すみませんorz
あと If文に ) がない と表示されますが、( は入れています
此は半角でないからでしょうか?
759デフォルトの名無しさん:05/02/08 19:56:03
恐らく不正文字のエラーによって、if文が終了したものと見なされてエラーになったのだろう。
前者を修正しても消えなかったら再検討で。
760デフォルトの名無しさん:05/02/08 19:57:01
コピペしたら
||
761デフォルトの名無しさん:05/02/08 19:58:27
実行できました!!!
ありがとうです!
762デフォルトの名無しさん:05/02/08 19:58:27
>>758
||
↑をコピペしてどうぞ
俺日本語キーボードじゃないんで出し方はシラネ
763デフォルトの名無しさん:05/02/08 20:00:34
エラーはひとつの文法ミスだけで連鎖的に何個も出てきたりするから、
とりあえずは一番上のエラーから片付けたほうがいいよ。
764デフォルトの名無しさん:05/02/08 20:01:27
#include<stdio.h>
#include<stdlib.h>
main()
{
int u,*h;
for(u=60;u<=100;u=u+10)
{
h=(int *)malloc(sizeof(int));
h=&u;
printf("%3d %10p\n",*h,h);
}
}

このプログラムは合っていますか?
(問題にはポインタ変数のみを用いて表示すること、とあるんですが…。
765デフォルトの名無しさん:05/02/08 20:08:18
もう一つ質問で、すみませんが
#include <stdio.h>

main() {int y;

for(y = 1900; y <= 2000; y++)
{if ((y%4 == 0 && y%100 != 0 )||y%400 == 0)
{printf("%d\n", y);
}
}
return 0;
}

これのソースで 何故 forの前には { が無いのに
ifの前には { があるのでしょうか?
あとC言語に於ける { の意味が解らないんですが
どういう意味なんでしょうか?本やググッテも意味が一向に出てきません
ご教授戴けたら幸いです。
766デフォルトの名無しさん:05/02/08 20:08:24
>>764
解放し忘れてる
767デフォルトの名無しさん:05/02/08 20:09:41
>>766
それのどこが問題なの?
768デフォルトの名無しさん:05/02/08 20:11:18
>>705
void sure_chigai_sine(std::ostream& shared = std::cout)
{
shared << "koitsu boke" << std::endl;
}
規模の小ささなんぞどうねじ曲げると
画像処理用のバッファを外部変数にする動機になるんだよ
おおかた「外部変数じゃなきゃやだやだじたばた」系の
非論理的なバイアスフィルタでも入ってるんじゃねえのかw3
769デフォルトの名無しさん:05/02/08 20:11:44
>>764
main() 内に return 文がない。
770デフォルトの名無しさん:05/02/08 20:13:19
>>768
C++ はスレ違い。お前もイッテヨシ。
771デフォルトの名無しさん:05/02/08 20:16:16
>>764
目的が分からないのに合ってるかどうか分かるかよ、ボケ。
あと u = u + 10 じゃなくて、+= 使ってくれ。

>>765
> これのソースで 何故 forの前には { が無いのに ifの前には { があるのでしょうか?
マジレスすると入門書をキチンと理解してください。
イチから読み直せ。書いてねーわけねー。
772デフォルトの名無しさん:05/02/08 20:16:29
>>770
(・∀・)ニヤニヤ
773764:05/02/08 20:21:51
#include <stdio.h>
#include <stdlib.h>
main(){
int v,l,*t,*p;
printf("%p\n",&l);
v=1;
t=&v;
printf("%p\n",t);
printf("%d\n",*t);
p=(int *)malloc(sizeof(int));
l=2;
p=&l;
printf("%p\n",p);
printf("%d\n",*p);
}

整数型のメモリの動的確保っていうのはする必要がないのでしょうか?

#include <stdio.h>
#include <stdlib.h>
main(){
int l,*p;
l=4;
printf("%p\n",p);
p=(int *)malloc(sizeof(int));
*p=l;
printf("%p\n",p);
printf("%d\n",*p);
}

こうすると最初のprintfのアドレスは表示されないのですが。
774デフォルトの名無しさん:05/02/08 20:22:49
>>765
  for(y = 1900; y <= 2000; y++) 
1) {if ((y%4 == 0 && y%100 != 0 )||y%400 == 0) 
2) {printf("%d\n", y); 
3) } 
4) } 

1)の { はfor文の始まり、4)の } はfor分の終わり。
つまり1から4までが、forの条件の下に繰り返されるということ。

2)の { はif文の始まり、3)の } はif文の終わり。
つまりifの条件が合えば2から3までが実行されるということ。

ちなみに { } の中が1つの文だけの場合、 { } はいらない。

いちおう丁寧に説明したつもりだけど、これは直感的に理解することだよ。
775デフォルトの名無しさん:05/02/08 20:24:01
>>771
u=u+10;
ってダメなの?
776765:05/02/08 20:31:23
>>771
すんみません、再度入門書を読み直してみます

>>774
ありがとうございます!! 参考にさせて戴きます。

ありがとうございました。
777デフォルトの名無しさん:05/02/08 20:36:38
u =+ 10のほうがいいみたい
加算して代入
778デフォルトの名無しさん:05/02/08 20:39:25
最近バカが多いな
どうしようもない学生が増えたのか、
それとも一人が複数に見えるのか…
779デフォルトの名無しさん:05/02/08 20:40:44
>加算して代入
ハァ?「足し込む」って言えやボケ
780765:05/02/08 20:41:06
>>774
もう一個そこで疑問に残る事があるんですが
何故、{プログラム〜〜}
例えば
{if ((y%4 == 0 && y%100 != 0 )||y%400 == 0)}

{printf("%d\n", y); }

このように{}閉じで終わらせるとエラーが出て、いけないんでしょうか?
で、{ プログラム〜〜〜
  {プログラム〜〜
  }
  }
みたいに最後に{ を付けた分だけ、最後に括らなければいけないんでしょうか?

これが毎回、とても疑問に思います。
781デフォルトの名無しさん:05/02/08 20:45:05
>>780
Python使え
782765:05/02/08 20:49:30
はい・・・
783デフォルトの名無しさん:05/02/08 20:55:17
>>780
サンプルを色々見てると分かると思うよ。
直感的に理解するところだから、説明がしづらい。
それに単なる文法の規則だと思うから、覚えてもらうしかない。
784デフォルトの名無しさん:05/02/08 20:55:20
>>764
> h=(int *)malloc(sizeof(int));
この行は要らない。
785デフォルトの名無しさん:05/02/08 20:57:57
再利用性を重視し、グローバル変数を使わずに設計した結果、
納期には間に合わず、かといって引数だらけで再利用する機会も
無いコードの残骸が残っただけであった・・・
786デフォルトの名無しさん:05/02/08 20:58:11
>>783
そうなんですか。直感ですね。
やっぱしC言語は難しいです。
これからも諦めず、がんばります。
ありがとうでした。
787デフォルトの名無しさん:05/02/08 20:59:27
>>785
お前才能ないわ。
788デフォルトの名無しさん:05/02/08 21:01:38
そもそも再利用性重視ならCなんて低脳言語使うかよ
789デフォルトの名無しさん:05/02/08 21:02:27
>>784
ありがとうございます。
#include <stdio.h>
#include <stdlib.h>
main(){
int *p;
printf("%p\n",p);
p=(int *)malloc(sizeof(int));
printf("%p\n",p);
}
これの実行結果が下でした
CCCCCCCC
00780EC0
790デフォルトの名無しさん:05/02/08 21:02:57
知識の再利用で最新情報の学習量が0に!
791デフォルトの名無しさん:05/02/08 21:04:07
>>787
オマエモナー、
グローバル毛嫌いする理由分からん。
OSのデータにアクセスできなったら困るわ
792デフォルトの名無しさん:05/02/08 21:06:24
>グローバル毛嫌いする理由分からん。
>OSのデータにアクセスできなったら困るわ

真性のバカですか?

>どういうわけか無能なプログラマほどグローバル変数を偏愛し,有能な人ほど避けるものです。
どうやらこれは正しかったようだ
793デフォルトの名無しさん:05/02/08 21:11:51
>>792
がいじめるー、でもがんばる。
よく聞けよ。
世界はグローバルな変数で満ち溢れてるんだよ、
794デフォルトの名無しさん:05/02/08 21:23:51
(・∀・)ヘイヘーイ!!
795デフォルトの名無しさん:05/02/08 21:36:03
>>793
そう、俺の愛はグローバルさ。
796デフォルトの名無しさん:05/02/08 21:37:46
>本人の勘違い(英語で書いたらカッコいい。
>これからは国際化時代でグローバルスタンダードだもんね。みたいな),
797デフォルトの名無しさん:05/02/08 21:42:01
全部英語にしちゃえばいいのに。なんでそうしないんだろう。
きっとその方が楽だよ。アメリカもイギリスも英語使っているし、後進国である日本
が白人様のご英知を存分にいただくには英語を標準語にするしかない。
798デフォルトの名無しさん:05/02/08 21:42:04
>>794
(・∀・)ヘイヘーイ!!
799デフォルトの名無しさん:05/02/08 21:53:40
>>797
うちの近所にいる白人様は「グラッチェグラッチェ、ハッハッハッ」と言ってますが、
どう扱えばいいですか?
800デフォルトの名無しさん:05/02/08 21:55:00
>>800
4様x200
801デフォルトの名無しさん:05/02/08 21:55:16
>>799
拝みなさい。
802デフォルトの名無しさん:05/02/08 21:56:47
>>799
スゲーよ、英語なんぞクソ食らえだな。
803デフォルトの名無しさん:05/02/08 22:00:53
嫌中厨を煽っていて出遅れた。
804デフォルトの名無しさん:05/02/08 22:59:02
>706
C99ならいいんだけどなぁ
805デフォルトの名無しさん:05/02/08 23:02:13
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
main(){
int b,c[6];
srand(time(0));
for(b=0;b<6;b++)
{
c[b]=rand()%(43)+1;
printf("%d\n",c[b]);
}

上のランダムの関数について質問なのですが、
「time()は”1970年1月1日から何秒たったか”という数を返すコマンド
つまり経過時間によって返す値が変わってくる」と説明があったのですが、
上の場合1〜43の数字からランダムに数字が選択されて出力されると思うのですが、
(数字がダブルこともあるが、きちんとシャッフルされている)
どれくらいシャッフルされて数字が選択されるのでしょうか?
806デフォルトの名無しさん:05/02/08 23:03:32
>>805
実装によるから答えられない
807デフォルトの名無しさん:05/02/08 23:04:05
Cの規定に「どのくらいランダムでないといけない」ってのあったっけ?
808デフォルトの名無しさん:05/02/08 23:11:31
去年のCマガに、BCCとかVCでrandの実装の違いを比較してたな
立ち読みだからあんまり覚えてないけど
809デフォルトの名無しさん:05/02/08 23:17:40
>>805
つうか一体何を心配してるんだ?
810デフォルトの名無しさん:05/02/08 23:23:46
>>805
関数のことをコマンドってゆーな
っつうのはいいとして、rand()%43 の乱雑さは信用ならないと思え。
使うなら上位ビットの方がまし。
811デフォルトの名無しさん:05/02/08 23:25:19
>>810
> rand()%43 の乱雑さは信用ならない
どこでそう決められてるの?
812デフォルトの名無しさん:05/02/08 23:27:38
>>810
それ昔の実装の話か?

まあ気になるならデヴかMT使っとけ
813デフォルトの名無しさん:05/02/08 23:27:38
>>810
標準Cにおいてrandの実装が上位ビットがマシという根拠は何?
814デフォルトの名無しさん:05/02/08 23:36:29
ランダムはカルノーに聞け、
奏すれば平均化される、ぷ
815デフォルトの名無しさん:05/02/08 23:52:58
1, 2, 3, .... って並びでも充分ランダムだよ?
816デフォルトの名無しさん:05/02/09 00:07:08
松本 眞氏 特別講義 「間違いだらけの擬似乱数選び」
ttp://www.soi.wide.ad.jp/class/20010000/slides/03/index_1.html

#松本 眞氏…MTの中の人
817デフォルトの名無しさん:05/02/09 00:19:02
>>816
同じ研究室だった。
818デフォルトの名無しさん:05/02/09 00:22:35
大学当時から優秀な奴だったよ。整数論やってたんだけど。
819デフォルトの名無しさん:05/02/09 00:24:07
#define  MACRO  100
#define  MACRO( a )    (100*a)

当然だが、こうやると2重定義になる。
でもどうしても同じシンボル名で関数型マクロとデータ型マクロを
混在使用したいのだが、良い方法ないかな?
820デフォルトの名無しさん:05/02/09 00:25:26
無い
821デフォルトの名無しさん:05/02/09 00:39:57
>>819
これで通る筈。

#define MACR0 100
#define MACRO( a ) (100*a)
822デフォルトの名無しさん:05/02/09 00:46:03
>>819
プリプロセッサ書け。
823デフォルトの名無しさん:05/02/09 00:53:44
ぷりぷりぷろせっさ?
824デフォルトの名無しさん:05/02/09 00:55:13
マインスイーパーのプログラムが書けないので教えてください。
825デフォルトの名無しさん:05/02/09 01:00:38
>>824
マインスイーパーってなに?
アルゴリズム提示しろそうすれば、NPでも解が得られるかも
知れない
826デフォルトの名無しさん:05/02/09 01:02:49
はじめてのCヽ('A`)ノウンコー
827デフォルトの名無しさん:05/02/09 01:10:05 ID:fXdoQ69J BE:37131089-#
C言語で、指定したディレクトリ内のファイル一覧を得るには
どうすればいいですか?
828デフォルトの名無しさん:05/02/09 01:11:25
829デフォルトの名無しさん:05/02/09 01:16:57
>>827
C-FAQに書いてたような気がする。
830デフォルトの名無しさん:05/02/09 01:20:27
>>828
もしかして全部DAT落ちですか
831デフォルトの名無しさん:05/02/09 01:20:40 ID:fXdoQ69J BE:6189326-#
>>829
探したらありました。すみませんでした。
832デフォルトの名無しさん:05/02/09 01:24:37
>>827の様な質問をするヤシは、ファイルシステムがない環境をどう考えているのだろう?
833デフォルトの名無しさん:05/02/09 01:26:07
>>832
彼が使っているシステムにファイルシステムがあるから質問しているんだと思うが。
834デフォルトの名無しさん:05/02/09 01:26:10
>>832
ふぁイルシステムはいらないけど、でもプログラムの
ロードストアで必要です、ごめんよ。
835デフォルトの名無しさん:05/02/09 02:19:28
mallocで確保した領域は必ずfreeしないと駄目なんですか?
836デフォルトの名無しさん:05/02/09 02:20:46
そう主張する馬鹿がこの世には存在するというだけ
837デフォルトの名無しさん:05/02/09 02:21:16
したいときにすればいい
必ずしなきゃいけないことはない
838835:05/02/09 02:25:35
そうですか。
ありがとうございます。
839デフォルトの名無しさん:05/02/09 02:36:38
>>835
しないと駄目。
840デフォルトの名無しさん:05/02/09 03:20:55
しないよりはした方が良いな
841デフォルトの名無しさん:05/02/09 03:43:12
したほうが良いのは何で?
842デフォルトの名無しさん:05/02/09 03:43:51
最後には必ず。
もし癖を付けておかないと、サウンドデバイスを開いた時などもきっと閉じ忘れるよ。
843デフォルトの名無しさん:05/02/09 05:18:19
大きな配列をグローバル変数で宣言すると

error C2078: 初期化子の数が多すぎます。

というエラーメッセージが出ます。どうすればいいでしょうか?
844デフォルトの名無しさん:05/02/09 05:54:03
>>843
スレ違いではあるんだが…
処理系と定義を記してみよ。おそらくVCだと思うんだが。
845デフォルトの名無しさん:05/02/09 08:45:06
> でもプログラムの ロードストアで必要です

いいえ、パッチSWITCHで充分
846デフォルトの名無しさん:05/02/09 08:46:06
> C言語で、指定したディレクトリ内のファイル一覧を得るには

opendir

system("ls")
847デフォルトの名無しさん:05/02/09 09:06:59
>>843
大きい配列は関係ないと思う。

char a[3] = {1,2,3,4};

みたいになっているだろ?
848デフォルトの名無しさん:05/02/09 09:28:02
>>843
せっかくエラーメッセージを日本語に翻訳したのになぜ理解できないのか。
849デフォルトの名無しさん:05/02/09 09:37:07
he cannot read Janapanese.....
850デフォルトの名無しさん:05/02/09 09:37:43
uho! Japanese
851デフォルトの名無しさん:05/02/09 11:50:49
agemasu
852デフォルトの名無しさん:05/02/09 11:53:50
omoshiroi
853デフォルトの名無しさん:05/02/09 12:02:46
 ∧_∧
( ;´∀`) ちんこ勃ってきた。
人 Y /
( ヽ し
(_)_)
854デフォルトの名無しさん:05/02/09 12:12:59
his man thing gets power
855デフォルトの名無しさん:05/02/09 12:51:38
nuts ;-)
856デフォルトの名無しさん:05/02/09 12:56:46
;-)
↑これ何?
857デフォルトの名無しさん:05/02/09 12:59:56
西洋顔文字90度ひねる
858デフォルトの名無しさん:05/02/09 13:06:33
>西洋顔文字90度ひねる
意味ワカラン
859デフォルトの名無しさん:05/02/09 13:14:35
.=左目 ,=右目 -=鼻 )=口
860デフォルトの名無しさん:05/02/09 13:18:13
確かに顔に見えるけど、一体何が言いたいのか良くワカラン顔だ…
861デフォルトの名無しさん:05/02/09 13:29:17
>>860
センスのかけらも無い人間だな
862デフォルトの名無しさん:05/02/09 14:17:38
http://allabout.co.jp/study/basicenglish/closeup/CU20031103A/
;-) ウインク

何度見ても壁から顔を半分だけ出してじーっと見ているようにしか見えない。
863デフォルトの名無しさん:05/02/09 14:26:15
:3ミ スレ違いウザいのだ
864デフォルトの名無しさん:05/02/09 14:46:41
プログラムを組んでいて、出力の値で、nanって出てくるんですが、
これってなんですか?
865デフォルトの名無しさん:05/02/09 14:48:05
インド人の主食 うまいな
866デフォルトの名無しさん:05/02/09 14:56:07
867デフォルトの名無しさん:05/02/10 00:11:57
(ーー;)
868デフォルトの名無しさん:05/02/10 00:23:59
>>865
パン屋さんで売っているよね。パン屋さんに普段行かないから、最近知った。
869デフォルトの名無しさん:05/02/10 00:39:12
なんだばかやろう
870デフォルトの名無しさん:05/02/10 00:57:53
アジャンタで目撃したことあります > 「これはなんですか?」と質問している客
871デフォルトの名無しさん:05/02/10 01:10:51
そーです ナン=ソー でカンガルーになるw
872デフォルトの名無しさん:05/02/10 02:14:06
doubleの配列をがすっとインラインアセンブラのSSE2で処理させる前に、
128bitでアライメントのとれてるメモリを確保したいのですが、
いまいちきれいな手を思いつかないので、
とりあえず、手元の gcc 3.3 + glibc 2.3 な linux たと、
malloc した結果は 64bit 境界ではアライメントあってるらしいという前提のもと、
いまのところ、double 一個分多めにmallocしといて、
if( (long)v % 16 ) v++;
とかいうなんだかなーってことやってます。
共用体つかうとか、ビット演算でマスクとアンドとるとか、
すれば何とかなりそうな気はするのですが、
ポインタのサイズを決めうちにしない方法がわからず...
Cでアライメントとる定石とかあれば、教えてえろいひと
873デフォルトの名無しさん:05/02/10 02:47:13
posix_memalignっつーのがあるらしいよ。
使ったこと無いけど。
874デフォルトの名無しさん:05/02/10 03:43:48
p = _aligned_malloc(size, alignment);
875デフォルトの名無しさん:05/02/10 03:47:08
>>872
足してand
876デフォルトの名無しさん:05/02/10 03:47:11
アジャンタでナンだけ食べて帰ってきたことあるよ。
家から歩いて3分くらいのところだったからいつも行ってたなあ。
877デフォルトの名無しさん:05/02/10 03:48:21
double array[99999999] __attribute__(aligned(16));
とグローバルに確保して自分で管理
878デフォルトの名無しさん:05/02/10 07:44:13
専用関数で16バイト余分にmallocして、call元に返すのは16バイトで
アライメントしたアドレスとし、そのアドレス-4に実際に捕捉した
アドレスを入れる。
解放処理では-4のアドレスから本来の捕捉アドレスを取得してfree。

なんてのをSSE最適化を行っているプログラムでみたよ。
879デフォルトの名無しさん:05/02/10 08:39:38
え? PentiumV Linux gccならdoubleは64bitなのでは?
880デフォルトの名無しさん:05/02/10 15:44:53
大量のテキストデータを処理したいのですが、
普通の配列の宣言ではどれくらいまで確保できるでしょうか?
それとも、そのような用途に使うのでれば別の手段を使った方がいいのでしょうか?
allocなどは動的メモリの確保で大量確保の手段ではないですよね?
881デフォルトの名無しさん:05/02/10 15:48:19
>>880
大量に取るならmalloc使っとけ。OSの許す限界まで取れる。
配列じゃサイズ固定で使いづらいし、もしローカルに取ったら一発でアボーンだぞ。
882デフォルトの名無しさん:05/02/10 15:48:40
>>880
やりたい事を詳しく。
883デフォルトの名無しさん:05/02/10 15:50:03
で、具体的にどのくらいの大きさなんだい?
884デフォルトの名無しさん:05/02/10 15:50:13
>>880
普通の配列がどれくらいの要素数まで使えるかというのは環境依存。
少なくともmalloc/callocは普通の配列よりよっぽど多くメモリを確保できる。つまり大量確保にも使う。
885デフォルトの名無しさん:05/02/10 15:52:31
mmap使え
886デフォルトの名無しさん:05/02/10 15:52:46
>>880
目安として要素数10000以上の配列は宣言するな。
887デフォルトの名無しさん:05/02/10 15:53:17
>>880
VC++のデフォルトでは1MB
888デフォルトの名無しさん:05/02/10 15:53:33
どういう目安だよw
889デフォルトの名無しさん:05/02/10 15:53:35
>>886
何故ですか?
890デフォルトの名無しさん:05/02/10 15:54:56
>>889
経験則。
891デフォルトの名無しさん:05/02/10 15:55:42
>>890
このゴミ野郎め。
892デフォルトの名無しさん:05/02/10 15:56:19
>>886
はいまだにCP/M使い
893デフォルトの名無しさん:05/02/10 15:56:45
>>891
よくわからん罵倒だな。
経験則はきちんと証明された理論がない限り重要だよ。
894デフォルトの名無しさん:05/02/10 15:58:00
>>887
スタックに取るとは書いてないな
895デフォルトの名無しさん:05/02/10 15:58:46
>>894
配列はスタックに取られるものじゃないの?
896デフォルトの名無しさん:05/02/10 16:01:00
>>893
お前の中では重要かもしれんが
人に教えるのであれば、そんなあいまいな事言うなよ
897デフォルトの名無しさん:05/02/10 16:01:15
関数外で宣言すればいいやんけ
898デフォルトの名無しさん:05/02/10 16:01:32
>>895
そうとは決まっていない。
899デフォルトの名無しさん:05/02/10 16:01:54
stack overflowのエラーがでたらstatic
これが俺の経験則
900デフォルトの名無しさん:05/02/10 16:03:17
テキストデータだけならC使わん
これが俺の経験則
901デフォルトの名無しさん:05/02/10 16:08:14
結論はまだだ。
>>880が何をやりたいか言わない限り結論は出ない
902デフォルトの名無しさん:05/02/10 16:08:44
>>900
俺の経験則では複雑な文字列処理をする時はCを使うこともあるな。
903デフォルトの名無しさん:05/02/10 16:09:19
例えばコンパイラとか。
904デフォルトの名無しさん:05/02/10 16:09:25
「10000以上の配列は宣言するな。」
で結論でてるじゃないか。
905880:05/02/10 16:10:30
どうもありがとうございます。
用途は仲間内で使うデータベースです。
mallocでいこうとおもいます。
906デフォルトの名無しさん:05/02/10 16:11:47
>>905
まてや・・・おまえな・・・
もういい。
907デフォルトの名無しさん:05/02/10 16:11:51
だったら、MSDEとかPostgreSQLとか使えよ。
自分でデータ管理するのは愚の骨頂
908デフォルトの名無しさん:05/02/10 16:18:16
>>907
禿同。
909880:05/02/10 16:19:04
えと、多分既存のデータ管理ソフトでは対応できないと思います。
私がもらった時に既にテキストエディタで頭の悪い独自の記述をされていて
それ専用の対応が必要なんです。
データが多いので今回なんとかしようと思いまして。
スレ違いになるのでこれで去りますね。
910デフォルトの名無しさん:05/02/10 16:21:30
>>909
藻前が作るソフトの方が対応出来ない。
911デフォルトの名無しさん:05/02/10 16:21:48
>>909
そのときは、移行プログラム作るべし、
幾ら変なフォーマットでも規則性はあるだろう?
後が楽だよ。
912デフォルトの名無しさん:05/02/10 16:21:50
>>909
ここに質問に来る分際で、頭の悪い記述かどうかを判断できると思っているのか?
913909:05/02/10 16:29:45
はいはい。
じゃあこれから4wayサーバとOracle買ってきますよ。

これで満足ですか?
じゃあさよなら。
914C初心者:05/02/10 16:33:19
すみません、馬鹿な質問です。
ANSI Cで書かれたコマンドラインフリーウェアーをDLLに移植したいと考えているのですが、
これは可能でしょうか?また手順などがありましたらご教授願います。
915デフォルトの名無しさん:05/02/10 16:33:31
>>913
うわ、逆ギレ
こういう奴が新卒で入ってくると迷惑だったりするんだよな。
916デフォルトの名無しさん:05/02/10 16:34:42
別に・・・昔のOSでも動きますが・・・(´・ω・`)
917デフォルトの名無しさん:05/02/10 16:34:53
>>914
ソースはあるのかないのか。
918C初心者:05/02/10 16:37:04
>>917
あります。VC++7.0でコンパイル出来ます。
919デフォルトの名無しさん:05/02/10 16:37:13
>>915
バカ、名前が今までと違うだろ。
釣られるな。
920デフォルトの名無しさん:05/02/10 16:46:08
>>918
VCのDLLプロジェクト作ってソースプロジェクトに登録して
ヘッダをDLL用に書き換えてビルドするだけ。
詳細はまずはヘルプ嫁。
921C初心者:05/02/10 16:58:03
>>920
うーん、ヘルプへのポインターをキボンヌ。
922デフォルトの名無しさん:05/02/10 17:01:00
>>914
まず、「DLLとは何か?」から勉強し直せ。
923デフォルトの名無しさん:05/02/10 17:03:09
馬鹿はともかくものぐさをサポートする気はない
924デフォルトの名無しさん:05/02/10 17:50:30
>>915
DB勧めたりして干渉する必要も無いと思うから、ほっとけば良いだけだと思うがな
(親切心だろうが、DB作成で本人が困ってもそれはここで議論する必要ない話だし…C言語スレなんだから)
925デフォルトの名無しさん:05/02/10 19:19:33
すみませんが
C言語で引数と出てきますが
意味が解りません、教本をみても意味が載っていません
ご示唆、お願い致します。
926デフォルトの名無しさん:05/02/10 19:31:34
int hoge(int 引数);
927925:05/02/10 19:34:21
ありがとうございます。
もし宜しければも、う少し簡単には御説明しては、戴けないでしょうか?
無理を言って、すみません。
928デフォルトの名無しさん:05/02/10 20:04:05
>>927
プログラミング辞書でググって。
929デフォルトの名無しさん:05/02/10 20:05:16
説明する気のないor能力のない馬鹿は無理してレス付けないでいいですよ。
930デフォルトの名無しさん:05/02/10 20:06:24
ムカー!!!
931デフォルトの名無しさん:05/02/10 20:10:49
>>930
すぐに平静を失って無駄な発言を書く馬鹿ももレスつけないでいいですよ。
932デフォルトの名無しさん:05/02/10 20:23:31
ぷんぷん!!!
933デフォルトの名無しさん:05/02/10 20:40:44
ニョガニョガ
934デフォルトの名無しさん:05/02/10 20:45:54
そんな事より、次スレを用意していただきたい
935デフォルトの名無しさん:05/02/10 21:43:03
何か分かんなくなってきたorz

VisualC++.NET(非2002) &MFC
でバイナリデータ扱うPGやってるんだけど、

unsigned char a;

a=0x80;    ←これは出来る
b=0x81;    ←何故かbには0しか入らない

色々調べていると、どうやら漢字の1バイト目(0x81〜0x9f)だけは何を代入しても0になってしまうみたいで、
コンパイル警告も何も出ないしさっぱり分からん。

何か根本がおかしい気がするんだけど・・・何とかならんのこれ?
936デフォルトの名無しさん:05/02/10 21:43:59
>>935
C言語とは関係ありません
937デフォルトの名無しさん:05/02/10 21:44:18
あははーーーーーー
938デフォルトの名無しさん:05/02/10 21:47:28
>936
どういう事?
どうやったら代入出来るのかキボンヌ
939デフォルトの名無しさん:05/02/10 21:48:01
世の中にはbに0x81が入る環境もあるかもね
940デフォルトの名無しさん:05/02/10 21:48:29
bの型は?
941デフォルトの名無しさん:05/02/10 21:51:29
>940
同じunsigned char。

BYTEにしてもダメだった。
942デフォルトの名無しさん:05/02/10 22:23:44
> 少なくともmalloc/callocは普通の配列よりよっぽど多くメモリを確保できる

いいえ。同じぐらいです。
943デフォルトの名無しさん:05/02/10 22:29:26
やーい > VC厨
944デフォルトの名無しさん:05/02/10 22:31:03
> 例えばコンパイラとか。

ふつうlexつかうだろ ぼけ
945デフォルトの名無しさん:05/02/10 22:33:08
lexも下請けにCコンパイラ使うんだが…
知ってて言ってるんだろうとは思うんだけど。
946941:05/02/10 22:38:05
新事実発覚

ブレークポイントでウオッチしたら「中身は0」って表示されるが、
TRACEマクロで中身見たらちゃんと81〜9Fが入っとる
なんだコレは・・

一体どっちを信じれば・・・○| ̄|_
947デフォルトの名無しさん:05/02/10 22:39:03
最適化切れ
948デフォルトの名無しさん:05/02/10 22:43:08
>947
/Od で切ってます・・・orz
949デフォルトの名無しさん:05/02/10 23:01:08
>>946
0x81〜0x90はShift JISの2バイト文字の1文字目に当たるから。
ウォッチだと続く2バイト目が無いから0と表示されているんだったはず。
950デフォルトの名無しさん:05/02/10 23:03:46
ollyでデバッグしてみりゃわかると思う…
951デフォルトの名無しさん:05/02/10 23:35:58
>949
感謝!!!!
悩んで眠れなくなるところでした・・・○| ̄|_

>950
試してみます。dクス。

952デフォルトの名無しさん:05/02/11 00:47:04
0x81-0x9fをして「漢字の1バイトめ」と表現するセンスについていけない
953デフォルトの名無しさん:05/02/11 01:56:44
誰か次スレ立てて。
漏れホスト規制で立てらんない。
954デフォルトの名無しさん:05/02/11 11:41:46
立てたなら報告しる(;´Д`)
http://pc5.2ch.net/test/read.cgi/tech/1108056236/
955デフォルトの名無しさん:05/02/11 14:17:41
955
956デフォルトの名無しさん:05/02/11 14:18:42
956
957デフォルトの名無しさん:05/02/11 14:24:42
957
958デフォルトの名無しさん:05/02/11 14:39:16
958
959デフォルトの名無しさん
0x3BF 切が悪いな