2 :
デフォルトの名無しさん :2013/06/14(金) 21:34:37.72
SendMessage(1, 乙, 0, 0);
javaにあるunreadして内部バッファにデータ溜めるってのがあるけど readするときそのバッファにデータがあるかどうかどうやって示しているんでしょうか? 配列からデータが無くなるっていうのがよく分かりません。 どんな状態でもデータはありますよね?配列宣言したら初期状態があるんだし。
4 :
3 :2013/06/14(金) 22:19:36.90
これjavaについてなんですが Cで実装するときはどうすればいいのかなと......
5 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/06/14(金) 22:23:50.14
例えば実データのサイズを表す変数をゼロにすれば、論理的にデータは空っぽになると言えるだろう。
>>5 やっぱシンプルにフラグですか....
実装するとかなり面倒くさいですねこれでも
有効データ量と確保量を持った構造体にまとめれば良いんじゃないの? 例えば struct { int size_data; // 有効データサイズ int size_alloced; // 確保量 char *data; // データ } MY_DATA; みたいにして 初期化は MY_DATA d; d.size_data = 0; d.size_alloced = 1024; d.data = (char *)malloc(d.size_allocated); とし、使うときは char str[] = "test"; strcpy(d.data, str); d.size_data = sizeof(str); とかする。 面倒だけど。
C言語が面倒だと思ったら、C++に移れ
9 :
デフォルトの名無しさん :2013/06/14(金) 22:45:23.97
さどっほ
やっぱC機能無さ杉だなぁ.... javaは難しいけど機能多過ぎ...
「面倒 = 嫌」 だったらC++でやればいいが 「面倒 = 楽しい」 だからCに居座っているのだ
C考えた人は凡人で C++考えた人は天才肌なんだろうな
メーラーやブラウザを暗黙的Intentで起動したいのですが Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:〜")); startActivity(intent); こういったやり方だとメール送信画面やURL先のブラウザが立ち上がってしまいます 暗黙的Intentでメーラーやブラウザの一覧から選ぶ、またはデフォルト起動指定されたものを アプリアイコンから起動した時のように、初期画面で起動するにどうしたらいいでしょうか?
どこがC言語やねん マルチか?
>>12 より少ないツールで目的を達する方が天才だろ
ならハードウェアだけで全部実装しろ
別に天才じゃなくてもいいだろ
18 :
デフォルトの名無しさん :2013/06/15(土) 01:53:19.24
ウエハー、ドーピング、ボンディング、リフロー、レジスト、無線屋、物流、会計監査、法務を一手に手がけるアイちゃん
20 :
デフォルトの名無しさん :2013/06/15(土) 10:45:56.56
GCってプログラム実行の速度に影響与えたりはしないんですか? 密かに敢行されるものなんですか?
遅くなる
実行されるまでは遅くならないが 実行されている最中は遅くなる
スレチ
24 :
デフォルトの名無しさん :2013/06/15(土) 10:57:59.21
>>21 なるほど
>>22 CとrubyではどっちがGC機構が発達してますか?
学校でGCを観察するプログラムを作れという課題が出ました。
CにGCはない
26 :
デフォルトの名無しさん :2013/06/15(土) 11:00:23.62
>>25 alternativeとして何がありますか?
課題なら自分で調べろよ
28 :
デフォルトの名無しさん :2013/06/15(土) 11:04:40.07
2chは便利なんで^-^;
29 :
デフォルトの名無しさん :2013/06/15(土) 11:08:23.29
他人に聞くから課題なのでは? 自分でするなら独習でしょう。
どんな超理論だよw 自分でするから課題だ
QZ爆死
「2chで聞きなさい」という課題なのかもw
QZ焦る
やっぱりQZは馬鹿だな
前々から疑問だったんだけど、QZってなんて読むの? やっぱり、Q = く、Z = ず だから「くず」とでも読むのかな?
37 :
デフォルトの名無しさん :2013/06/15(土) 17:58:34.77
酉に読み方なんか元々ない
クズだからそれにふさわしいトリップになったんだなw
39 :
デフォルトの名無しさん :2013/06/15(土) 19:42:57.55
て
40 :
デフォルトの名無しさん :2013/06/15(土) 20:17:24.94
whileもforも繰り返し制御文なのに forはberak;できないのは何故?
41 :
デフォルトの名無しさん :2013/06/15(土) 20:18:22.78
continueと勘違いしてね?
>>40 berak; は出来ないよ
break; なら出来るけど
44 :
デフォルトの名無しさん :2013/06/15(土) 20:21:49.84
>>41 そうでした....すいません。
continue文が無いのとあるのでは便利さは格段に違いますかね?
continue使いたいんですけど使いどころが分からなくて。
話がみえない。 forでもwhileでもbreak, continue両方使えるけど。
46 :
デフォルトの名無しさん :2013/06/15(土) 20:27:41.03
>>45 forでcontinueを使ったときの意味はご存知か?
47 :
デフォルトの名無しさん :2013/06/15(土) 20:28:30.41
>>45 breakとcontinueの違いってなんですかね?
一緒じゃないですか?
処理をしないんですから。
釣りだな
50 :
デフォルトの名無しさん :2013/06/15(土) 20:35:08.93
すいません berakにしてましたw ただcontinueもあったことに築き不図 どう違うんだろうかと思っただけです。 そこらへん触れてなくてすいません。
>>50 何もしない
for (i=0; ; i++)
break;
無限ループ
for (i=0; ; i++)
continue;
この手のド初心者に for の変則形など見せても混乱するだけ
gotoほどじゃないけど、continueも嫌う奴いるんだよな そんでアホみたいにネスト深くしてくの
関数記述で return を1箇所にまとめるか、複数個所で分散してるか
ifの{ はifと同じ行に記述するか次の行に記述するか
周波数を自由に変えてスピーカーに出力する簡素なソフトを 作りたいんですがVC++かmfcで作るとどういう命令を使うか ヒントください。
リアルタイムに出力するなら DirectSoundを調べると良い 単にwavファイルを作れればいいのなら 普通のファイル操作関数とsinでおk
>>56 waveOut*関数かDirectSound
waveOut*は互換性のため残されてる古いAPIなので
NT系ならBeepという関数も使える
簡素なやつを作るだけんら古いAPIでよかろうもん
62 :
デフォルトの名無しさん :2013/06/16(日) 04:59:22.30
機械語にあるBCD演算命令を使うCの記述方法はありますか?
BCD演算命令は遅いよ 全く使われないから、手抜きされてる
まずどこの環境かを聞くべき インラインアセンブラでもできるんじゃないの?
BCD命令はx64ではobsoleteなので もう存在自体を忘れた方がいい
69 :
デフォルトの名無しさん :2013/06/16(日) 23:41:49.32
アク禁になったらtor使っても書き込めないのは何故ですか? 2chに書き込むプログラム作ったんですがアク禁なんで書き込めない。
tor の出口がたまたまアクセス禁止になっているだけかと
71 :
デフォルトの名無しさん :2013/06/17(月) 00:06:06.78
てことはtorを使えば書き込みし放題なんでしょうか? それに対する対処とかしてるんですか?2chって。
72 :
デフォルトの名無しさん :2013/06/17(月) 00:10:52.33
たまたま出口がアク禁かもしれませんが 何回チャレンジしても書き込めません。 そういう対策してるんですか?2chでは。 今は携帯からですが。
torは特定の板以外はだめじゃなかった?
74 :
デフォルトの名無しさん :2013/06/17(月) 00:39:58.97
>>73 なるほどー
荒らされないように考えてるんだな2chも。
do { なんたらかんたら } while(0); こんなんなんか意味あるんすか?
マクロで複文を扱うときに #define XXX() do { 複文 } while(0) こう書くと if (cond) XXX(); else ・・・; if (cond) {XXX();} else {・・・;} どっちの形で書かれても動く。
マクロにセミコロンを含めないのがミソ
>>77 >>78 thx
goto回避という事は、シーケンスな処理の場合のエラーとかですね?
do {
if(処理1()==FAIL) break;
if(処理2()==FAIL) break;
if(処理x()==FAIL) break;
} while(0);
てな感じかな?
処理に待ちが入る場合はcallback関数使うと思うので、あまり出番はないかもしれないですね。
マイコン組込みでは有用かも?
ローカルスコープ作るのに、ぎょっとさせない意図で do { ... } while(0) で囲んだこともあった。 が、今は素直に { } で囲んでるな
>>76 thx 御礼が抜けました。 PHPという事で誤爆かと思いました w
goto回避だけで無く、処理を通過した最後のComplete()処理が目玉という事ですね。
関数の中でmain関数内で宣言された配列を使うのは無理ですかね? #include<stdio.h> void abc(int x,char y); int main(void) { char str[100]; } void abc(int x,char y) { str[x]=y; } 配列の受け渡しは引数が面倒臭いので 省略したいです。
グローバル変数にすればいいじゃん
>>84 その方法がありましたか。
ありがとうございます。
まあな。天才だからな
>>83 どこが面倒だって?
static void abc(int x, char y, char * str)
{
str[x] = y;
}
代入できる関数ってありますか? abc()=3; int i; i=abc(); こんな感じです。 配列は両側で代入できるから関数では無理ですか?
Cだと無理 C++なら戻り値を参照にすればできる ポインタを返して *abc() = 3; int i; i = *abc(); とするのであればCでも可能
関数型マクロなら
関数ポインタ
なぜこうしない #define abc() (*f())
100 :
デフォルトの名無しさん :2013/06/19(水) 20:27:41.10
ランタイムで配列を宣言する方法ってありますか? 配列の名前を入力 str 型を入力 int 要素数 10 作成しました int str[10] 無理ですか?
>>98 それでいい、じゃなくてそうじゃないといけない
優先順位の問題があったとしても (*(f())) としないと
後置インクリメントが意図しない動作を起こすから
102 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/06/19(水) 20:46:06.00
>>100 構造体配列に名前や型のデータを保存、実データはmallocで確保
>>100 見て、BASICインタプリタ作りたくなってきたぜ…
C言語インタプリタ作っておねがい
>>105 本当にCが必要なのかを慎重に検討すべき
こういう危険性があるから 素人はマクロに手を出しちゃいけないよという実例
>>100 配列とほぼ同等なもの(ポインタ+メモリ確保)を作ることはできる。
厳密な意味で配列とイコールなものをランタイムには作れない。
インタプリタが作りたいのかな 構文解析がんばれ
>>100 array[n] = *(array + n)を利用すれば
配列っぽいものを動的に作れる
main関数の外で宣言したaという変数と main関数の中で宣言したaという変数がある場合 main関数の中で両方を別ものとして 読み書きするにはどうすればいいですか?
mainの中の変数が参照される。素直に名前を変えるか、名前空間を使いましょう
::a
>>116 Cだとできないので名前を変えよう
C++なら::aが外、aが中
>>116 int a;
int* pa = &a;
int main(){
int a;
*pa = 1:
a = 2;
...
名前変えたほうが混乱しないよ
123 :
デフォルトの名無しさん :2013/06/20(木) 14:36:08.66
混乱するのは低能だけ
トリッキーなコードを書くのが格好いいと思ってる馬鹿が居るような気がする
鳥なのかサルなのか馬なのか鹿なのかコモドオオトカゲなのかはっきりしろ
126 :
デフォルトの名無しさん :2013/06/20(木) 15:56:48.32
コドモドラゴンてのがいてだな
いやむしろRhinogradentia/鼻行類のほうが
鳥なのかサルなのかコウノトリなのかカッコウなのか馬なのか鹿なのかはっきりしろ
鳥+ウッキーでトリッキーですかなるほど
130 :
デフォルトの名無しさん :2013/06/20(木) 22:56:57.47
ふむふむ
馬鹿というのは、馬や鹿みたいな知能の奴という意味ではなく 馬と鹿の区別をつけられない奴のことだと最近知った俺だった
133 :
デフォルトの名無しさん :2013/06/21(金) 15:36:45.64
/の逆と\ってお互い一緒らしいですが違いあるんですか?
ない
バックスラッシュと円マークで 見た目が違う 呼び方が違う 文字コードによっては別々に割り当てられてるので全く別の文字
たとえ表記上¥しかでなくても、バックスラッシュのところを打つ
Visual Studio 2010を使用しています。 サンプル2ではエラーが出るのですが、サンプル1でエラーが出ないのはどうしてでしょうか。 よろしくお願いします。 ●サンプル1 #include <stdio.h> int a = 10; int a; int main(void) { return 0; } ●サンプル2 #include <stdio.h> int a = 10; int a = 20; int main(void) { return 0; }
140 :
138 :2013/06/22(土) 03:03:03.46
>>139 すみません。以下の様なエラーが出ます。
> 'a' : 再定義されています。2 回以上初期化されています。
> 'a' の宣言を確認してください。
サンプル1では再定義と言われないのは何故なのか気になりました。
よろしくお願いします。
142 :
デフォルトの名無しさん :2013/06/22(土) 04:19:29.71
138: サンプル2でエラーがでる
139: エラーの詳細は
140: これこれです
141: 後出しうざい、ゴミクズ
真面目な質問者と、ゴミクズだな
>>138 サンプル1は仮定義って言うんだよ
6.9.2. External object definition
2 A declaration of an identifier for an object that has file scope without an initializer, and
without a storage-class specifier or with the storage-class specifier static, constitutes a
tentative definition.
143 :
138 :2013/06/22(土) 04:26:32.12
>>142 仮定義という概念を初めて知りました。
ありがとうございました。
>>143 いいから二度と来るなよ。
社会のお荷物君。
何で普通の質問にそんな噛み付くわけ?
http://ameblo.jp/terzo-001/entry-11041919810.html >例えば、部下に「お前は、自分勝手で自己中心的だ」という非難を浴びせている
>上司を見ることがあると思います。
>よく知っている人から見ると、「自分勝手で自己中心的なのは、他でもない自分自身の
>ことではないか」ということになるのですが、【投影性同一視】はそういう自分のいやな部分を
>見ようとはせずに、そのいやな部分を他人に押しつけるのです。
>そして、いやな部分を押しつけた他人に向かって「お前は、自分勝手だ」と言って非難するのです。
>このように自分のことを棚に上げて、他人を非難することで、自分の中にある嫌悪すべき部分と
>直面することを避けているのです。
>つまり、自分自身と向き合う代わりに、他人という鏡と向き合って、他人を攻撃するのです。
>ですから、【投影性同一視】を行っている人が、「お前は、×××だ!」と言ったとき、「お前は」と
>いう部分を「私は」に置き換えてみれば、言っていることがそっくりそのまま患者自身にぴったりと
>当てはまることがあるのです。
>しかし、【投影性同一視】を行っている人は「私は、自分勝手だ!」とは言いません。
>その代わりに「お前は、自分勝手だ!」「お前は、自分のことしか考えていないじゃないか!」と
>言って、周囲の人たちを非難するのです。
俺を倒せる質問者はまだか
倒れてる奴は、倒せない。 これ、豆な (w
150 :
デフォルトの名無しさん :2013/06/22(土) 12:18:52.73
>>145 情報の後出しは普通じゃないよ
荒らしが荒れやすい下地を作る手段の一つ
>>150 ソース晒してるんだから、そのくらいすぐ分かるだろ
必要な情報を判断できるなら初心者じゃないよ
>>138 だけで回答出来ないゴミクズってなんのために生きてるの?
「制限」や「要求項目」の後出しは初心者とか関係なくもめる
だが
>>141 はただ荒らすために生きているので
これ以上さわってはいけません
>>151 まあ、それはそうだが、エラーメッセージぐらい貼れよといつも思う。
次スレ立てる人は
>>1 に入れといて欲しいな。
156 :
デフォルトの名無しさん :2013/06/22(土) 14:07:39.95
エラーの意味も分かってないんだろ。 エラーっていわば注意や警告だからな。 学校や会社で何度注意されても繰り返すゴミクズと同じタイプ。
エラーの意味がわからないド初心者は
>>140 みたいな疑問を持たない
フローチャートで論点と流れを整理する癖を付けろ
口から糞を垂れるのはその後にしろ
フローチャートって
>>138 はプログラミング以前に精神構造に問題があるんじゃないかな
テストで間違えたところをきく場合も、問題用紙だけ持ってきて「40点でした。何がいけなかったのですか?」ときくのと同じ
初心者以前に知恵遅れ
勿論一般社会では迷惑な存在
それよりも迷惑な人がいる
確かにいるな
これ系のヴァカはどうせ全く調べずに質問してるんだろ。 普通は原因究明のために目に入る情報から何とか手掛かりを探そうとするからな。 そうすると必然的にエラーメッセージを調べることになる。
というわけで俺様の好みに合う口当たりの良いまろやかな一口サイズの質問を持った質問者はまだか
MinGW gcc 4.6.2 の qsort を使ったときにソートにかかる時間が最悪になるデータの並びを作成する方法を教えて下さい いつも早いので本当にオーダーが O(n^2) になることがあるのか興味があります
166 :
デフォルトの名無しさん :2013/06/22(土) 16:10:31.35
>>138 とその周辺(回答してる屑、叩いてる池沼、擁護してる基地害)は迷惑だから出ていってくれ
もう二度と来なくていいよ
167 :
デフォルトの名無しさん :2013/06/22(土) 17:28:48.49
スルーすりゃいいんちゃう お前にも正義はない
入門スレで初心者相手にえばり散らす奴は出て行ってくれよ
169 :
デフォルトの名無しさん :2013/06/22(土) 19:26:29.87
自己顕示欲を満たすためだけに回答する奴も出ていってくれよ
Everyone, get out of here!
172 :
デフォルトの名無しさん :2013/06/22(土) 21:37:20.11
自己紹介はマ板でやれアホ
俺はサイコアピールしてるから 何か扱い間違えるとヤバイかもみたいな認識されてるらしく あまり酷い扱いはされないよ
>>165 5,4,3,2,1 を昇順にしてみればいいんじゃね
qsortの中身がそのままクイックソートだとは思えないけど まともな実装なら n が小さいと挿入ソート切り替えたり、 あるいはそもそも最悪実行時間を嫌ってマージソートを使ってたりするはず
>>175 みたいに推測でものを言うksって何なの?
キチガイ女の集まるメンヘラ板ならまだしもム板なのに
>>176 Knuth の聖書を読め推測ではなくて「当たり前」
「当たり前」では無いがglibcのqsortが基本はマージソートなのは良く知られている。 知らないのは素人
マージはメモリ効率悪いだろ
qsort以外のソートを自作してはならないという不幸な時代に生まれさえしなければ
不安定なソートは好きじゃない
>>179 そう思うんなら、glibcの開発mlに乗り込んで喧嘩売って来いよ。
183 :
デフォルトの名無しさん :2013/06/23(日) 11:53:07.46
>>182 マージソート知らないのか?マージソートはメモリー効率悪いよ。
>>183 「基本は」って書いただろ。ソース読んでから言いがかりつけろよ。
185 :
デフォルトの名無しさん :2013/06/23(日) 12:04:05.74
>>184 基本はとお前が書こうか書くまいが、マージソートはメモリー効率悪いよ。
知らなかったんだろ?素直に認めろよ。
>>185 お前本当に頭悪いな。マージソートがメモリーを沢山使うのは常識だが、glibcはそれでも「効率」はマージソートの方がいいと判断して基本(メモリー潤沢な場合)はマージソートを採用している。
それに対して周回遅れの言いがかりつけんじゃねー
効率: 機械から得られる有効な仕事が,それを得るために機械に加えたエネルギーに対して占める割合をいう。
2chは潤沢なリソースを誇るので このような非効率なプロレスに利用しても何ら問題ない
188 :
デフォルトの名無しさん :2013/06/23(日) 12:19:37.26
>>186 だからマージソートはメモリー効率悪いだろ。
>>188 効率とは使用するリソースに対する得られる効果。
使用するメモリーに対して期待する効果が大きいと判断したから、マージソートが採用されている。
何の知識もないので、1からCを始めるのにおすすめのサイトを教えてください。
191 :
デフォルトの名無しさん :2013/06/23(日) 12:37:12.55
そんなんだから女にモテないんだよおまえら
194 :
デフォルトの名無しさん :2013/06/23(日) 13:21:18.35
自分は富豪的プログラミングしてるのにメモリ効率とか言い出すアホいるよなw
いいんだよ そのほうがカッコイイんだよ ケータイやゲーム機の色にこだわるのと一緒だよ わかるだろ?
メモリー効率が悪いことが原因で、処理が出来なかった経験があるのかな?
198 :
デフォルトの名無しさん :2013/06/23(日) 13:38:27.53
富豪的プログラミングをしているつもりが、 富豪ではないからスパコンやフルカスタムが必要になると詰むんだよな
メモリかつかつな状況下で 標準の qsort を選択するものなの?
そういうマシンでソートするのが間違い
>>197 「マージソートのメモリー効率がわるいこと知ってる俺 SUGEEE、おめーらそんな事知らない
だろう」って事だろ。
で、「ハァ、(そんな事誰でも知ってるし) それがどうかしたのか」と言われて、逆切して粘着。
まあ、良くある話。
202 :
デフォルトの名無しさん :2013/06/23(日) 17:32:09.05
>>201 全然違うわw
「マージはメモリ効率悪いよね(ぼそ)」
「glibcはなんたらかんたら!!!」
「マージはメモリ効率悪いよ(はっきり)」
「glibcは頑張ってんだ!!!」
こういう話です。
マージソートは安全じゃないからね メモリを確保できない場合は回復不能なエラーになる クイックソートならそうはならない
205 :
デフォルトの名無しさん :2013/06/23(日) 17:53:43.59
>>203 C言語を使用している人間の発言とはとうてい思えない。
mallocがNULLを返したらクイックソート使ったらいいじゃん。
回復余裕じゃん。
Qsort killer は手に余るってことでおk?
>>202 全然ちがうわ
オレ: glibcは(メモリ十分なら)基本マージソート
周回遅れ: マージソートはメモリ効率悪いだろ
>>205 バカなやつだな
メモリ確保できたときの無駄を許せるなら
おまえはCをやめてVBAとかもっと手頃な言語やった方がいい
はっきりいって向いてないよ
210 :
デフォルトの名無しさん :2013/06/23(日) 18:07:57.66
>>209 なにをゆってるんだ。回復不能は誤りだろ、それについては認めろよ。
バカはお前だハゲ。はい勝利。
誰もシェルソートを愛してくれないのですか(泣)
>>210 誤りじゃないよ
メモリをいくら確保すればメモリが足りてるかテストできない
さらにテストしたメモリを解放してもすぐに同じだけ全て再利用できるとは限らない
213 :
デフォルトの名無しさん :2013/06/23(日) 18:34:51.85
214 :
デフォルトの名無しさん :2013/06/23(日) 18:36:55.67
>>211 シェルソートは難しいぞ。お前実装できんの?
とこのように あるごりずむを覚えたての自称上級者が延々とオナニーを始めるので ソートの話題をふるのは禁止です
別にソートを実装してくれというわけじゃないんだが 争ってる奴らはバカなんだろうな
ゲーム製作をしたくてプログラムを学ぼうと思うのですが、 MicrosoftVisualC++って2012使ったほういいんですかね? 2010までしか説明していないサイトが多いのでどうすればいいのか迷ってます
ゲーム作るならMinGWがオススメだよ
プログラムだけできても絵が描けないとゲームはできないよ。
それは素人の発想 ゲームは本来文字情報だけで十分なんだよ
2010と2012の二択だったらどうなります?
222 :
デフォルトの名無しさん :2013/06/23(日) 19:37:29.52
>>217 ハードやれ
とりあえずドラム叩きあたりからでいい
人を楽しませるには自然現象の全てを使い切れ
ここを忘れた連中こそゲーム業界のやませだ
何を作りたいかによるけど まずはツクールとかウディタとか そういうお手軽で不自由なツールをさわっておくのがよい
>>217 どんなゲーム作るの?
勉強してもFF13みたいなやつは個人では無理だと思うよ
225 :
デフォルトの名無しさん :2013/06/23(日) 19:44:11.70
>>220 じゃあ文字情報だけのゲームで食っていけるだけの利益出してみろや
ドラクエ以上の本数売ってみろや
何も知らない 素人 が知ったかすんな
プログラムだけできても絵が描けないと売れるゲームはできないよ。
227 :
デフォルトの名無しさん :2013/06/23(日) 19:57:10.34
作曲も大事だね
228 :
デフォルトの名無しさん :2013/06/23(日) 19:58:17.64
絵を描くにも、ドッターみたいな特殊技能がいるし
>>225 バカか?
商業ゲームの話は誰一人してないぞ
レスの流れを読むぐらいのことはしてから喋れよ
>>224 ツクール的な簡易グラでやりたいと思ってます
もしかしてRuby勉強したほうがいいんですかね
231 :
デフォルトの名無しさん :2013/06/23(日) 20:13:54.58
>>229 こいつ馬鹿か?
商業ゲーム作ってる企業は面白いゲーム作ろうと思って作ってんだよ
しかも全員プロだ
そのプロ共が30年近くかけてたどり着いた回答が今の美麗なグラフィックをバリバリ使った
音楽もオーケストラ並のゲームだ
チャラチャラプログラマ気取りで2chに書き込んでるお前のような奴の言うことより
30年近い実績の上に成り立ってる商業ゲームのほうがよっぽど説得力があるんだよ
>>231 消費者はそう思ってない
またグラフィックだけのクソゲーか
と飽き飽きしてる
それも当然だグラフィックしか売りがなければ
暫くすればすぐによりグラフィックが優れたゲームが作られる
無意味なんだよ今の業界がやってる仕事はね
誰の記憶にも残らないすぐに最新作に上書きされる為だけにゲームを量産している
あまりにも不毛だ
233 :
デフォルトの名無しさん :2013/06/23(日) 20:27:12.90
フルオーケストラ、最後に聴きに行ったのは今年の2月だったかな 1回きりでも諭吉使う価値あるんだよねえ ところでゲーム屋さん、何がどのようにオーケストラ並みなの? 作曲してる人たちやDAC作ってるハード屋さんの仕事は、諭吉に匹敵すると思うんだけど えーと・・・
>>230 ツクールレベルならRubyとかスクリプト言語で十分。
だけど将来もしかしたら3Dやるかも、とかだったらやっぱりC/C++のほうがいいね。
あなたにデニスリッチーの加護があらんことを。
235 :
デフォルトの名無しさん :2013/06/23(日) 20:37:09.56
>>232 いや、だからお前文字情報だけのゲーム作って売ってみろって
お前の言ってることが正しければみんな文字情報ゲー買うだろ
今どんな生活してるか知らんけど、普通のリーマンだとしたら生活水準かなり上がるぞ
お前の言ってることが正しければリスクもない
売れるゲームのはなしなんか誰もしてないぞ
>>226 の皮肉がわからない馬鹿一名を除いて
>>233 ピンキリだけどゲームでも腕のいい作曲家だと年収もオーケストラやってる上手い演奏家と同じくらいだよ。
239 :
デフォルトの名無しさん :2013/06/23(日) 21:55:13.13
そういえば最近のツクールには Rubyのスクリプトがついているんだったな どうせコピペを繰り返してもなにも身につかないから 基本機能で不自由さを噛み締めるのが良い
程度が低いぜこのスレは
ここは入門スレだから 程度の高い話期待するなら、そういうスレに移動
IDないから好き放題でまとまりがないんだよな それがム板の残念なとこ
ID有りのスレから逃げてくるのが多いから仕方がない。
どこですか、それ
文字は究極のドット絵
246 :
デフォルトの名無しさん :2013/06/24(月) 07:45:29.55
True Type Font
>>214 えへへ〜、奥村さんの本をみてかきます、めんどくさいから
えへへ〜、奥さんの○をみてかきます
アルゴリズムの入門書のクイックソートのCの実装をみていまいち理解できなかったけど 最近haskellのクイックソートのコードをみて、こういうことだったかと腑に落ちたわ。 どの言語ではじめるのがいいですかって質問してる初心者に、Cが基礎だって薦めるやつはウンコだな。
パラダイムシフトが必要なんだよね、haskell読むのって。
宗教的理由により生涯ただひとつの言語しか覚えてはいけないという制約があれば Cから始めるしかない
252 :
デフォルトの名無しさん :2013/06/24(月) 16:56:16.68
唯一の神しか信じてはならない
>>249 CMMCPで計算モデルを知ると、言語変わっても対応しやすくなる。
CMMCPって何? ググっても蚊のサイトしか出ない
>>254 すまん、CTMCPだ。
(Concepts, Techniques, and Models of Computer Programming)
質問です。 インクルードガードされたヘッダファイルって2回目は読み込まないんですよね? でもインクルードしたらどのソースファイルからも宣言した構造体とか使えます。 インクルードで文字列を置き換えてるだけなら、 ヘッダファイルの内容を一箇所でしか使えないと思うんですがどうなっているんでしょうか。
>>256 IDEとかを使ってて不思議に思うのかも知れないが
CやC++コンパイルってのは基本的に、各.cや.cppに対して行う
.cが2つあれば、コンパイルは2つ走るワケで
「ひとつのコンパイル単位の間で」一度ずつしか読まれないだけよ
#includeっていうのは指定したヘッダーファイルの内容をその場所にぶちまけてるってだけ
>>256 一つのコンパイル単位において一回だけ、というだけで
複数のコンパイル単位については、必要ならばそれぞれについて一回インクルードされますよ
>>257-259 いやー凄い勉強になりました
これが納得いかなくてずっと悩んでたもので
試しにヘッダファイルに int x = 10; と入れてみて二箇所から読んでみたらちゃんと再定義のエラーになりました。
一箇所から2回読んだ時は、インクルードガードされるので大丈夫なんですね
ありがとうございました
>>260 こっちからはなにかよくわかっていませんが、持ちネタの「仮定義」tentative defenision のよーな木が
extern は要らない子っ!!!!
undefしてマクロ再定義し、includeを2度する邪悪なソースを見たことがある
>>262 じゃあ番兵 #define の識別子をきみょーきてれつにするんだ!
>>263 いやそれヘッダ開いてコピペされるだけだから…#pragma onceとか使うしかないっしょ
常駐先の人件費抑制に利用されただけの人生だったな残念w
>>261 そりゃ業務で分割コンパイルも経験した事のないヤツにはexternは不要だろうな
>>266 キーワード extern を1回も使わなくても複数の翻訳単位で系を構成することはできます(棒)
extern は要らない子っ
>>267 関数のプロトタイプはexternなしでもいいし、変数もグローバル変数使わなければいいしな。
C言語のスレなんだが
Cだとextern不可避のことってあるんだっけ。
http://www.kouno.jp/home/c_faq/c1.html#11 1.11:
関数宣言についたexternは何を意味するのか。
A:
こういう書き方をすることで、関数の定義がたぶん別のソースファイ ルにあるということを、ほのめかすことができる。しかし以下の2つ に違いはない。
extern int f();
int f();
References:
ANSI Sec. 3.1.2.2, Sec. 3.5.1; ISO Sec. 6.1.2.2, Sec. 6.5.1; Rationale Sec. 3.1.2.2; H&S Secs. 4.3,4.3.1 pp. 75- 6.
>>272 手元にあったgitのソースにgrepかけてみたら、変数のexternはerrnoの一個しかなかったわ。
普通に組んでたらいらないんじゃないの。
274 :
273 :2013/06/26(水) 11:41:12.99
よくみたらけっこうあったわ > 変数のextern ごめん。
オブジェクト指向でないから、大域変数を完全に使わないとすれば、構造体に 変数を持たせてそのポインタを持って回る事になるが、このプログラミングスタイル は管理が大変な上にエラーの原因になりやすい externを使った方が遥かに楽な場面が多い
大域変数宣言する際に、externをつけなくてもいいという話なんじゃないの?
>>268 グローバル変数を使うときでも制約はありますが extern キーワードを使わなくともリンクできます(棒)
>>272 >>277 キーワードを先に示しているのに‥‥
趣味でも英語読むのに実務で英語読まないとかありえるのですか‥‥
持ちネタはもういいよ
こういう表記がわかりません #define H8_3069F_SCI_SMR_CKS_PER1 ( 0<<0 ) #define H8_3069F_SCI_SMR_CKS_PER4 ( 1<<0 ) #define H8_3069F_SCI_SMR_CKS_PER16 ( 2<<0 ) #define H8_3069F_SCI_SMR_CKS_PER32 ( 3<<0 )
>>276 どれか一つのファイルにはexternは必要だぞ
全部書いてなかったらリンクできない
狂人に構うなよ 時間の無駄だぞ
「externは必要」というのは間違い。省略した場合はexternが付いているのと同じだから。 「externは不要」というのは間違い。明示的に書くことで外部宣言されていることが分りやすくなるから。 「externは書いた方が親切」これが正解。
初歩的なミスだけどこういうのにはまる事もあるからなあ --- a.c extern int *a; --- b.c int a[100]; なぜ動かないか最初は理解出来なかった
>>285 ちょっと違うなあ
http://blog.bitmeister.jp/?p=614 >externのついた大域変数は必ずいずれかのモジュールに実体がないとダメで、
>externのつかない大域変数は基本的にexternありと同じだが、いずれのモジュールにも
>実体がなければリンカが実体を作る、という感じになるでしょうか。
リンカに任せるのかよ
バグの温床になりそうだな
ついでにコメ欄 >fs Says: >6月 11th, 2011 at 11:00 PM >このような言語仕様になった(externの省略が許されるよう緩和された)理由は、 >もともとUNIX他のオペレーティングシステムのリンカーがFortran言語を前提に >作られている現状を追認するためなのではないかと思います。Fortranは >上記の「初期値式を持つ定義」は許されない代わりに、extern宣言は不要ですから。 「extern不要!」と言ってるやつはロートルじゃねーの 俺はexternを省略するな、と教わった口だからな
C言語自体が化石言語……
化石言語が未だに大学で教えられている件について
292 :
285 :2013/06/26(水) 14:08:30.53
関数の話かと勘違いしちゃった…
293 :
285 :2013/06/26(水) 14:33:07.27
仮定義っていうのか。勉強になったわ。
仮定義
初期化子を指定しない定義を仮定義という。同じ変数の仮定義は、1つの翻訳単位に複数存在しても構わない。
定義と同様、実体は確保される。仮定義が一つの翻訳単位に複数存在した場合、コンパイラはそれらを1つにまとめ、
0の初期化子を持ったものとして定義する。ただし、全翻訳単位において既に定義が存在すれば、extern宣言された
ものとして振る舞う。この挙動は紛らわしい為、特に必要でない限り仮定義を用いるのは避けた方が無難である。
int n;
尚、同じ仮定義が複数の翻訳単位に存在する場合の、リンク時の動作は規格化されていない。
故に、この場合の動作は未定義である。gccではこの場合、コンパイラが解決している模様。
また、定義と仮定義が同時に存在する場合もコンパイラが解決している模様(言うまでもなく、
定義は2つ以上存在してはならない)。
http://d.hatena.ne.jp/XuHuang/20070624/1182669569
つまりQZは >この挙動は紛らわしい為、特に必要でない限り仮定義を用いるのは避けた方が無難である。 これを正当化してるわけか 糞だな
>>293 externなしでも勝手に変数をまとめちゃうような変態機能とかあんのか。
>>295 老害しか使わない馬鹿機能だから知らなくていい
297 :
デフォルトの名無しさん :2013/06/26(水) 15:26:03.63
プロなら知ってないとまずい。
プロ?ニートのどこがプロなの?
299 :
デフォルトの名無しさん :2013/06/26(水) 15:53:25.72
うるさいゴミ
とニートが発狂しております
無知を正当化してどうする 知ってることと実装で使っちゃうことはまったく別の話だろ
ここを読んで、ひとつ知恵がついて、客先で赤っ恥をかかないで済む それだけでも良いんじゃない?
>>302 もう無知ではない
だが使うのは奨励されない
externとか不要だろ 全部引数で渡せよ
>>305 それでももちろんいいが、OOP言語じゃないと見通しが著しく悪くなるし、
アクセス制御も出来ないっしょ?
C言語では必要悪
定数を指すマクロも極力引数渡しするのかな… コンパイル時ではなく起動時に確定した後、変わることはない値とか 準マクロ的に使いたくなる
普通に構造体でなんとかなる
組み込みやドライバなら許す
310 :
デフォルトの名無しさん :2013/06/26(水) 21:11:49.11
>>293 規格書にもポータブルでないと明記されている。
企画書の何処に書かれているか分からないゴミクズが炎上学習企んでるだけ WWWW
>>311 アクセス制御とか言い出したら
グローバル変数なんて完全に開けっぴろげだろw
それに構造体も隠蔽可能だぞ
ヘッダには宣言だけ書いて
全部関数を通じて操作させればいいだけ
生成は動的になるけど
FILEの中身知ってる奴いんのか Cで隠蔽とか普通に可能
>>283 初期化せずに宣言だけする形をとれば extern なんかつける必要はありません(棒)
>>289 MASM5->MASM6 では EXTERNDEF なるディレクティブが新設されたくらい当たり前に新しい考え方
>俺はexternを省略するな、と教わった口だからな
本質を理解しないと新しいことに対応できなくなりますよね
>>310 >規格書にもポータブルでないと明記されている。
でそれはどこ?具体的に引用できないようでは馬鹿が喚いているのとかわらないよね
おっあぼーんが連続してるんだが
>>293 >gccではこの場合、コンパイラが解決している模様。
コンパイラがリンクするわけがない。リンカがリンクするんだ。それを書いた奴は誰?URL をさらしてくれないか?
表からみえる gcc はコンパイラドライバであってコンパイラではない
>定義と仮定義が同時に存在する場合もコンパイラが解決している模様(言うまでもなく、定義は2つ以上存在してはならない)。
定義という言葉自体が曖昧。この問題を正確に記述するのであれば、「初期化を伴う定義」と「宣言」または「仮定義」の二つのみを使うべき
初期化を伴う定義はリンクするオブジェクトのすべてにおいて二箇所以上に存在してはならない、それだけの話だ
>>282 残念ながらCならばそんなことをする必要はないMASM6だって必要なかったくらいだからねその著者もあやしいものだね
オブジェクトファイルを作成する時に inline 関数などリンク時に同一にまとめられる識別子は 「複数定義を同一にまとめる」という属性を付けるけど それの話か?
>>310 リンカやオブジェクトファイルの仕様がCの言語仕様書に明記されるのか?かなり疑問だ
326 :
デフォルトの名無しさん :2013/06/26(水) 22:18:23.06
突然回答者のレベル下がったな
要するに環境依存って事だろ スレ違いだ
>>327 環境依存というわりには「適用できない環境」なるものを具体的に列挙できない件について
列挙して欲しいならそう聞けよ初心者さんよ 態度でかくね?
関数と同様にリンカが未定義エラーにするのが良い感じするんだけどね
日本のIT企業は人材派遣会社でしかない 昔からある日本の大企業の社員の雇用を守る為にIT技術者が人件費抑制のために使い捨てにされていってるだけw
332 :
デフォルトの名無しさん :2013/06/26(水) 23:49:57.82
>>324 お前が知らないだけ。WWWW
アマゾンギフト10万円で教えてやるよ。
>>315 もう他の人が書いてるからあんたはいいよ。
そう?今でもここまで盛況になるのならネタとして活きがいいと思うけど また来年くらいにやってみよー
バカな奴って物事の優先順位をちゃんとつけられないから、 くだらないところに拘って時間を無駄にするよな
>>335 >>336 こういう話の流れがわかない書き込みってなんなんだろう。
いろいろ考えて自分の頭の中ではなんかストーリーがあるんだろうけど、エスパーじゃないからわからない。
エスパーだけど分かんないよ
>>335 は上で盛り上がったexternのネタを来年にまたここで振って盛り上がるとうれしいって暇なレス乞食だろ。
>>336 はエスパーだけどわからん。
341 :
エスパー :2013/06/27(木) 13:45:55.47
ガッ
extern = public static = private
extern int array[10000]; こういう定義がふくまれるヘッダーファイル arrayを使っている(定義している)モジュールをリンクしなければarrayの領域は確保されないが、 int array[10000]; では、使う使わないに関わらず領域が確保されてしまう。 要約するとQzはうんこ
344 :
デフォルトの名無しさん :2013/06/27(木) 22:27:38.84
署名わすれたわ WWWW 要約するとQzはうんこ WWWW
これはでかいつりばりだ
はーいQzちゃん いつものお客さんがご指名よ
>>342 externって実体じゃないから、違うんじゃね
>>345 全然かからないのは、やはりでかいからか?
ポインタの指す領域が解放(free)されているかどうかを調べる方法ってありますか? 今回は具体的にはsqlite3_closeを実行するとsqlite3_freeが 呼ばれているのかどうかを知りたいだけなのでドキュメントを見れば解決しそうなのですが、 普遍的にこういういのをプログラム上から調べる方法があったら教えてください。
>>349 ない
必要なら自分でアロケータを書くしかない
ポインタにNULLを入れて何回でもfreeすればいいだけ
ポインタの指す領域が解放(free)されているかどうかを調べる方法ってありますか? 今回は具体的にはsqlite3_closeを実行するとsqlite3_freeが 呼ばれているのかどうかを知りたいだけなのでドキュメントを見れば解決しそうなのですが、 普遍的にこういういのをプログラム上から調べる方法があったら教えてください。
10万回くらい試行して、メモリリークするか見る。
#define FREE(p) { if(p!=NULL) free(p); p = NULL; } freeを全部上に置き換えてpがNULLだったらfree済みだし何回でもfreeすればいい
356 :
デフォルトの名無しさん :2013/06/29(土) 12:50:15.90
>>355 それはFREEされたかどうか、NULLが入ってるかどうかを調べるということであって、
freeされたかどうかを知る手段ではない。
質問の意図が分からないゴミはカキコするな。
必殺のxalloc()(笑)でも使うか?
358 :
デフォルトの名無しさん :2013/06/29(土) 13:22:22.73
freeした領域に、書き込めばいいんじゃね そのうち、例外が発生してくれる
実装依存 メモリプールだったらアウト
通常の free の話だけじゃなくて sqlite3_close 内で sqlite3_free が呼ばれるかまで含んだ話だから free をマクロで置き換えるとかじゃどうしようもない sqlite3_close の実装が変更できる状況であればソースがあるわけで、 sqlite3_free を呼んでるかはソース読めば分かるわけだし、 最悪分からなくてもログ仕込めばいい 実装を変更できない状況でどうするかとなると、 free や sqlite3_free などの後に実行するとエラーになる処理や free や sqlite3_free などによるメモリ上の何らかの変化の存在が分かれば、それで判別できる あとはリバースエンジニアリング、 あるいはライブラリファイル内の free や sqlite3_free などのコードを ログ出すだけの処理に改竄するとか
361 :
デフォルトの名無しさん :2013/06/29(土) 13:52:38.56
そういう話なら、sqlite3のソースコード見るか、 デバッグシンボルつけてビルドして、ステップ実行すればいいだけじゃん
>>353 評価版の最新 bcc32 をインストールすればオプション -v -vG でメモリーリークが調べられますよ
>>357 けっこー便利なんだけど
まあ自前でアロケータを書くのも経験として悪くないとおもいます
>>349
Boehm GCを使えばコンパイラ依存なしでメモリリーク検査出来るようだ
>>355 ロジックに関係なく機械的にポインタにNULL入れるテクニックを薦める人が多いけど
それ以前に、変数のスコープを小さくするとか、使いまわしはやらないとか、お作法的な
部分を守るようにしたほうがいいな。
アホ質問者にアホ回答者が群がってるな。 sqlite3には自前のメモリ管理ルーチンを使うように設定するAPIが有るから、 _close中で_freeが呼ばれている事は容易にわかるが、 そもそも_freeに渡して良いポインタはユーザプログラムには渡されないので調べるべきポインタなどない。
そんなのは当たり前 メモリ破壊が一番頭を悩ます言語なんだから 考えられる対策は全て施すべき
>>365 会社によっては関数の最初に変数を全部定義するのがマナーだよ
作法なんて文化が変われば通用しないから機会的に処理できる方法が優れてる
>>368 Cならそれが普通だと思うけど。
関数の途中で宣言しようと思ってもブロックの先頭でしかできないし。
370 :
デフォルトの名無しさん :2013/06/29(土) 17:58:48.80
・・・ということは、ターゲットが少なくともアレとアレではないってことか
>>368 まあ、30年くらい前のCOBOLのお作法でJavaのコードを書いてるような会社とか知ってるし、
そういう文化の会社で普通のJavaらしいコードを書いたら逆にヘタクソって言われるのも分かるけど、
まあ一般論でいいコードと悪いコードってあるでしょ。
>>369 関数の先頭以外での定義を禁止している老害が居るって事だろ。
都市伝説じゃなくて、実在するのか?
>>369 C99なら出来るぞ
gcc使えば自然とC99の書き方にならないか?
>>372 C89はブロックの先頭以外で宣言できないけど、都市伝説って言われるくらい世の中C99ばっかりなのかね。
VS2012ですらC89だからな
>>374 読解力が欠如してるな。底辺コーダーはそれでもつとまるのか?
禁止しているコーティング規約が存在するという都市伝説
377 :
デフォルトの名無しさん :2013/06/29(土) 18:23:44.40
>>375 マジかw 使ったことないから知らんかったわ。いまだにC89最強か。
378 :
デフォルトの名無しさん :2013/06/29(土) 18:24:45.82
しかも、必ず、0やNULLで初期化してたりな
379 :
デフォルトの名無しさん :2013/06/29(土) 18:25:50.48
VSのそれは、C++でC99を補完できるからってことらしいがな
まあC99はいらない子だったからな
型推論できないならどこで宣言したって一緒
>>376 読解力ないし無闇に煽るし、すごいザコっぽいな。
「ブロックの先頭以外では」っていうのはブロックの先頭なら関数の途中でも宣言できるって意味だよ。
こういう話はC89とC99とC++の仕様の区別がついてないくせに、ドヤ顔で煽ったりするやつが まじってくるから紛糾するんだと思うわ。
>>378 Cで変数は全部宣言と同時に0やNULLで初期化するってルールも見たことあるな。
で char[] なんかはmemset()で0埋め。
これも未初期化の変数を参照したら警告を出すコンパイラの機能をつぶすダメルールだな。
>未初期化の変数を参照したら警告を出す そんなのあてにしてる奴がおるんか
警告出るからウザイと言う話だろ。 あてにしてるかどうかとは別の話。
>>382 「関数の先頭以外での定義を禁止してる老害」を都市伝説と言ったわけだが。
「ブロックの先頭以外」とか誤読した池沼でも煽られると怒るのか?
その怒りは可哀想な頭に産んだお前の親に向けろ。
>>384 不定な状態の変数を減らすと言うのは一定の効果があると思うよ。
100回やったら 100回ともに変な答えが出るならテストで検出も容易だけど、
100回やったら 1回だけ変な答えが出るバグはテストをすり抜けることがある。
>>385 人間の注意力に頼るよりツールに警告を出させたほうが安全だわ。
0を入れることで正しい値にされなければならない変数が 0になっているというケースは考えられる。 この手の議論はケースバイケースだから立場によっては 見解が大幅に変わってくる。
if(条件式1) if(条件式2) if(条件式3) else と if(条件式1) else if(条件式2) else if(条件式3) else で挙動が違うことってありますか?
>>388 逆にバグってるのに、一見ふつうに動いているように見えてバグ発見を遅らせる効果もあると思うわ。
っていうか、防御的プログラミングと称して、バグっても動くような工夫をいい習慣と思ってる人多いね。
>>391 下は各処理が排他的に実行されるけど上はそうでない。
>>392 SEGVはバクだけどそれ以外なら仕様ですから。
>>387 見当違いの論点で煽りだして、それが勘違いだと指摘されても最初に高飛車に煽りだしたのは
自分だから議論を引っ込められなくて勘違いを押し通そうとしてるのかな。
だれでも勘違いはあるから、やっぱ無闇に人を煽るのはよくないないね。
趣味じゃねえから、仕事だから バグもなく完璧に仕上がりましたがベストだけど、 バグって納期に間に合いませんでしたより、 潜在バグはありますがとりあえず正常動作しますのがマシ
>>396 バカがまだわからんのか。
>>368 の
> 会社によっては関数の最初に変数を全部定義するのがマナーだよ
に対して
>>369 >Cならそれが普通だと思うけど。
とマヌケ過ぎる突っ込み入れたお前の読解力が残念過ぎる
>>393 >>394 ありがとうございます。
すいません、言葉足らずでした。
条件1,2,3はそれだけで排他的であるという状況のもとでのことです。
>>392 それをうまく利用して初心者に潜在的なバグを仕込ませてるのが皆さんご存知の片山
>>399 情報の後出しか、荒らしだな
さっさと消えろ
荒らしでないなら足りないのは言葉ではなくお前の頭
プログラミング以前の問題だからさっさと消えろ
402 :
デフォルトの名無しさん :2013/06/29(土) 20:09:41.19
>>391 先ず、自分で試してみて
その上で、こうなるはずと思ったことと、結果が違うかどうかを確かめて
そのくらいはしておいたほうが良いと思った。
ポインタやら構造体やらが理解できずC言語をギブアップしたものですが、 Rubyでオブジェクト指向やクラスとインスタンスの関係を理解したら 構造体型とやらの概念やメリットも理解できるようになりました 構造体型変数の宣言というのは、要はオブジェクト指向言語で クラスのインスタンスを生成してるようなものだったんですね
>>391 {} 付けてみ
if(条件式1)
if(条件式2)
if(条件式3)
else
↓
if(条件式1){
if(条件式2){
if(条件式3){
else{}
}}}
if(条件式1)
else if(条件式2)
else if(条件式3)
else
↓
if(条件式1){}
else if(条件式2){}
else if(条件式3){}
else{}
>>404 まあそうだね、ただスタックに生成するのとヒープに生成するのとは区別するのがC/C++
テスト
>>408 unsigned charでも%cやら%sをつかっておけばいいんじゃないの?
charがsignedかunsignedかは環境によって違うし。
戯れんなよ
>>408 そのクソページに書かれてないだけで、正式な規格書には書かれている。
初心者はまともな書籍で学ぶべき
お前ら仲良しだな
頭にクソとつけるだけで勝った気になれる安っぽい精神 うらやましいです。
421 :
デフォルトの名無しさん :2013/06/30(日) 06:45:28.80
>>416 だよな
何でもタダでやろうとする乞食根性丸出しの初心者は消えればいいのに
>>418-419 煽って回答を得ようとするクソ質問者
この板にはその手法を常用するクソコテが粘着してるので通用しない。
>>416 >>421 本当か?
手元のISO/IEC9899:1999 7.19.6.2.12 には書式指定子に %c のunsigned charの場合なるものは存在しないが?
頭沸いていないか?それとも自治スレで完敗したのでまた荒しに来たのか?
>>422 巣ではお前の回答を今か今かと待っているぞ?はやく巣に戻れ
>>423 自治スレ? そんなクソスレ知らねーな
おそらくお前が持ってるのは違法アップロードされた偽物なんだろ。
正規版にはunsigned charへの変換指定が書いてある
何だと?Qは違法な規格票を使用しているのか これはホットラインセンターに通報した方がいいって事?
427 :
デフォルトの名無しさん :2013/06/30(日) 09:22:16.90
Qzは偽規格書を根拠にextern不要とかほざいてたのか。WWWW 本物にはポータブルじゃないと明記されてるのに。 偽規格書 ワロタ WWWW
gcc では、enum変数に数値代入しても、コンパイル時に警告が出ないんですか? なんか出ないんですが。
typedef
430 :
408 :2013/06/30(日) 10:41:30.39
wcstoulで対応できました。 ありがとうございました。
431 :
428 :2013/06/30(日) 10:49:26.64
>>429 typedefしても警告が出ませんでした。
gcc-4.7.2
>gcc -Wall test.c
>else: 100
typedef enum {
FALSE = 0, TRUE = 1,
} BOOLEAN;
int main(void) {
BOOLEAN flag;
flag = 100;
if (flag == TRUE) {
printf("true: %d", flag);
else if (flag == FALSE) {
printf("false: %d", flag);
} else {
printf("else: %d", flag);
}
return 0;
}
432 :
デフォルトの名無しさん :2013/06/30(日) 10:54:30.23
もしかして、この話と勘違いしてね? int main(void) { enum { x }; x = 1; return 0; }
数値で代入したくなるような変数の型がenumってのがすでにおかしいんじゃね?
434 :
デフォルトの名無しさん :2013/06/30(日) 11:08:06.93
>>428 enumはchar, signed integer型又はunsigned integer型と互換って正規版の規格書には書いてある。
偽規格書になんて書いてあるかは知らない WWWW
>>432 定数への代入ではなくて、やっぱりenum変数への数値代入です。
>>433-434 え?互換なんですか?!と思って、sizeofしてみたら4バイトありました。ありがとうございました。
typedef enum TAG_BOOLEAN { FALSE = 0, TRUE = 1 } BOOLEAN;
int main(void) {
BOOLEAN flag = 10;
printf("flag:%d sizeof(%d)", flag, sizeof(flag));
return 0;
}
>flag:10 sizeof(4)
>>349 ,
>>353 です。
レス代行をお願いしているため、レスが遅くなってすみません。
普遍的な方法は無く、個々にソースを当たるしかないと言うのを理解しました。
ありがとうございます。
>>425 まっ正確にはTC2なんだけどね.
でも,
>正規版にはunsigned charへの変換指定が書いてある
真っ赤な嘘ですねえ,だって,JIS 検索
http://www.jisc.go.jp/app/pager?id=1267490 で JIS X3010 7.19.6.2 を検索しても unsigned char 用の書式指定子なんて見つかんないですからね
お前さんは scanf() 系のどの書式指定子を unsigned char 用だと思ったの?
>>427 ISO/IEC 9899:1999 6.2.2.5
If the declaration of an identifier for an object has file scope and no storage-class specifier,
its linkage is external.
変数でファイルスコープで extern が書いてなかったら,それは外部リンケージ扱いだよ,ってかいてあるしね.それと ISO/IEC 9899:1999 6.9.2.2 を合わせて考えると extern なんて要らない子なんじゃないかな‥‥
少なくともリンカ次第で C の言語仕様書に書かれる話じゃないし.あと,あくまで C の話ね,C++ じゃないよ.
>>426 そんなもんが pdf でほいほい転がってるの?
>>427 >本物にはポータブルじゃないと明記されてるのに。
該当箇所を引用してみてよ.それで当否を客観的に判断できるでしょ,JIS X3010 でもいいからさー,それとも引用できないほど自信が無いの?
引用する際にはちゃんと引用元を明記しないと,著作権法第48条の3 に違反し,同法122条によれば50万以下の罰金だそう,あと同法123条により親告罪じゃないから,場合によっては起訴されるかもしれないよ.
>>437 全部まとめてアマゾンギフト10万円で教えてやるよ。 WWWW
>>438 該当箇所を引用してみてよ.それで当否を客観的に判断できるでしょ,JIS X3010 でもいいからさー,それとも引用できないほど自信が無いの?
>>439 全部まとめてアマゾンギフト10万円で教えてやるよ。 WWWW
騙し取られるのが心配なら、詐欺った場合は刑事事件で告訴すりゃ良いだろ。WWWW
>>440 該当箇所を引用してみてよ.それで当否を客観的に判断できるでしょ,JIS X3010 でもいいからさー,それとも引用できないほど自信が無いの?
>>441 全部まとめてアマゾンギフト10万円で教えてやるよ。 WWWW
騙し取られるのが心配なら、詐欺った場合は刑事事件で告訴すりゃ良いだろ。WWWW
>>442 該当箇所を引用してみてよ.それで当否を客観的に判断できるでしょ,JIS X3010 でもいいからさー,それとも引用できないほど自信が無いの?
あと
>騙し取られるのが心配なら、詐欺った場合は刑事事件で告訴すりゃ良いだろ。
意味不明。大丈夫?豆腐の角にぶつけてみるといいよ
444 :
デフォルトの名無しさん :2013/07/01(月) 00:38:03.36
>>443 自信があるから教授料を要求してるわけだ。WWWW
教授料の支払いを約束するなら、先に
>>416 を教えてやってもいいぞ。 WWWW
おっと、その前に教えた事が理解出来るかテストだ
>>343 に反論してみろ WWWW
某スレを潰した荒らしに瓜二つだ
>>343 ごめんね: keyword:Qzでアボーンしていたので見てなかった
ふむ、ひとつの makefile で複数のバイナリ(サーバープログラムとクライアントプログラム、とか)を生成するとき、
特定のバイナリは、くだんのヘッダは読むけれどもそのヘッダにimplyされている全機能や array[] を使うとは限らない、ということはありうるわね
でも手元の gcc では、使わなければ int array[10000] であっても増えないね
ideone ではこうだった
http://ideone.com/Digq4t http://ideone.com/aYFG9w >int array[10000];
>では、使う使わないに関わらず領域が確保されてしまう。
処理系依存じゃないの?
処理系依存にうるさい人が処理系依存の事例を挙げるなんてダブルスタンダードもいいとこだね
>>445 回答しといたよ
これは授業料なしで引用していただける資格があると思うよ
定義のみで使われない変数や関数はコンパイル時に削除されるんでわ?
おっとシェアードライブラリの可能性を忘れてたね
>>448 手元の cygwin では、-static を付けても dll まではリンクしてくれないから、例示としては不徹底だけれども
http://codepad.org/DUJxHDoV >定義のみで使われない変数や関数はコンパイル時に削除される
そういう賢い処理系もあるようだね。シェアードライブラリのヘッダだったらその中の int array[] とかはどうなるの?
>>445 回答しといたよ
これは授業料なしで引用していただける資格があると思うよ
452 :
デフォルトの名無しさん :2013/07/01(月) 08:25:11.18
>>447 落第。先に教授料10万円はらいな。 WWWW
ideone.com/P9UkTE
ideone.com/TJH0fO
しかし、lsでプログラムのサイズ調べて、ドヤ顔するとは大笑い海水浴場だ。朝から腹痛てー WWWW
渾身の自爆ギャグに免じてこのレス自身は無料レクチャーにしてやるよ。 WWWW
>>448 アホは引っ込んで炉。仮定義オブジェクトの話してるんだから、コンパイラが削除するわけねーだろ。
リンカーなら出来なくはないが、参照され無くても存在する事に意味があるオブジェクトもあるので、
そういう機能が有ったとしてもオプショナルだ。
>>450-451 お前バカなんだから、朝から無駄なエネルギー消費すんな。 WWWW
>>452 >lsでプログラムのサイズ調べて、ドヤ顔するとは大笑い海水浴場だ
たしかに未初期化領域は BSS 領域に展開されるので実行ファイルのサイズをみてどうこうというというのはギャグだねえ
やっぱり
>>343 は認めなくちゃいけないね
>お前バカなんだから、朝から無駄なエネルギー消費すんな。
ほんとだねえ、今日一日は交通事故に注意しよう‥‥‥
454 :
デフォルトの名無しさん :2013/07/01(月) 08:40:05.18
>>452 うんそうだね、仮定義をコンパイラが削除するわけねーな
その続きがイミフだけど、仮定義って何だかご存知?
455 :
デフォルトの名無しさん :2013/07/01(月) 08:48:36.32
>>453 それじゃ、教授料10万円相当は先払い。
後払い権得られるチャンスだったのに残念だったな。 WWWW
>>454 仮定義オブジェクトをコンパイラが削除するとか言い出す初心者にはわからなくても無理はない。WWWW
レクチャーしてやろうか?有料で WWWW
456 :
454 :2013/07/01(月) 09:04:22.87
>>455 キョージュさん、俺の言ったことよく読んでね
>>454 >その続きがイミフだけど、
イミフなのはお前が低脳だから。レクチャーしてやろうか? 有料で WWW
> 仮定義って何だかご存知?
知ってるけど、それがなにか?WWWW
458 :
デフォルトの名無しさん :2013/07/01(月) 09:35:37.82
>>457 イミフが意味不明だったんなら、もっとはっきり言ってやる
仮定義はリンカも削除はしねえんだよ、出来なくないんじゃない
459 :
デフォルトの名無しさん :2013/07/01(月) 09:53:57.83
>>458 そういう機能を持つリンカー実在するけど、それが何か? WWWW
461 :
デフォルトの名無しさん :2013/07/01(月) 10:06:50.19
>>460 つまり、
>>452 は全てのリンカーがそういう機能を持つという主張と誤読したのか WWWW
恐るべき低読解力 WWWW
462 :
デフォルトの名無しさん :2013/07/01(月) 10:26:42.79
朝から低脳を2体、駆逐してしまった。WWWW
464 :
デフォルトの名無しさん :2013/07/01(月) 10:45:57.11
>>463 >>460 はお前じゃないという主張か。それなら
>>459 に戻る事になって
>仮定義はリンカも削除はしねえんだよ、出来なくないんじゃない
仮定義オブジェクトを削除する機能を持つリンカー実在するけど。WWWW
なんでこんな荒れてるんだ
>>464 そういう話になるとスレ違いだっつーの
頭悪いなあ
>>465 いやどうも前頭葉に欠陥があるアホが一匹紛れ込んでるようで
>>466 >仮定義はリンカも削除はしねえんだよ、出来なくないんじゃない
これがスレ違いでは無く、
>仮定義オブジェクトを削除する機能を持つリンカー実在するけど。WWWW
これがスレ違い? バカの思考回路はまったくわからない WWWW
やっぱ、バカは駆逐すべきだな WWWW
>>470 うん、スレ違い
それは環境依存の話
専用のスレがあるからそこに行って
472 :
デフォルトの名無しさん :2013/07/01(月) 12:03:11.87
>>471 そんなら「イミフ」じゃなくて「スレ違い」だろ。 WWWW
バカの後知恵はやっぱりバカ WWWW
名誉コテの襲名を認める 今後 198ぽ と名乗ってくれ
>>472 「イミフ」なんて言ってませんよ
人違いでは?
475 :
デフォルトの名無しさん :2013/07/01(月) 12:47:41.65
>>475 引っ込むか引っ込まないかは俺が決める事
お前に言われる筋合いはない
477 :
デフォルトの名無しさん :2013/07/01(月) 13:10:32.07
>>476 お前にたいして、引っ込んで炉とか死んでしまえとか駆逐してやるとか、罵る権利はオレの固有の権利
死んでしまえゴミクズ WWWW
477 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん ( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \
479 :
デフォルトの名無しさん :2013/07/01(月) 13:31:14.49
WWWWと書いとけばゴミクズよけになるって事か。WWWW こりゃいい
479 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん このようにIDなどなくても自分であぼ〜ん出来ます
www どれどれ
www であぼ〜んしたわけじゃねーんだよ キチガイの発言を手であぼ〜んしてるだけだからな
ある意味IDであぼーんするよりも屈辱的だよな
実際は読んでるのに脳内アボーンして、それをわざわざアピールしてるほうがどうかと思うけど。
読んでからあぼーんしてるから屈辱的なんだろうが やっぱり頭おかしいな
何らかのレスを返す→まだレスが返される価値がある書き込み あぼーんされる→もはやレスを返す価値もない
本人は煽ってるつもりだったのか。 反論できなくて悔し紛れに勝利宣言して逃げてるのと同じように見えるわ。
488 :
デフォルトの名無しさん :2013/07/01(月) 14:10:21.09
レスする価値さえ無いとか言いながら、読んだ事を律儀に報告する池沼 WWWW 死んでしまえゴミクズ WWWW
489 :
デフォルトの名無しさん :2013/07/01(月) 15:17:56.57
うるさいゴミ
踊る阿呆に見る阿呆
491 :
デフォルトの名無しさん :2013/07/01(月) 19:29:52.55
あぼーんした結果をコピペするヴァカって何がしたいの?
当然だろム板にいてもプログラムを書けないからこそhogeに妙にこだわったり 人の事を馬鹿呼ばわりする位しか出来ない
>>455 いい線いってたと思ったんだけど勘違いか?じゃ、
>>343 回答を訂正するね
>extern int array[10000];
>こういう定義がふくまれるヘッダーファイル
ってことは、少なくとも一つどこかに実体を定義しているんだね。なお、extern だから宣言だね
>arrayを使っている(定義している)モジュールをリンクしなければarrayの領域は確保されないが、
>int array[10000];
>では、使う使わないに関わらず領域が確保されてしまう。
そりゃそうだがそのarray[10000] 含みのヘッダをインクルードするんだから
array[10000] を実質的に定義しているモジュールもいずれはリンクするんでしょう?
extern の有無に関わらず、その二つかそれ以上のモジュールで共用する array[] が一つ確保されるんだから問題ないんじゃないの?
え?array[10000] を定義しているモジュールをリンクしないの?そのヘッダをインクルードする .c ファイルが一つだけ?それってなんの意味があるの?
二箇所以上のところから参照されるからこそ、共通部分ヘッダとして切り分けて分割コンパイルするわけでしょ?
一つの *.c ファイルしかインクルードしないヘッダに意味はないし、そこで領域を無駄に確保するとかいわれてもねえ‥‥その array[10000] は .c に書くのが常識よね
>>452 >参照され無くても存在する事に意味があるオブジェクトもある
参照されなくても、というのはちょっと言いすぎだとおもうけど、volatile を付けたくなるやつが雰囲気似ているよね、まだまじめに使ったことは一度もないけれども
>>465 荒れているようにみえて結構たのしいんですけど
497 :
デフォルトの名無しさん :2013/07/01(月) 20:41:04.77
>>492 バカをバカと罵って何が悪い。WWWW
今朝の自爆ギャグには感動したので、まとめてみた WWWW
www54.atwiki.jp/qzaw55cn4c/pages/16.html
498 :
デフォルトの名無しさん :2013/07/01(月) 20:49:52.84
>>493 windows.h
はい、論破 WWWW
>>495 > 参照されなくても、というのはちょっと言いすぎだとおもうけど、volatile を付けたくなるやつが雰囲気似ているよね、まだまじめに使ったことは一度もないけれども
全然違う。宿題コーダーには永遠に縁のないプログラミングテクニックだから知らんでもいい。WWWW
>>498 >windows.h はい、論破 WWWW
インポートライブラリ‥‥‥
500 :
デフォルトの名無しさん :2013/07/01(月) 21:21:24.87
これだけ自信たっぷりで、これは恥ずかしい
volatileってあれ使い物にならないだろ ちゃんとmutex使わないとやばい
502 :
デフォルトの名無しさん :2013/07/01(月) 21:24:04.71
>>499 まだ足掻くのか? まとめるぞ WWWW
単一のヘッダーに複数のオブジェクトモジュールの宣言をまとめて記述する事は当たり前に行われている。
しかし、lsで調べるという発想には唯々、笑うばかりだ、あー腹痛てー
503 :
デフォルトの名無しさん :2013/07/01(月) 21:31:34.86
>>497 動画にしてYouTubeにアップしてくれ
>>501 volatile だけじゃだめね、消えない呪文にすぎないから
>>500 全然、自信たっぷりじゃないと思うんだけれど‥‥
windows.h に仮定義が見当たらないのでちょっと困ってる
>>502 >一のヘッダーに複数のオブジェクトモジュールの宣言をまとめて記述する事
すりかえないでね。
今言及しているのは一つのオブジェクトモジュールでしか使用されない宣言をヘッダに追い出していること
*.lib や *.dll 用のヘッダでリンクないしはダイナミックリンクしたときに実体が増殖するものがあるの?
>lsで調べるという発想
たしかにどーかしてた、これは末代までの恥
505 :
デフォルトの名無しさん :2013/07/01(月) 22:13:58.89
同じ穴の狢ってことね 相手した俺がバカだった
>>504 すり替えてねーぞ
複数のオブジェクトモジュールの宣言を一つのヘッダーファイルにまとめる事は常識
>>343 は、その中の一つのオブジェクトモジュールがexternな変数を公開しているケースを指摘している。
windows.hはlsでファイルサイズ調べるような低脳だから、一つのヘッダーファイルにまとめるという常識がないと予想して例示したに過ぎない。 WWWW
>>506 いや、すりかえてるね。
windows.h に仮に仮定義があったとして、そうすると、windows.h がその宣言をとりまとめているオブジェクトモジュール(kernel32.dll, user32.dll, gdi32.dll) にその仮定義の実体があるんだよね
そのとき、windows.h の仮定義により、(ダイナミック)リンクした結果、その仮定義の実体が増殖するの?
>>343 は増殖すると主張しているように見えるんだけど。
>複数のオブジェクトモジュールの宣言を一つのヘッダーファイルにまとめる事は常識
で、そんなときに仮定義を使用してもその仮定義により共用される領域が一つつくられるだけで問題ないよね。
複数の *.c のヘッダを一つの *.h にまとめて書く状況において、リンクした結果仮定義を使用して「無駄な領域」が生成される事例があるのなら、例示してみてよ
Qは最近病気の進行具合がひどくないか?w マジで入院してくれ そのうちリアルで事件でも起こしそうな雰囲気
509 :
デフォルトの名無しさん :2013/07/02(火) 10:50:21.48
>>507 駆逐してやる!!
ほらよ、キチ外。まだ恥晒し続けるのか? WWWW
お前はヘボでこの板の最下層だって事を理解しろよ。 WWWW
w.c:
#include <windows.h>
int main(){ return 0;}
objidl.hをカレントディレクトリにコピーし、
objidl.hのEXTERN_C const IIDをなんでもいいけど、例えば
EXTERN_C const IID IID_IMarshal;を
const IID IID_IMarshal;に変更
cl -I. w.c /link /opt:noref /map
w.mapには
0003:00001ef0 IID_IMarshal 000000014000def0 <common>
と領域が確保されたことが出力されている
さっきの変更を戻し再コンパイルすれば
w.mapには当然のことながらIID_IMarshalのエントリは無い。
qzはvolatileをなんだと思ってるんだ?
512 :
デフォルトの名無しさん :2013/07/02(火) 13:28:55.30
何だここ? 価値のある情報が一つもない肥溜めみたいなスレだなw
糞には何でも肥溜めに見えるさ
ココのレベルは数ヶ月前に下がった
>>510 lsの笑撃に比べると、まとめるモチベーション上がらない。WWWW
>>515 QzはJavaも知らないぞ。二分木を実装出来なくて、欠陥言語認定してる。 WWWW
517 :
デフォルトの名無しさん :2013/07/02(火) 19:08:40.07
518 :
デフォルトの名無しさん :2013/07/02(火) 21:39:27.91
ffmpegでmp4からオーディオデータを抽出しようと思っているのですがmp3やaacなどいろいろな形式で出てきます これらのファイルをどう判別したらいいのでしょうか?
MediaInfoとか真空波動研とかどうやってるんだろうな
>>510 ページ追加 WWWW
www54.atwiki.jp/qzaw55cn4c/pages/17.html
>>518 mp4コンテナの仕様書を入手する。
それを参照してプログラムを作る。
超初歩ですが、 short int sia = 32768; の場合、 printf("sia=%d sia+1=%d\n", sia, sia+1); で出力した場合、オーバーフローを起こして sia=-32768 sia+1=-32767 となりますが、 short int sia = 32767; の場合、上記同様の出力をおこなった場合、 sia=32767 sia+1=32768 となります。なぜsia+1はオーバーフローを起こさないのでしょうか?
>>523 int に暗黙にキャストされてるんじゃね?
>>524 やはり暗黙に型変換されてるっぽいんですね・・・。ありがとうございます。
環境:vs2010ee
>>523 >>524 だな
前者も後者も sia + 1 を評価する前に sia が型プロモーションを受けてintに格上げされる
その場合short int = 16bit、int = 16bit or 32bit or 64bit だと、最上位ビットが符号ビットと
して扱われて int になるので負になる
(int)(a+1) か (int)a+1 かの違いな訳だ
>>527 (short)(sia+1)
で、オーバーフロー(-32768)になりました。こんな書き方あるんですね。勉強になりました。
ありがとう。
俺は規格票を読む前にコンパイラが吐いたコードを逆アセンブルで読んでしまう 悪い癖があるからなあ まあそのお陰で規格票の謎の文の意味が理解出来た事もあるけど
>>528 オーバーフロー時の挙動は規格Cとして未定義なので
厳密には正しいCプログラムとして成立していない
(unsignedな変数の場合は別)
>>520 出来ればC入門者の私にも解るように纏めて欲しい
>>518 なんのためにffprobeがあるとおもってんの?
535 :
デフォルトの名無しさん :2013/07/03(水) 07:44:37.23
>>531 >arrayを使っている(定義している)モジュールをリンクしなければarrayの領域は確保されないが、
こんな簡単なお題すら記憶しておけない低容量脳。WWWW
そんな脳だから何年やっても最下層のヘボからねけだせねーんだよ。WWWW
すりかえんなよ。WWWW
>>535 まあね
対称性ないしは直交性を追求しているだけなんでね
makefile を変えるだけで 静的リンクと動的リンクをすんなり変えることができればいいんだが、仮定義を絡めると実際の実装ではそうもいかないようだ
そもそも対称的とはいえない(例えば *.dll や *.so を作る人と使う人が同一とは限らない)場合も含めての、例えば extern 抜き主張が無理筋なのは、ある意味仕方のないこと
つきあってくれてありがとね
537 :
デフォルトの名無しさん :2013/07/03(水) 08:24:25.61
急所を削ぎ落されても動き回る奇行種なんて存在するのかと、うんこしながら考えた。wwww 一刀両断が鮮やかすぎて、うなじの急所を削ぎ落された事に気付いてないのか。wwww > そりゃそうだがそのarray[10000] 含みのヘッダをインクルードするんだから > array[10000] を実質的に定義しているモジュールもいずれはリンクするんでしょう? これは完全否定されている。wwww 実例: windows.h wwww 削ぎ落した肉片を見せてやらないと気付かない奇行種。 wwww 巨人並みの生命力だけは評価してやる wwww
538 :
デフォルトの名無しさん :2013/07/03(水) 08:36:08.35
> それにしても,ちっ,cl って,dll 内の変数をインポートするのに,いちいち __declspec(dllimport) つけなきゃならんのかよ,.わざわざ .def まで書かせといてこれかい, > link, おまえ, *.lib の中のシンボルくらいさがしてくれよー. dllの仕組みを理解してないのに無理してごまかそうとすると、こういう恥ずかしい発言することになる。wwww 自分の傷口に指突っ込んで広げる奇行種。wwww
539 :
デフォルトの名無しさん :2013/07/03(水) 09:01:16.76
>>536 > つきあってくれてありがとね
降参か? 最下層のヘボという事を自覚する事だ wwww
↓これも取り下げか? wwww
それとも有料レッスンしてやろうか? wwww
From: [437] ◆QZaw55cn4c <sage>
Date: 2013/06/30(日) 23:07:57.24
>正規版にはunsigned charへの変換指定が書いてある
真っ赤な嘘ですねえ,だって,JIS 検索
http://www.jisc.go.jp/app/pager?id=1267490 で JIS X3010 7.19.6.2 を検索しても unsigned char 用の書式指定子なんて見つかんないですからね
お前さんは scanf() 系のどの書式指定子を unsigned char 用だと思ったの?
>>537 ワロスwww
Wikiネタがまた増えたなwww
qzはリンクとインポートの区別が出来てないのか
>>539 qzはhh知らんのか
つかid=1267490って何処見てたんだ?
543 :
デフォルトの名無しさん :2013/07/03(水) 11:30:28.35
>>542 おま、それは有料の情報。wwww
検索って言ってるから画像のpdfなのにctrl-fで文字列検索したんじゃないかな。wwww
>>543 貧乏人ですまん。有料ページだったのかw
金出したのに見つけられないってことかwww
無料ページで検索かけてもすぐ見つかるのに何やってんだ奴はwww
有料の情報で検索できないpdfを出すカスがいると聞いて飛んできますた
546 :
デフォルトの名無しさん :2013/07/03(水) 12:02:24.98
>>544 Qzに有料でレクチャーしてやることにしていた情報。wwww
こんなクソみたいな情報でも持たない者にとってはとても重要。
知っていれば
>>437 のような醜態を晒さずに済む。wwww
>>546 まあアレは自称上級者で宿題スレに他人のコードを平気で張るキチガイだからw
>>548 それIE9で何度も試したんだけど途中でDLが止まるんだよなあ
閲覧システムに欠陥があるんじゃねーの?
>>549 多分システムの欠陥なんだろうね。
インストールされているアクロバットのバージョンも影響するようだ。
553 :
デフォルトの名無しさん :2013/07/03(水) 12:27:59.14
しょうがないから本日は無料開放デーという事で
>>538 の解説もするから
最下層のヘボを笑ってやってくれ。wwww
MSCではシンボルに対して__declspec(dllimport)と指定して、
dllからインポートされるシンボルであることを指定できる。
| __declspec(dllimport) int aaa(void);
| int x(){ return aaa();}
これをコンパイルすると
| call QWORD PTR __imp_aaa
と間接コールのコードが生成される。ところが関数に関しては
__declspec(dllimport)は省略可能で
| extern int aaa(void);
| int x(){ return aaa();}
でも良い。これをコンパイルすると
| call aaa
と直接コールのコードが生成される。ところがこれではdllを呼び出せない
のでどうするかというとリンカーが頑張る。aaaがインポートライブラリ中
に見つかった場合は
|aaa:
| jmp QWORD PTR __imp_aaa
というコード断片を生成して間接コールにする。
554 :
続き :2013/07/03(水) 12:29:17.22
関数に関してはこの方法で__declspec(dllimport)を省略できるが変数の
参照に関してはそうはいかない。
| __declspec(dllimport) int aaa;
| int x(){ return aaa;}
これをコンパイルすると
| mov rax, QWORD PTR __imp_aaa
| mov eax, DWORD PTR [rax]
と間接参照のコードが生成されるが、
| extern int aaa;
| int x(){ return aaa;}
で生成される
| mov eax, DWORD PTR aaa
ではリンカーがどんなに頑張っても間接参照にはできない。
これが関数では省略可能な__declspec(dllimport)が変数では必須である理由。
この本質を理解していれば、↓こんな恥を晒すことはない。 wwww
>>531 > それにしても,ちっ,cl って,dll 内の変数をインポートするのに,いちいち __declspec(dllimport) つけなきゃならんのかよ,.わざわざ .def まで書かせといてこれかい,
もうQのネタが2個も出来たのかw 今日だけでww
556 :
デフォルトの名無しさん :2013/07/03(水) 12:31:17.03
>>594 無料版は嫌がらせの為に転送速度を絞っている。放置しとけばそのうち表示される。
>>552 以前、Xにすると閲覧できなくなる不具合があった。
それ以前のバージョンだと閲覧できたんだよね。
Reader XI だと、できるようだけど。
組み込みのための言語を勉強したいのですが 何かお勧めの本はありますか? 入門ならこれ読んどけってのあればよろしくお願いします
>>553-554 なるほどねえコンパイルの時点ではシンボルがどこに所属しているのかわかんないから仕方ないんだね
コールなら飛び先でいかようにも出来る(コードサイズが増加してもいい)がバイナリのどまんなかでオペコード/オペランドが増えようものならよそをPC相対ジャンプやPC相対コールにできたとしても対応できないや
久々に炎上学習ができて大満足
うわ痛い・・・
わざとずらしてるんじゃないの?
まとめちゃってください!それもできるだけ痛く!
extern は要らない子!
コテわすれた‥‥
コテ付けたり外したり恥ずかしい奴だなあ それもうっかり付け忘れたのを壮大に自爆したり
自爆ボタンは必須のアイテムですよ、軍艦でもキングストン弁とかつけるじゃないですか
569 :
デフォルトの名無しさん :2013/07/03(水) 23:02:47.41
Qzってmasmとか知ってて経験年数だけは豊富そうだけど、未だに最下層なのは知恵遅れだから?
すごく初歩的な質問だとは思うのですが、 ” をofstreamで吐き出したい場合、どう書けばいいのでしょうか? どなたかご教授お願いします
>>570 普通に
<< "\""
じゃダメなの?
試してないけどね。
>>571 ありがとうございます!
まだコンパイルしてないけど、いけそうです!
574 :
デフォルトの名無しさん :2013/07/04(木) 01:33:05.25
こういった断片的な知識を炎上学習で積み重ねても、 お前は絶望的に頭が悪いから最下層からは抜け出せない。WWWW ある程度の経験があれば変数のインポートにdllimportが必須になってる事に疑問を持って、正解に辿り着ける。普通は。WWWW わざわざ礼をすることで、炎上学習だったと己を慰めるしかない自己愛性パーソナリティ障害者惨め WWWW
wwwww Qみじめwww
576 :
デフォルトの名無しさん :2013/07/04(木) 02:41:10.39
ラーメンタイマーの作り方を教えてくれ 2分40秒と4分40秒のやつ 俺がキッチンとパソコンの前を行き来する時間20秒を引いてある
>>576 100均でキッチンタイマー買ってきた方が
早いんじゃないの
579 :
デフォルトの名無しさん :2013/07/04(木) 03:17:00.22
>>577-578 それはだめだ
近くの100均でも一番早くて朝の9時半からだ
あと6時間以上待たなくてはならない
それなら今から1時間かけてでも作ったほうが早い
金もかからないし
それともう一つ
部屋の中に物を増やしたくないというのもある
電子データで済むなら電子データで済ませたい
582 :
デフォルトの名無しさん :2013/07/04(木) 04:52:06.40
>>580 今はそうしてるが、
ちょっと一瞬コーディングしようと思って始めると、
気付いたときには10分経ってたなんてことがよくある
>>581 もう少し確実性が欲しい
いいかみんな、
何か勘違いしてるようだが、
ここはム板でありC言語スレだ
そして俺はC言語でラーメンタイマーを作りたいんだ
だからここで質問している
$ sleep 2m 40s && aplay alerm.wav $ sleep 4m 40s && aplay alerm.wav
587 :
デフォルトの名無しさん :2013/07/04(木) 08:05:56.76
>>584-585 その間は必死でgoogleを酷使していたのだろう。 WWWW
最下層のヘボには無理に決まってるのに。 WWWW
結局、さすがのgoogleも無いものは検索できなくて、炎上学習法と後付けする事で
一矢報いたつもりになってるんだろうな。惨めすぎる。 WWWW
>>582 5分くらい指折り数えて我慢しろよ。声に出して数えるのもいいぞ。
自己正当化に必死なQz(苦笑) ほらあれだ、砂漠の砂に頭を突っ込んで「これでライオンに追いかけられる事もない」 と言っているラクダの話を思い出す(笑)
ここまでの流れでqzの知識は昭和で止まってることはわかった
592 :
デフォルトの名無しさん :2013/07/04(木) 11:55:52.39
標準関数だけでという話だと time(&time1); for (;;) { time(&time2); difftime(&time2, &time1) が 予定時間経過したら脱出 } 時間が経ったことを伝える こんなもん。 小奇麗な窓でとか音を鳴らすとかそういうのは別の話
594 :
デフォルトの名無しさん :2013/07/04(木) 12:11:25.08
ラーメンタイマーならぐぐって出てきたの使ったほうが早いな
ラーメンゲロタイマー
赤いキツネとかどんべえとかにも使うのだろうから ラーメンタイマーというのは適切ではないな インスタント麺類タイマーにしてはどうだろうか
597 :
デフォルトの名無しさん :2013/07/04(木) 14:20:07.69
>>591 知識が昭和で止まっていてもまともな知能があれば推論できるし、
規格書は昭和から変わらず英語や日本語で記述されいるので理解
するために平成の知識は不要。
脳に機能的な障害があるのだろう。WWWW
www
>>597 おいおい
qzに知能があると思っていたのか?
あれはコピペ厨だぞ?
qzよりregisterのほうがスレ的に重要
601 :
デフォルトの名無しさん :2013/07/04(木) 21:37:20.79
#include <stdio.h> #include <time.h> int main(){ time_t time1 , time2; time(&time1); for (;;) { time(&time2); if ( difftime(time2, time1) >= (60*2+40) ) break; } printf( "Let's go!\n" ); return 0; } こう? CPUのコアの一つが100%に張り付くんだが・・・・・ あと、小奇麗なインドウは要らない コマンドラインで十分 だけど何かしらの音は鳴らしたい
603 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/07/04(木) 21:56:19.63
今どきのOSでbusy waitはやめれ printf("\a");で音は出せる
つか、初めからSleep一つすればいい
>>603 標準関数郡の縛りで busy wait を排除する方法ある?
無理じゃないかな。 とりあえず依頼者はWindows限定としていいんじゃない?
実行するときに読み込んだ.datファイル内の" "が"\0"として認識されますか? もしそうならそれを回避する方法がありますか?
>>608 " "←スペースということ?
どういう読み方をするのか、ソースを示してみて
キーボードで入力されたspaceです
上についてですが char st[]="x"; if(st[i]!='\0') { count++; i++; } xは.datから読み込むようにしまして、内容は " tes des " の両端の""を除く10バイトです countをprintfするようにして実行すると5になるはなぜだと考えられますか?
すいませんtesの前にspaceが2個です
>>612 .datファイルは何の関数で読み込んでるの?
fgets()とか?
[SPC][SPC]tes[SPC]des[SPC] の10バイト中に \0 は出てこない が char str[] = "x"; とした後、変数 str に対して 10バイト書くのはバッファ突破してる (x[\0] の2バイト分の器しか用意されていないので)
鼻から悪魔か
617 :
デフォルトの名無しさん :2013/07/06(土) 00:57:44.80
// instant_noodle_timer.c
#include <stdio.h>
#include <windows.h>
int main(){
Sleep(60*2+40);
printf( "Let's go!\n" );
}
>>602 ,
>>604 こうですか?
わかりません><
調べたんだけど、音はMCIとかってのを使うみたいだな
そうすれば何かしらの音を出せるっぽい
難しいな
>>617 system("らーめんできた.wav");
でいける
関連付けができてればmp3でもoggでもmpgでもaviでもいける
3分間のwav作って最後にチン!ていう音入れるだけだろ プログラムいらんわ
>>617 Sleep の単位はミリ秒だから1000倍しないと
621 :
デフォルトの名無しさん :2013/07/06(土) 03:27:31.69
#include <stdio.h>
#include <windows.h>
int main(){
Sleep((60*2+40)*1000);
printf( "Let's go!\n" );
system( "happysynthesizer.mp3" );
}
>>618 あざっす
system初めて使った
>>619 >>620 あれはうっかりミスw
みんなありがとう
とりあえず何とか完成した
今後はこういう簡単なものから順次ステップアップしていく予定
次はMMORPG用の汎用鯖を開発する
622 :
デフォルトの名無しさん :2013/07/06(土) 03:44:31.89
>>621 > 次はMMORPG用の汎用鯖を開発する
#include <windows.h>
int main(){
system("mmorpgcommonserver.exe");
}
>>618 それだとWMPが起動するのにかかる時間も考慮しないとだめじゃね?
625 :
デフォルトの名無しさん :2013/07/06(土) 04:45:21.59
ポインタに関する質問です vipprogのプログラミング言語スレまとめ?みたいなので #include <stdio.h> void inc(int x){ x = x + 1; } main(){ int a = 5; inc(a); printf("%d\n", a); } で実行結果が 5 になる理由を読んだのですが、全然分かりません。 void inc(int* x){ *x = *x + 1; } というようにポインタを使えば6になる理由も分かりません。 無能ですみませんが教えていただけないでしょうか。
626 :
625 :2013/07/06(土) 04:48:28.58
すいませんreturn文による実体化の説明みたら分かりました 間接代入的なことするんですね
inc関数内の変数xは main関数から"コピー"して持ってきただけ(値渡し)だから main関数内の変数は影響されない 詳しくは値渡しと参照渡しで
628 :
625 :2013/07/06(土) 06:45:56.58
>>627 感覚的に理解しました。論理的に考えるとまだややこしいけど・・・
ありがとうございます。
629 :
デフォルトの名無しさん :2013/07/06(土) 11:32:51.85
fflush(stdout) しても文字列が消えないんですがおかしいですか? printff("hello"); fflush(stdout); hello残ったままです。
おかしくないです
>>629 > printff("hello");
確かに、残ってるのはおかしいな。
そもそも、普通にやるとリンクでエラーになると思うが。
fflushは書き込もうとする内容を押し出すだけ。 消す機能はない。
プログラム〜ストリーム〜コンソール この3者を正確に理解しなければ道は開けない
\rや\bで書き込んだ文字を削除するわけですが 何故fflushが必要なのか分りません。 fflushって何の役割なんですか? 言葉の意味的にはフラッシュつまり消すという意味なんですけど。
>>634 あんたバカなの?
言葉の意味的にはバカつまり素晴らしいという意味なんですけど
だって print("hello world ") fflush(stdout); sleep(pow(10,3)) print("\rheilo world") でそうなりますし。 fflushないとバグります。
>>634 > フラッシュつまり消すという意味なんですけど。
はあ?
辞書ちゃんとひいてこい。
消えるというか揮発って意味ですね
fflush()の意味も分からずに
>>636 のコードにどうやってたどりついたんだろう。
>>639 コピペですよ。
コピペは正しいんだからfflushの用途も正しいんでしょうね。
まぁ技術的難点はこういうものだって覚えておいたほうがいいでしょうかな。
コピペ元のURLを書いてみて
出力関数を呼ぶたびに実際にに出力してたらパフォーマンスが悪いんで 出力せずにバッファ(メモリ)に溜めておいて、一定量出力がたまったら まとめて出力するって動作をするから、printf()を呼んでもバッファに溜まる だけで実際には出力されないことがある。 バッファの内容を強制的に出力したいときにfflush()を使う。
コピペとはセミコロンの消える未知の技術である
printf()のあとにfflushが来る意味が分らないですね。 scanf()の後だと分かるけど。 それとバッファってコマンドラインの事ですか? それも曖昧で分りません。
>>644 scanf()の後で使っている奴がいたら、用法の誤り。
sleep(pow(10,3)) どこからコピーしたコードなんだろうか
>>644 setvbuf で _IONBF を指定しろ
>>629 printff("hello");
>>636 print("hello world ")
確かに、未知だわ (w
scanf()で使うのは分かるけどprintf()で使うのが分からないって、どういう理解をしてるのかを説明してほしいわ。
>>645 だから本来なら出力される値を
fflushによって書き込まないようにするんでしょ?
そういう理解です。
MS独自の入力バッファクリアなんてクソ食らえ
>>651 「クソ食らえ」、つまり意訳すると「どうぞ、糞をお召し上がりください」という事ですね
チョンにとってはご褒美
>>650 逆だ。
出力される予定だけどまだ出力されてない値を強制的に出力させる操作。
fflushで消している訳ではない。"\r"で上書きになるだけだ。
\rで消してるようなもんでしょう。
\rで上書きされて消えたように見えるのをfflush()の仕業と思ってたんだろ? 区別しないと。
でもあれですね。 \rってGUI的な機能ですよね。書いた文字を消すなんて.... 端末プログラミングでこんな事ができることに驚いた。
\r 行頭に戻る プリンタデバイスにリダイレクトし 文字多重書きで細工(下線つけたり 打ち消し線いれたり)という技巧も昔はやってたな
英語の辞書じゃなくてヘルプで調べろよw しかも英語としても意味が違うし トイレでジャーって流すのがフラッシュだよ まだ出力してないで溜めておいた内容を 全部出力するのが fflush だよ
\r 受けても何も変化しない端末だと上書きされないよ
curses とか調べとけ と書きたかったけど、よくよく見たらどう見ても Windows で やってるんだろうな。 cmd.exe もエスケープシーケンスぐらいサポートすればい いのに…
端末プログラミングでテトリスできるのは\rのおかげなんですよね。 でもscanfでキー入力待ちをしておいてプログラムがそのまま進行するのは 何故ですか?ブロックは落ちますよね?scanfを時間制限かけてスルーしたり できるんですか?
そっかー。 GUIから入った人には、\rの動きはイメージ沸かないかぁ。 といっても、私も辛うじてラインプリンタがあったくらいの時代だから、テレタイプとかはしらないけど。。。
666 :
デフォルトの名無しさん :2013/07/06(土) 13:52:57.80
逆だろ GUI こそ \r の使いどころ
scanf を socket でいう non-blocking にする仕組みが コンパイラの方言、若しくは特定のOSであるのでしょう 標準関数には無いよね?
書いた文字を消すなんて 計算結果を出力するだけの端末プログラミングに必要とされない からね。\rとか\bとかは異常。
669 :
デフォルトの名無しさん :2013/07/06(土) 15:52:19.93
とりあえずこれで組んでいく //mmo_server.c int main(){ InitSystem(); StartDataThread(); StartGameThread(); StartNetworkThread(); StartAdminThread(); while(1){ //スレッドの終了チェック //終了フラグが立ったら全スレッドを終了させて抜ける //どれか一つのスレッドが終了した場合も異常とみなして他のスレッドを終了させて抜ける } return 0; }
670 :
デフォルトの名無しさん :2013/07/06(土) 16:34:09.97
昨日の仕様書を読めば分かるが 仕様書を読むのに慣れてない人のために軽く説明しておく □データスレッド アカウントやキャラクターデータの入出力を行う 設定により、ファイル、データベース、データベース鯖など複数の選択肢を提供する 保存データの入出力を制御するスレッドであり、データそのものは保持しない □ゲームスレッド ここがメイン キャラクターの移動、攻撃、防御、ステータスの変化、などのあらゆるデータを処理する ファイルやデータベースなどにデータを保存する際にはデータスレッドへデータを投げる 処理結果の送信データは通信スレッドに投げる □通信スレッド 受信したデータはゲームスレッドに投げ、ゲームスレッドから投げられたデータは各ソケットに送り出す 投げるってのは専用のキューを用意しておきそこに積んでいくことを指す データスレッドとゲームスレッドの間にはデータ→ゲーム用と、ゲーム→データ用の2つのキュー、 ゲームスレッドと通信スレッドの間には、ゲーム→通信用と、通信→ゲーム用の2つのキューが、 アクティブなキャラクターの数分必要
671 :
デフォルトの名無しさん :2013/07/06(土) 16:36:24.10
□管理者スレッド 管理のための接続専用スレッドだ 起動した後はここから各種情報を見たり設定変更、鯖の終了等を行う
低速通信のキャラの時間経過はどのように扱うの?
通信が遅いクライアントは表示がガクガクした状態になるけど、全体には影響しないんじゃない?
677 :
デフォルトの名無しさん :2013/07/06(土) 19:45:28.87
次に通信の内容だが、 内容の種類を示す4byteと、内容を示す可変長byteをセットにしてやりとりする 例えばチャットの場合、先頭から 4byte・・・チャットであることを示す"10" 4byte・・・チャットの内容の文字数 文字数byte・・・チャットの内容 という形だ 攻撃(藏から鯖に送るデータ)なら、 4byte・・・攻撃であることを示す"450" 4byte・・・対象のID 4byte・・・攻撃の種類(必殺技の種類とか) これはあくまで一例だから、バフはどうするのかとか 攻撃も対象ではなく場所に対して発動させる場合はどうするのかとか その辺りはきちんと考えて決めていく必要がある しかも汎用鯖だからな
>>677 ここはオレに聞けスレなので、鬱陶しいから出て行ってくんない?
>>678 お前が消えれば済むさっさと出ていけゴミ。
>>678 お前みたいに非生産的なカキコしかできないksよりマシw
社会でも2chでも必要とされない>678 俺が>678の立場だったら吊るね 人として最低限のプライドがあるから
683 :
デフォルトの名無しさん :2013/07/06(土) 22:03:50.30
じゃ早く吊れよ
またゴミクズかw
>>678 みたいな池沼が質問来たときに
「何がしたいのかを書いてくれないと、解決法の教えようがない。
本当にそんな処理が必要なの?」
とか言い出すんだよ。
自己顕示欲を満たしたいだけの典型的な池沼。
知能に問題があるって本当にハンディキャップだな。
>>678 >鬱陶しい
個人的感想はブログに書いてろバーーーーーーカwwwwwwwwwwwwww
ゴミクズがゴミクズゲーム作ろうとかエネルギーの無駄だから。
建設的な書き込みのできない
>>678 が調子に乗ってるときいて、
ゴミクズが生成する情報はゴミクズ。 ゴミクズは建設的な書き込みなど出来ない。
良い感じに荒れて来ました。
IDがでれば
>>677 のようなゴミクズも楽にスルー出来るんだがなあ。
ゲームそのものを作る話じゃなかったような・・・・・
>>678 は荒らし目的だろうな。
救いようのないゴミクズ。
>>678 お前誰にも必要とされてないんだからこのスレ見なくていいんだよ?
嫌なら見るなバカガキ。
というより片山がスルーされて逆恨みしてんだろ でなければ噛みつき方が不自然
>>477 ここはゴミ捨て場じゃねーぞ。ゴミクズはゴミ箱に捨てろ。
>>690 IDが無くても手であぼーんしてますが何か?
お前内容を読まずにあぼーんするつもりか?
そう言や最近Q全く見ないなw 頭が悪い事を完全に暴露されてついに病気が脳に来たか?
698 :
デフォルトの名無しさん :2013/07/07(日) 07:09:02.80
脳に来るって、梅毒か? 狂犬病?
>>696 当たり前だ。お前のようなゴミクズが捻り出すのはゴミクズレスだけ。
読まずにゴミ箱で問題ない
701 :
デフォルトの名無しさん :2013/07/07(日) 10:33:43.56
fgets()で予めファイルを指定しておいて読み込むのは分かるのですが、実行時にファイルを指定して毎回違うデータを読み込みたいときはどうすればいいでしょうか。
703 :
デフォルトの名無しさん :2013/07/07(日) 10:49:48.70
>>702 fopenで開くファイル名を変数で指定しちゃったらいいよ。
その変数に入れるファイル名を実行時に指定。
704 :
デフォルトの名無しさん :2013/07/07(日) 13:09:25.78
質問です。 int bh[170][60][11200]=(int *)malloc(100); のところで「無効な初期化子」とエラーが出ました。 これはどういうことなのでしょうか。
bhはポインタじゃない
706 :
704 :2013/07/07(日) 13:22:08.45
回答ありがとうございます。 mallocはポインタしか使えないのですね。 メモリ確保後、配列で扱おうと int *bh; bh=(int *)malloc(100); int a=0,b=0,c=0; bh[a][b][c]=0; としたのですが、配列が定義されていないと出ました。 当然だろと思ったのですが、 以下のプログラムは動くので、よく分かりません。 教えていただけないでしょうか。 #include <stdio.h> #include <stdlib.h> int main() { int i; int *heap; heap = (int *)malloc(sizeof(int) * 10); if (heap == NULL) exit(0); for (i = 0;i < 10;i++) { heap[i] = i; } printf("%d\n",heap[5]); free(heap); return 0; }
708 :
704 :2013/07/07(日) 13:45:29.38
すいません、自己解決しました。 int ***bh; bh=malloc(sizeof(int*)*3); としたらコンパイルできました。 回答ありがとうございました。
コンパイルだけできても意味なくね?
キミが最初にやりたかったのはこのように記述する。 int (*bh)[170][60][11200]=malloc(sizeof(*bh)); アクセスするときは(*bh)[0][0][0]
711 :
704 :2013/07/07(日) 13:53:40.06
何度もすみません。 int ***bh,i,j,a; bh=malloc(sizeof(int*)*30); for(i=0 ; i<70; i++){ for(j=0 ; j<160 ; j++){ for(a=0;a<11200;a++){ printf("debug\n"); bh[j][i][a]=0; printf("debug\n"); } } } としたところ、 debug Segmentation fault (コアダンプ) となりました。 bh[0][0][0]=0; だけでセグフォになったみたいですが、なぜなのでしょうか・・・。
712 :
704 :2013/07/07(日) 13:58:56.12
709と710が書き込まれる間に711を書き込んでいました。 710の通りにしたらできました。 ありがとうございました。
713 :
デフォルトの名無しさん :2013/07/07(日) 20:11:47.73
>>678 みたいなのは普通にスルーするだけだからみんな構わなくていいよ
それより開発を続けていく
スレッドの作成は置いておいて、まずはキューの実装から行っていく
昨日書いた通りキューはいくつかあるが、まずはゲームスレッドと通信スレッドの間のキューを実装していこうと思う
キュー用のバッファはグローバルとして定義しておき、
ここに追加・取り出しをする
昨日の説明通り、4byteのヘッダに続いて様々なbyte数のデータが続くが、どのような実装がよいだろうか?
714 :
デフォルトの名無しさん :2013/07/07(日) 20:22:29.03
今のところ考えているのはこの方式である ゲームスレッド→通信スレッドの場合、 char queue[4*1024]; としてキュー用のバッファを確保しておくとする ゲームスレッドは書き込み位置を記憶するためのポインタchar *w;をもっており、 通信スレッドは読み出しの位置を記憶するためのポインタchar *r;を持っている そして書き込み/読み込みが終わったときに、次の書き込み/読み込み位置をw/rに保持する 当然起動した瞬間は、queue=w=rであり、キューに追加されてw>rとなった時点で読み出しが行われる 但し、このバッファは使い回すため、w<rとなる可能性もあり、読み出し条件はw!=rとしたほうがよいと思われる また読み出しが追い付かない場合、キューに溜まっているデータが確保したバッファサイズを越えた瞬間重大なエラーを引き起こす C言語でのキューの実装はこれでいい?
715 :
デフォルトの名無しさん :2013/07/07(日) 20:32:45.12
>>714 アプリを作るための丸ごとの相談をしたいなら
専用スレ立ててそこでやってくれよ
配列の要素数の求め方について質問があります。 main関数から sub関数に、配列array を引数で渡して、sub関数内で配列arrayの要素数を求める方法はありますか? 以下のコードでは、main関数内では要素数を求められますが、sub関数内では求めることができませんでした。 #include <stdio.h> #define N(array) (sizeof(array)/sizeof(array[0])) void sub(int *array) { printf("%d\n", N(array)); } int main(void) { int array[10] = {0}; printf("%d\n", N(array)); sub(array); return 0; } 実行結果: 10 1
>>717 方法1.
互換性は下がるが、配列の先頭アドレス付近にある、要素数データを使う。
方法2.
配列の最後に、門番データ(仕様上、有効データにはないもの)を置く。
例えば、正の整数だけという仕様なら、
int array[10];
array[9]=0;
>>719 >配列の先頭アドレス付近にある、要素数データ
配列にそんなものはないのでは? malloc() された領域の話、とかだったらわからないわけでもないのですけど
721 :
717 :2013/07/07(日) 23:22:12.67
エキスパートCプログラミングでも読んでポインタの基礎を学ぶといい。
723 :
717 :2013/07/07(日) 23:48:11.91
>>722 Amazonのレビューを読むと、配列とポインタの違いについての細かい説明があるようですね。
この機会に勉強してみようと思います。ありがとうございました。
その場合普通、番兵(sentinel) 門番(gate keeper)は使わない。
725 :
デフォルトの名無しさん :2013/07/08(月) 15:33:06.29
今までmallocした後freeなんて使ったことないんだけど アプリケーションでこんな事やったら大事故が起きたりするの? どの本にもfree必要ねーしwwとか書いてるけど。
専用スレがあるからそっちに行きなさい。
727 :
デフォルトの名無しさん :2013/07/08(月) 15:39:55.85
>>725 メモリリークするでござるよ。コンピュータのメモリがなくなって
コンピュータの動作が鈍重になり、いずれは処理不可能な状態におちいる。
すぐ実行を終了するようなものだと問題になることはないけどね。
728 :
デフォルトの名無しさん :2013/07/08(月) 15:43:01.97
>>726 mallocの専用スレはここでしょうwww
>>727 でもランタイムでfreeは必要ないよね?
return 0で強制的に開放されるんだし。
729 :
デフォルトの名無しさん :2013/07/08(月) 15:46:36.45
>>728 ずっと実行しっぱなしのものだったら解放していかんとやばいでしょ。
すぐに実行が終了するものだったら必要ない。
ところがその話題は宗教戦争になるから隔離スレがある。
windowsでコマンドプロンプト以外で実行端末ってありますか?
732 :
デフォルトの名無しさん :2013/07/08(月) 15:52:29.80
>>732 むしろ作れますか?
それも技術者が作ったんでしょう?
実行端末ってどうやって作るんでしょう。
734 :
デフォルトの名無しさん :2013/07/08(月) 16:17:25.89
あ
735 :
デフォルトの名無しさん :2013/07/08(月) 16:53:56.89
>>729 はぁ?
ゴミは黙ってろよ
メモリは確保したままになってるだけでそれだけ電気食うんだぞ
ただでさえ電気代が値上げだっつってんのに電気食うようなことを教えるな
電気食えばそれだけ発熱するから部屋も暑くなるし
お前電力会社の社員か何か
キモすぎ早く回線切れゴミ
737 :
729 :2013/07/08(月) 17:04:14.90
>>735 申し訳ありませんでした。わたしの軽率な発言は日本の電力消費を
上げ、みさなさまの会社の光熱費を上げ経営を圧迫し、連鎖的倒産に
導くばかりか、できるだけエアコンを使わず服装でカバーしようという
クールビズの活動のモチベーションまで下げかねないものであり、
地球温暖化という世界規模での異常事態を悪化させかねないものでした。
もしそうなれば南極の氷が融けて東京がビル50回の高さまで水没すると
聞いています。なんてことをしてしまったんだという思いでいっぱいです。
わたしは電力会社に勤めているわけではありませんが、電力の消費について
不適当な発言をしたことは間違いありません。
二度とこのようなことはいたしません。回線を切ってネットサーフィンの
時間をいままでの自分を省みる時間にあてたいと思います。本当に申し訳ありませんでした。
原発ガンガン動かせばいいんだよ。 そうすれば電気代も安くなってfree()も減らせる。 まさかfree不要論を唱えるプログラマーの中に反原発派なんかいないよな?
そもそもいまどきCで書くコードって大半は何かのプラグインとかモジュールとかじゃないの? なにか不具合起こっても勝手にexitするようなわけにいかないことが多いだろうし、 きっちり終了処理書く癖つけとくべきだと思うけど
740 :
729 :2013/07/08(月) 17:18:31.53
>>738 freeするのにCPUさんがガンガン電気使ったりして。
741 :
729 :2013/07/08(月) 17:19:06.35
742 :
デフォルトの名無しさん :2013/07/08(月) 17:30:05.30
いまどきCとかいうけど 高速なCが今時扱いされるのはなぜ?
743 :
デフォルトの名無しさん :2013/07/08(月) 17:31:40.25
Cすら使えない低能の負け惜しみに振り回されてる
>>742
744 :
729 :2013/07/08(月) 17:34:11.43
>>742 PythonとかHaskellとかJavaとかC並みに高速で安全性の高い言語
がありコンピュータの処理速度も上がり、言語による実行速度の
違いをさほど意識する必要がなくなってきたいまどきということでござろうよ。
745 :
デフォルトの名無しさん :2013/07/08(月) 18:09:09.79
>>744 ベンチ結果も書かずに何言ってるの?
お前が勝手に意識しないだけだろ、キメェ
746 :
729 :2013/07/08(月) 18:13:45.68
747 :
729 :2013/07/08(月) 18:20:31.25
別に俺はー、
>>745 に理解してもらおうとは思ってねーしー、
俺はそう理解したと述べてるだけだしー、ベンチ結果が知りたければ
自分で勝手にベンチすればいんじゃねつー感じだしー、
一生メーメーほざいてろよって感じ。
ここまで俺の自演
749 :
デフォルトの名無しさん :2013/07/08(月) 18:53:48.80
Haskellって最近名前だけよく聞きますね。 メリットあるの?
750 :
デフォルトの名無しさん :2013/07/08(月) 18:59:23.86
などと意味不明なことを供述しており、警察は慎重に調べを進めるとしています
>>746 羊の寄せ乳知らない童貞野郎は引っ込んで露
>>744 それがそうでもないんだ‥‥
うちの会社のとある24時間システム、java で組んであるけど、タスクマネージャをみるたびにページファイル使用量が増えていく‥‥
そして、ある日突然リブートするんだ‥‥
GC なんて信じらんない
756 :
729 :2013/07/08(月) 20:05:22.36
>>754 タスクマネージャを見なきゃいんじゃないでしょうかというバカなことをいうのは
やめておこうと思いますが、実装がまずいじゃないの?
757 :
デフォルトの名無しさん :2013/07/08(月) 20:05:36.29
連投荒らしか
>>754 >うちの会社のとある24時間システム
Qはロートルニートなんじゃね?
759 :
デフォルトの名無しさん :2013/07/08(月) 20:58:33.70
保証値がない、または形骸化しているものは、 ただ使うだけで自分もろとも信用失墜する絶叫カーでしかないってことさ
>>754 まあ、JAVA VM の実装がちゃんとしててメモリーリークがないとしても、そのシステムの実装がタコでメモリー確保しまくってたら、そりゃ落ちるわな。
JAVAのプログラムでやたらメモリを喰うものを見かけるが、明示的に解放する 必要がないからといってそういうところ無頓着なマが書いてんだろうな。
javaに対して、メモリリークがないとか、アプリエラーがないとか思ってるなら まずはその幻想をぶち壊す
まあ話が果てしなく脱線しているのを無理やり元に戻してまとめ: Cは時代遅れ
765 :
デフォルトの名無しさん :2013/07/09(火) 05:20:55.10
「幻想をぶち殺す」 というのは幻想を擬人化した表現であり 文学板ならまだしもム板ではただの基地害
最近は「ぶち殺す」っていうのか?小泉さんが言ってたのはたしか「ぶち壊す」だったか「ぶっ潰す」だったか
<string.h>の strncat ↑ strnはstringだと思う catって何からきてるんですか?
catinate
strはstringだけどnは違うだろw
Free!
strcatを知らない世代か…
straycats、迷い猫オーバーラン!ですね? わかります。
voidcat, ヘミ猫オーバーランですね!わかります
774 :
デフォルトの名無しさん :2013/07/09(火) 09:35:01.80
linuxのlib/string.cにあった関数ですが、 int memcmp(const void *cs, const void *ct, size_t count) { const unsigned char *su1, *su2; int res = 0; for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) if ((res = *su1 - *su2) != 0) break; return res; } (res = *su1 - *su2) != 0 この部分は *su1 != *su2 ではいけないんでしょうか?
775 :
デフォルトの名無しさん :2013/07/09(火) 09:43:55.21
>>774 いいでしょ。これで。
for (...)
{
if (*su1 != *su2)
{
break;
}
}
return *su1 - *su2;
>>774 memcmp()のリターン値は、
cs > ct → 正
cs < ct → 負
cs = ct → 0
だから。
>>774 (res = *su1 - *su2) != 0 だと算術演算をしてその結果のフラグレジスタをそのまま
参照できるから速くなるのかな?
>>775 だと引き算の結果を有効に活用しないで、別に比較命令を実行しなくてはいけない。
最適化がかかれば関係ないかもしれんけど。
resを求めたいのでついでにifにも使ってるんだろ
char[] と char の文字列連結ってどうすればいいのん? strcatだと連結ソースの型が違うよーって怒られるデス!
どうしてもC言語つかわなきゃいけない人は自力でなんとかしろ。仕事のためだったら続けられない。 C言語でなくてもいいんだったらC++のstringで、a+bで連結できる。
>>779 char str[100] = "abc";
char ch = 'x';
len = strlen(str);
str[len] = ch;
str[len + 1] = 0;
782 :
デフォルトの名無しさん :2013/07/09(火) 10:39:21.37
>>780 わからないと格好つけて言ったらそうなるのか。
>>777 0との比較なので
引き算 + 条件ジャンプ
比較演算 + 条件ジャンプ
CPUへの負荷は同じということなのですね
勉強になりました
>>779 strlcat(dst, sizeof(dst), &c, 1);
>>775 それcount==0のときaccess violation
787 :
デフォルトの名無しさん :2013/07/09(火) 14:51:13.14
788 :
デフォルトの名無しさん :2013/07/09(火) 14:53:32.20
議論してるときに枝葉でガタガタ言ってくるやついると冷める。
そもそもコンパイルできねえしな。
細かいところに気付く目ざとい俺カッコいいとでも思ってんだろ。ただのアスペだよ。
どちらかというと枝葉で議論してるんだけどね
全然枝葉じゃないし。 よっぽど悔しかったか?
>>792 *su1 != *su2
ではいけないのかって話ですが?
access violation起こすなら致命的ではないのか
796 :
デフォルトの名無しさん :2013/07/09(火) 16:33:54.02
一つの配列で最大何個要素作れますか? 疑問です。
ページプリンタのファームで使用していたコンパイラで、 要素数に255個という制限があった。悲しかった。
>>790 いやエッジケースくらい常に考えろよww
定数倍の速度より遥かに重要
799 :
デフォルトの名無しさん :2013/07/09(火) 16:54:07.78
>>797 いやint x[N];
Nの最大値はどのくらいですか?
>>795 でしょ。あんたが言ってるのはそれ、だから俺とあんたは違う話をしてるよね。
>>798 揚げ足取りして何が楽しいのかね。
まともな教育受けてないんじゃないかね。
一致不一致だけ知りたいのか、大小同じの比較をしたいのかという話だろ? straycatsは迷い猫オーバーラン!を起こすけど、 それの対策用のstrayncats関数は無いからな。
805 :
デフォルトの名無しさん :2013/07/09(火) 17:50:09.44
最近C言語でオブジェクト指向プログラミングの練習を始めた者です ある構造体Boxに中の変数Countがあるのですが、その値を見る関数GetCountを関数ポインタを使ってメンバ関数的に割り当てようとしています //include省略 typedef struct Box{ int count; int (*GetCount)(struct Box *); } Box_t; int Box_GetCount(Box_t* p_box){ return p_box->count; } Box_t* Box_New(int num){ Box_t* p_box = (Box_t *)malloc( sizeof(Box_t) ); p_box->count = num; p_box->GetCount = &Box_GetCount; return p_box; } int main() { Box_t* box1 = Box_New(5); printf("%d", box1->GetCount(box1)); free(box1); return 0; } このやり方ですと、構造体Boxのメンバ関数GetCount(外部関数Box_GetCountのポインタ)でメンバ変数countを読む時に box1->GetCount(box1) と自身のポインタを渡すようになっているのですが、これをbox1->GetCount()のように引数なしでできるでしょうか? 構造体内の宣言を変えればいいのか、関数Box_Newの中身を変えればいいのか悩んでおります。ご教授頂けると幸いです
>>806 できない
個人的にはbox1->GetCount(box1)にするくらいなら、Box_GetCount(box1)とかにすればと思う
>>806 これだと多態はできても、抽象型プログラミングみたいのができないからあんまりうれしくないね。
Cでやるなら
>>808 みたいにしてカプセル化くらいでいいと思うわ。
void func(char *ary[]); このような引数を持つ関数を呼び出す時の作法がわかりません 以下の二つの方法は試しましたがどちらもNGでした char ary[5][10] = {0}; // ここでary に入れる処理 (strcpy(ary[0], "abc");等) func(ary); // 型エラー char *ary[10] = {0}; // ここでary に入れる処理(strcpy(ary[0], "abc");等) func(ary); // 通るけどaryの中身がおかしい どなたかよろしくお願いします。
詳しくないか忘れたけど。 c言語 関数 引数 配列 型 サイズ で検索したらいいんでは。
812 :
810 :2013/07/09(火) 18:45:45.56
それらしいワードで検索しても探す事は出来ませんでした どなたかよろしくお願いします
>>810 こういうこと?
char array[10] = "abcde";
func(&array);
814 :
811 :2013/07/09(火) 18:48:09.52
引数がchar*型の配列ってことで、渡す前にメモリ確保していなければ エラーになるんだろう。
815 :
810 :2013/07/09(火) 18:50:58.05
>>813 いえ、これだと型が違うのでエラーになってしまいます
>>814 そうですね
なので char ary[5][10] = {0}; のように変数を用意してメモリ確保
その後にメモリへ目的の値ををコピー
そしてfunc読み出しとしたのですが型が違うと怒られてしまうのです
このようなケースでは具体的にどの様にすればいいのでしょうか?
816 :
811 :2013/07/09(火) 18:53:30.29
char ary[5][10] = {0}; これではダメだろう。関数側で書き込む領域まで大きめにメモリ確保しないと。 自分もだが、こういう基礎レベルで迷う場合はC++を使った方がいい。 vector<string>型なら簡単。
817 :
デフォルトの名無しさん :2013/07/09(火) 18:57:34.52
プログラム内にデータファイル保存する事できますか? exeファイルだけで全てすませたいです。
818 :
810 :2013/07/09(火) 18:58:06.56
>>816 申し訳ありませんが C でお願いします
そういえば getopt 等の関数がこのパターンに該当するのでGoogle等で検索してみた、、のですが
どれもmain関数からの呼び出しからのみで参考にならず…
819 :
811 :2013/07/09(火) 18:59:10.13
型エラーになるのは多分、関数の引数が配列として2次元以上になる場合、 コンパイラ側がchar[N]型みたいのを生成していて、ちょうどサイズを一致させないと受け付けなくなってる気がした。
820 :
810 :2013/07/09(火) 19:15:00.92
検索して見つけた… malloc等を使う上に環境依存だとは… 今の環境だと確実にメモリ断片化が起きるので動的にメモリ確保は使えない… malloc が使えない環境だと getopt 等の関数は使えないのかなぁ
821 :
806 :2013/07/09(火) 19:18:02.73
>>807-809 無理っぽいですか……やはり下手な内はOOPなら無理せずOOPL使えってことですね
返信ありがとうございました
アホ同志でワイワイやってるのが楽しいんだろうから判ってるヤツは茶々入れちゃダメだよ
>>820 組み込み?
ならその手の物は使えないよ
825 :
810 :2013/07/09(火) 19:30:58.01
>>823 メモリにかなり制限がある環境でそれに近いと思います
>>824 なるほどー
staticで確保してそこを挿すようにすればよかったのですね
おかげさまで解決しました
ありがとう
826 :
811 :2013/07/09(火) 19:41:59.45
なんか勘違いしてた。配列は変数宣言したと同時に指定サイズ分だけメモリ確保されるんだったな。 それは別にしてあれこれ動かしてみた結果、サイズを別に渡すのがうまくいくと思った。 #include <stdio.h> void func(char *ary, int size) { printf("%s\n", &ary[0]); printf("%s\n", &ary[size]); strcpy(&ary[size],"22222"); } int main() { char ary[2][10] = {"000000000","111111111"}; func(ary, sizeof(ary[0])); printf("%s\n", ary[1]); return 0; }
「こんな基礎もわかんねぇの(プッ」っと思ったけど
>>824 みて基礎レベルじゃねぇとやっと気付いた俺ガイル
828 :
811 :2013/07/09(火) 19:48:48.16
829 :
811 :2013/07/09(火) 19:56:25.59
>>824 は、配列をポインタへ移し替えて
関数コールしてるだけだろ。
これでいいのか?
830 :
811 :2013/07/09(火) 20:18:44.29
関数へ2次元配列を渡した時に、 ポインタと配列でアクセス方法が変わってしまう事と、 ポインタの時、データが連続している保証がない事で困る。 ポインタと配列をどちらも入力できるようにするのは諦めるべきでは? ポインタの時、配列のようにデータが繋がっているとしたら、これで共通のアクセス可能だが。 #include <stdio.h> void func(char *ary) { strcpy(&ary[0],"22222"); strcpy(&ary[10],"33333333"); } int main() { char ary[2][10] = {"000000000","111111111"}; char* bry[2] = {"000000000","111111111"}; //func(ary); func(bry); func(&ary[0][0]); func(&bry[0][0]); printf("%s %s\n", ary[0], bry[0]); printf("%s %s\n", ary[1], bry[1]); return 0; }
>>824 メモリ制限がある環境でstaticはないだろと思ったけど、malloc/freeで断片化するような頻度での呼び出しでは有りか。
>>829 そもそも int a[][] と int *a[] とはまったく別物と決めてかかったほうがいい、それでみんな楽になる
833 :
デフォルトの名無しさん :2013/07/09(火) 21:18:57.27
>>826 ここはてめーの学習帳じゃねーんだよゴミ
ゴミってポインタ以前に本当に頭わりーな
初心者にえばり散らす奴は最低
ポインタと配列の違いがよく分かってないんだろうな 今ならHeadFirstCで分かりやすく解説してあるから立ち読みしてくるといい
837 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/07/09(火) 22:01:28.48
838 :
デフォルトの名無しさん :2013/07/09(火) 23:06:08.49
>>837 ブログのアクセス数どのくらい?
何か面白いプログラム作ってよ
839 :
デフォルトの名無しさん :2013/07/09(火) 23:14:28.08
>>837 ありがとう。
visual studioでそのファイル見つけました。
便利ですね。
840 :
toya :2013/07/09(火) 23:24:42.64
841 :
デフォルトの名無しさん :2013/07/09(火) 23:56:15.21
842 :
デフォルトの名無しさん :2013/07/09(火) 23:59:32.36
入門レベルならその内容でいいと思うけど 応用Cとかいう題名でCの応用的な事を系統立てて学びたいどんな プログラムにすればいいだろうか? 1章 2章
843 :
デフォルトの名無しさん :2013/07/10(水) 01:11:20.91
>>840 ここは執筆活動報告スレではない
他人に迷惑をかけないよう直ちに回線を切れ
>>840 意義がある活動されてますね。
こういうのがあるの、初めて知りました。
>>831 メモリ制限とは関係ないのでは?static な領域は計算可能だから必要な分だけ .data に確保されて問題ない。
static をつけずにスタックに配列(というおおげさなもの)を置くという方が、むしろ制限を意識する。
というか、配列を初期化するときには static をつけたくなるんだね、C89 が気になって、もうやめたいけどね。
staticはヒープ領域じゃないの・・・・また恥を晒すのか?
>>846 static はヒープじゃない、とは一言もいっていないが?
ただ、スタックはデフォルトのままでは「実行させるまで足りなくなることがわからない」けれども、static なら確保できなければコンパイルの時点ではねられるだろう?
配列をスタックに置くのはどーかと思うよ。
>>824 をみるかぎり static な領域のほうが制限がきつい、と思っているようだけれども、その判断は疑問だね。
失礼
>>831 は static な領域のほうが制限がきつい、と思っているようだけれども、その判断は疑問だね。
ヒープって、実行時に動的に割り当てる領域じゃなかった?
staticな変数も起動時に割り当てられるよ つーかQは頭大丈夫か?
スタックに置いたら、プログラムサイズをlsで調べられなくなるじゃないですかー!!
>>850 初期化しない分はたしかにそうだね
でも、初期化する分は、普通は、リンク前にすでに組み込まれているんじゃないの?
>>849 コード領域、スタック領域以外をヒープと呼ぶ人もいるようだ(昔なら DS セグメントレジスタでアクセスする分を全部ヒープといっていたようだね)。それに異論を唱えるつもりはない。
static な領域は、確保できないのならコンパイル&リンク時点ではねられるだろう?malloc() 失敗時にちまちま書くのが面倒なときは、えいや、と static にするね、配列なんか特にね。
>>852 メモリ配置は環境によるね、その図の場合もあるし、ヒープとスタックが逆の場合もあるよ。静的領域(.data と .bss)は普通はコードの後ろに置くようだけれどもね。
>>853 初期化する分もコード内に持っていて、プログラム起動時にヒープ領域にコピーされる
>>853 >>static な領域は、確保できないのならコンパイル&リンク時点ではねられるだろう?
それは違う。メモリを割り当てるのはあくまでプログラム実行時(ロード時)。
あーまたQzの馬鹿講義が始まったよ(ノ∀`)アチャー
>>855 ふむ。.text, .rdata, .data 各セクションの実行時における配置にすきまがある環境もあるんだね、意識したことはないけど
でも「確保できないのならコンパイル&リンク時点ではねられる」という点はどうであれ同じだと思うだけれども?
コンパイルできたコードが実行時(プログラムロード時)にはねられることもあるの?
>>858 実行時のメモリ不足なんてコンパイル時に分かるわけないだろう
どうやったらこんなアホ人間が出来上がるのやら アホはアホらしく大人しくしていればいいものを
link時にわかることもある
>>861 もしかして自分の馬鹿さ加減を人に指摘されて喜ぶ究極のマゾなんじゃねw
ちょっと分かりやすく補足してみる。 巨大なstaticな領域を取ったときに、exeファイルとしてNGとか、elfファイルとしてNGとかの 実行ファイル形式にならない場合はコンパイル時にエラーになる。 でもそうならなかったら、実行時にエラーしないとは言えない。 なぜならメモリにロードするのはあくまで実行時だから、実行時に十分なリソースが なければロードできない。 あとOSによっては仮想アドレス空間は確保しても物理的に確保しない場合もあるから 実行開始したあとにエラーが出る可能性もある。
>>859 厳密な意味ではやったことはない。同じアーキテクチャでコンパイルと実行を別の環境としたことはあるが
>>859 >>860 なんだかだんだん特殊な状況にはいってきたね、MS-DOS で FEP だのどーでもいい辞書だの TSR だのをバンバン載せた情況で MS-C がきどーしないとか‥‥‥
はじめの話はなんだったの?スタックに配列を載せるのと static に配列を載せるのとどっちが適切か、あるいは使い分けはどこにあるか?じゃなかったの?
>>864 >物理的に確保しない場合もあるから実行開始したあとにエラーが出る可能性もある。
malloc() で OK が出てもそれを信用してはいけない、という話はよく耳にするね、でも、それって static な領域にも当てはまるものなのか‥‥‥
巨大な配列は、static に置こうが stack に置こうがあんまりかわらない、というのもなんだかねえ‥‥
>>862 だよね〜
ROM で動作する環境もあるから、実行時でないと〜 とか言ってる奴はちょっと知識が足りない。
staticを付けたほうがコンパイル時にメモリを多く確保する傾向がある。
コンパイル時にauto変数 + static変数の領域を固定サイズで決定しているはずで 巨大なauto変数が生成されるとサイズがあふれて実行時に止まることはあるだろ?
871 :
デフォルトの名無しさん :2013/07/10(水) 08:43:04.29
>>static な領域は、確保できないのならコンパイル&リンク時点ではねられるだろう? >>static な領域は、確保できないのならコンパイル&リンク時点ではねられるだろう? >>static な領域は、確保できないのならコンパイル&リンク時点ではねられるだろう? >>static な領域は、確保できないのならコンパイル&リンク時点ではねられるだろう? >>static な領域は、確保できないのならコンパイル&リンク時点ではねられるだろう? >>static な領域は、確保できないのならコンパイル&リンク時点ではねられるだろう? 自覚してないバカは始末が悪いな。 バカのくせに見栄だけは一人前で特殊な状況と言い逃れようとしてるのが笑える。
872 :
デフォルトの名無しさん :2013/07/10(水) 10:59:51.55
スタックは拡張できない場合もあるので、巨大な配列をスタックに
置くことは普通しない。しかしサイズを気にするならば、
>>824 > static char a[N][10] = {{0}};
こんな間抜けな事もしない。 WWWW
不要になった後その領域を再利用できない、データ領域では足りない場合がある。
からだ。 WWWW
この場合、再利用しなくていいし、足りているからそうしてんだろw
この場合に限定するのならstaticにする必要はない。
Win32に決め打ちのリンカならstaticで2GBや3GBになるとエラー吐く事はあるけどな 一般にはそういうのは無視してリンクしてしまう
876 :
デフォルトの名無しさん :2013/07/10(水) 16:04:21.19
細かいこと気にしてるとハゲるぞ
877 :
デフォルトの名無しさん :2013/07/10(水) 18:06:11.69
ファイル探す時、ディレクトリツリーを辿るのが凄い面倒臭いんですが どうしたらいいですか?お絵描きして遊んだ後に、Cやろうとしてファイル 探そうとしたらお絵描きフォルダがまず最初に開くので、Cのファイルまで 辿らないといけないので凄い面倒臭いです。
>>877 よく開くフォルダはデスクトップにショートカットでも置いとけばいいじゃん。
879 :
デフォルトの名無しさん :2013/07/10(水) 18:27:28.17
>>878 そんな事できるんですか...
初めて知りました。
後かなり困ってるんですがアプリケーションの関連付けを変えるにはどうしたらいいですか?
VC++ダウンロードしてからアイコンが全部VC++に変わりました。
メモ帳で開きたいのですが....
僕もVCダウンロードしたのですがシリアルがわかりません><
>>872 おひさしぶり。
>>872 , 874
配列の0初期化を明示したかったから static をつけただけです、もっとも static つければ 必然として 零初期化されるし、この場合は意味がないようですね
自動変数の配列でも初期化できるようになったのはいつからだったっけ
>>872 >データ領域では足りない場合がある。
いまどきのフラットなメモリ空間ではそんなこともないだろうに?もしかして 64KB の壁のことをいってるの?
884 :
デフォルトの名無しさん :2013/07/10(水) 19:29:08.07
> 配列の0初期化を明示したかったから static をつけただけです
直後にforで初期化してるのに 意味ねー WWWW
配列は初期化するというのならbが初期化されてねー 一貫性ねー WWWW
そして、アルツハイマーの兆候 WWWW
>> 845 static をつけずにスタックに配列(というおおげさなもの)を置くという方が、むしろ制限を意識する。
>> 847 配列をスタックに置くのはどーかと思うよ。
>>883 バカにはわからない。 WWWW
>>871 あまりに巨大な領域に初期値も指定すれば
コンパイル&リンク時に死ぬ事もあるとは思う
が、基本は実行時だよな
そっかーbss は実行時だねえ
visualC++2010でデバックすると決まって 'stdio.h': No such file or directory というエラーがでます。部活の先輩にもらったサンプルプログラムなので構文エラーではないです。 このエラーはどういった方法で直すことができるでしょうか?
888 :
デフォルトの名無しさん :2013/07/11(木) 01:38:54.54
低学歴、かまってちゃん
標準ライブラリってデフォルトでコンパイラに入ってなかったけ?
>>889 そのはずなんですが何故かできないんですよね?
なにか初期設定のようなものが必要なんでしょうか?
>>889 ヴァカに構うな
お前だけならまだしも他も迷惑する
嫌がらせで全角が混じってる予感
bss領域にリミッターが設定されてないとか?
スタックに確保される領域は実行時でないとわからんけどね 関数のネストしだい?
>>894 再帰使ってるとわからない。
再帰使ってないなら、最大値を計算することは可能で、そう言うツールもある。
あと .bss とか .data とかの大きさを指定できて、越えるとリンク時にエラーにするものは、組み込みだと珍しくない。
再起があってもなくてもスタックサイズはコンパイル時に確定してるだろ? 深い再起で落ちるのはメモリ不足になるためだろ。
ここでスタックのサイズって言ってるのは、スタックの消費量のことでしょ? alloca()使わなくても、再帰がある時点でコンパイル時には不明なんじゃないの?
staticで初期値書かなかったら0になるのは、何の仕様?
それは規格です。
構造体型配列と、memmove関数について質問があります。 以下のような構造体型の配列をmemmove関数でコピーするとき、 コピーを始める位置の指定((name + 1)の部分)は、下のようにしても問題ないのでしょうか? #include <stdio.h> #include <string.h> typedef struct { char first[4], last[4]; } NAMESET; int main(void) { NAMESET name[4] = {{"aaa","bbb"},{"ccc","ddd"},{"eee","fff"},{"ggg","hhh"},}; NAMESET temp[4] = {}; memmove(temp, name + 1, sizeof(NAMESET) * 2); printf("%s %s\n", temp[0].first, temp[0].last); printf("%s %s", temp[1].first, temp[1].last); return 0; } 結果: ccc ddd eee fff
904 :
902 :2013/07/11(木) 16:03:27.40
>>903 返信ありがとうございます。
これと
memmove(temp, name + 1, sizeof(NAMESET) * 2);
これは
memmove(temp, &name[1], sizeof(NAMESET) * 2);
等価であると考えて大丈夫ですか?
後出しで申し訳ありません。
>>904 同じ。
*(name + 1) と name[1] は同じ。
907 :
デフォルトの名無しさん :2013/07/11(木) 17:22:05.54
スタックとヒープがいつもどっちがどっちか分からなくなります(辞書的な意味で) どうしたらいいでしょうか? ポストイットに書いてディスプレイに貼るのはダサいので他の方法でお願いします
ヒープ 動的に確保する器 スタック おおよそ後入れ先出しする器 スタックの実装段階でヒープを利用する ということも有り得る話
「stack もクソもない山盛り heap」と覚えればいいと思うよ
push,popって配列の0での作業なの? それともstrlen-1での作業? これが未だに分らない。
>>910 ヒント:i8086 とかではスタックポインタ(のオフセット)を 0 で初期化するのが普通です
スタック(LIFO)はアドレス操作をカプセル化したデータ構造なので、 伸びる方向が上方(順方向)でも下方(逆方向)でも好きな方で実装すればいい。 CPUスタックは下方伸長のものが多い。
a
当方 物理学科で趣味でプログラミングを趣味でやり始めたんだけど問題発生 一定の数の質点が相互作用しているプログラミングを作ってる最中なんだが 何故か全ての質点が互いに相互作用じゃなくて一個の質点とそれ以外の質点が相互作用するプログラムになっちゃった。 プログラムは全然分からんから教えて欲しいんだけどここで聞いていい?
916 :
デフォルトの名無しさん :2013/07/11(木) 20:24:50.84
>>914 >趣味でプログラミングを
>趣味でやり始めた
何でそんなに趣味であることをそんなに強調してんのコイツ
ピタゴラス三体問題は誤差をなくすのに大変なんで勘弁
>>915 //codepad.org/vawU35Ji
ルンゲクッタは4次です プログラミングについてはまったく無知なんでおかしいと思うけど。。
>>914 >一個の質点とそれ以外の質点が相互作用するプログラムになっちゃった。
しか読んでない。
if (i==j)
Fx[i]+=0;
else
Fx[i]+=(a/dis[i][j])*res_x[i][j];
Fy も同じ処理で
こうするとどうなる?
物理に使える数値計算、数式処理ソフトを使え。 ZEROから制作は馬鹿げてる。
フリーの数値計算、数式処理ソフト R言語 Octave Scilab Maxima Python(x,y)
>>920 ありがとう というか自分のアホさかげんに呆れている 当たり前の事に気付かなかった
>>921 粒子法を開発した先生の本でc使ってたから俺もやり始めたんだけど他にいい方法があるのか
実用上、フォートランやC言語は、計算速度不足のとき最終的に使えばいい。 とりあえず容易に計算でき、結果が出せたらいいだろう。
926 :
デフォルトの名無しさん :2013/07/11(木) 22:02:59.99
太陽系の惑星とそれぞれの衛星も含めた全ての軌道を同時にシミュレーションしたいんですけど、どうしたらいいですか? 水星が木星の重力の影響を受けて楕円軌道が大きくなっていて、将来水星が太陽にぶつかって飲み込まれるかもしれないときいたので、 水星がなくなった場合の太陽系の他の惑星の軌道への影響を調べたり、 また水星以外にもそうした変化が起こっていないかなど調べたいのです
数学板とか天文板とかに行った方がいいんじゃないか
マジで多体問題やるつもりか 論文にしろよ
>>896 確保する容量のことなら Windows は CreateThread( ) でスレッド作成時に指定できる
使う量のことなら、alloca( ) とか再帰で確定しない
要するに、実行するまでわからん場合があるということだ
多体問題って今日はじめて知ったが。
N=3でも数値計算しか知られてなかったのが、最近、一般相対論でのN=3の一般解が解けたようだな。
一般相対論で4以上が不可能か証明されてるのか?
弘前大、一般相対論における三体問題の直線解の解析解を導出 2011年2月3日
弘前大学大学院理工学研究科の山田慧生氏と浅田秀樹准教授が、一般相対論における三体問題の直線解を導き、Physical Review 誌に掲載された。
多体問題においては、積分法による一般解の解析解は存在しないとアンリ・ポアンカレによって証明されており、問題解法には摂動や数値解析を用いた計算が従来行われていた。
2007 年に行われた研究会での浅田先生の発表資料 (PDF) によれば、日本天文学会では「三体問題にだけは手を出すな」「相対論にだけは手を出すな」という格言があるほどだったらしい。
http://www.excite.co.jp/News/it_g/20110203/Slashdot_11_02_03_044235.html
Linux とかだと勝手にスタック延ばしてくれたりしないっけ?
link時にスタックサイズを指定することである程度は回避出来ます スタックを消費しすぎて、heap領域とかをぶっ壊すこともあるかな heap領域を使いすぎて、スタック領域を使えない状態になることも パソコンとかの富豪プログラム環境ではあんまり関係ないかも
935 :
914 :2013/07/11(木) 23:05:56.79
>>931 一般解は存在しないけど特殊解は存在していてニュートン方程式では知られていたけど
一般相対論では初めて見つかったって事だと思うよ
学部生で一般の解析解見つけるなんてすごいなぁ
ここはCスレなんだが?
古典力学で解けないことが知られてるのに、相対論的一般化では解けるってのはオカシイと思ったら、特殊の場合の解析解が求まったという話だった。
多体問題 - Wikipedia
多体問題は、互いに相互作用する3体以上からなる系を扱う問題である。
太陽と地球のような二体問題は厳密に解けるが、例えば月の運動も考える一般の三体問題以上になると解析的に解くことはできないとされる。
18世紀にはジョゼフ=ルイ・ラグランジュが研究を深め、19世紀末にアンリ・ポアンカレによって証明された。
ただしポアンカレの証明は積分法の範囲であり、この範囲以外の解法の存在については現在も不明である。
当たり前ですが,三体問題の一般解,と言うわけではなく,一般相対論の範囲で三体問題の直線解(三つの物体が一直線上に乗っている場合限定の解)を解いた,という物です.
http://slashdot.jp/comments.pl?sid=521452&cid=1897426
カオスなのになあ よく解けたとしか
この話題、面白いんですが、C言語に限定したものではないし、 続けるならスレを立ててそちらで継続されたらいかがでしょうか?
まぁPHPでやることはないだろうしなw
軌道シミュレーションはよく研究されてて、ハードの性能だけの問題かと思ってたらそうでは無いんだな。既知の手法なら表彰されないしな。
第6回(平成21年度)日本学術振興会賞受賞者
「数値的一般相対論の開拓およびその応用」
中性子星やブラックホール形成は、一般相対論的効果が顕著に現れる現象であるが、これらの問題を解くための方程式は大変複雑になる。
柴田大氏は、一般相対論の基礎方程式であるアインシュタイン方程式を数値的に解き、
ブラックホールの形成や重力波放出を伴うような一般相対論的天体現象の理論的解明に多大な貢献をした。
特に、同氏は長時間安定に一般相対論の数値シミュレーションが行える新しい定式化を提案し、実際にその有効性を実証した。
これらは、「数値的一般相対論」と呼ばれる分野の本格的到来を導く記念碑的業績として世界的に高く評価されている。
同氏は、的確な問題設定と独創的な計算手法を駆使して、一般相対論・相対論的宇宙物理の分野において今後も世界をリードしていくことが期待される。
http://www.jsps.go.jp/jsps-prize/ichiran_6th/09_shibata.html
この程度の脱線ならしょっちゅうあったのに、ついていけないときだけスレチだって喚かれてもw
>>943 いや、そうじゃなく、このスレに埋もれてしまうより
単独で立てた方が良くないかと
そんなに面白い話題ならたててくれ。 あと叩き台のコードもアップで。
太陽系内での軌道計算すら大変そうだし、そこに彗星がやってきたときとかの軌道はどうやって求めてるんだ? ほんの少しのズレでも、軌道が変わってしまうだろ。 たとえば球形の鉄玉を転がしたとき、磁石に衝突するかしないかは、少しの方向や速度や磁力の違いで変わる。
どうせスレ立てても30レスくらいまでいったところで放置されるよ
土星の輪には何故空隙が出来るか、誰かシミュレーションで説明して
あの輪っかは土星の自転方向と関係あるの?
951 :
デフォルトの名無しさん :2013/07/12(金) 21:35:31.18
G(Mm/r^2)だっけ?と、 mrω^2だっけ? だけで何とかならんの? つーか久しぶりすぎてこの公式が怪しいw
とりあえず最初は彗星抜きで考えろよ。 純粋に今現在判明してる太陽系の惑星だけで。
シュミレーションってどういうの? ダイレクトXとか使って惑星がぐるぐる回ってるのを見られる感じ? それを好きな角度や距離から見られる感じ? NHKとかで出てくるCGみたいな感じ? 時間の進む速さを1000倍とか任意に指定できる感じ? それで見たい年代を西暦で指定したりできる感じ?
CSVなどで位置出力だけでいいんでは。でもリアルタイムCG画像を描ける程度の速度で。 画像、動画出力はいまは本質的でないこと。
趣味じゃなくてシミュだよ。 F=maとF=GMm/r^2から加速度がわかる。加速度の積分から速度がわかる。 速度の積分から位置座標がわかる。 表示する惑星は、大きさをデフォルメしないとほとんど見えない。
> 953 「わたしは発音が如何とかそれ以前のおバカです」 これコピペして ctrl押しながらF7 「しゅみれーしょん」 と入力後 Enter まずここから始める
グラフィカルな部分は誰かがサクっと作って、基本データ(各惑星の質量、現在の速度、なんたら平面からずれてる角度)は外部ファイル、シミュレーションはライブラリにしたらいいんじゃないかな。 シミュレーションライブラリから計算結果を本体に送って、本体はただ描画するのみ。 データはテキスト形式、その他はライブラリ製作者の自由、自由にしといたほうが後で彗星やらブラックホールやら拡張できるからいいだろ。 こういう仕様ならば致命的に頭のおかしいLinuxヲタでも描画する本体さえ作れば比較的簡単に使える。 そしてスパコンを使わずに計算するためどうすれば効率よく計算できるかということかCベースで語られて盛り上がる。
958 :
デフォルトの名無しさん :2013/07/12(金) 22:12:36.60
幸いなのは無限に計算しなくていいことだなw 50億年以内にこの星は確実に消えるから 50億年まで計算できれば十分w
地球に土星みたいなリングがあったらとかどうでもいいんだよ。 実際ないんだから。 俺たちが知りたいのは地球が消えるその日のことなんだ。
その日は太陽に飲み込まれるか、巨大隕石が激突するだろう
位置関係のデータはどこで入手できる?
>>960 ← すげーヴァカがいてびっくり、こんな古い知識で会話に入ってこようとしてるヴァカがいることにマジでびっくり
>>963 そいつは荒らしだから相手にするな
そのコテにいろんなスレが潰されてる
NG必須
967 :
デフォルトの名無しさん :2013/07/12(金) 23:21:03.90
現実的な問題として、惑星の位置はfloatで計算するのかね
巻尺でミリ単位まで計ってるのを見たぞ
普通、doubleかlong double使うっしょ。floatはおっさん好み
国土の海岸線を1メートル単位で算出してオレ凄いと威張るみたいな?
日蝕の時間を分単位で特定できる精度ならゆるしてやらなくもない
現在測定されてる精度と、海王星までの距離によるな。 つーか冥王星って、 冥王星クラスの星がその先にいっぱいあるから いちいちカウントするのやめようぜ! ってことになったんだっけ? それらの星は海王星とかにどの程度影響を与えてるんだろう。
976 :
デフォルトの名無しさん :2013/07/12(金) 23:46:30.56
SSEとかOpenCLとかやってたら普通にfloat使うな。 どうしてもその精度が必要な場合じゃなきゃdoubleなんて使わん。
979 :
デフォルトの名無しさん :2013/07/12(金) 23:54:31.56
>>977 ややこしくなるからそれ後回しにしようぜw
Wikipdia見たらAUとかって単位が使ってあった。 ってことは、精度はfloatで、単位はAUでやればいいのかね。
疲れた、眠るね
人はなぜ眠るのか
ひつぎが一匹、ひつぎが二匹、…自演も楽じゃないな
doubleのハードウェア演算器が実装されてるんだから 普通はdoubleで計算するな。floatが必要なら最後に キャストすればいいし。
物理シミュレーションしてるとΔTのせいで浮動小数点の計算誤差の影響がものすごく大きい double でも精度が全然足りない float で計算するとしたらゲームでそれっぽく見せる用
最近のPFはGPU用の多倍長少数実装しないのか?
PFじゃないやPGだな 無い物は無いで自作しするのが健全なC使いの精神だろ
聞きかじった知識で妄言吐くのが健全とは思えないが
for(int i=0,...,..)←これがコンパイル通らない(´・ω・`) こういうのを通るようにできるコンパイルオプション有りませんか?
ド素人の人こっちにも来るようになったのか
993 :
デフォルトの名無しさん :2013/07/13(土) 02:19:22.51
描画担当から言わせてもらうと、 ビジュアル面はゲームみたいなもんだから floatで描画に受け渡すAPI実装するよ
描画とシミュレーションは別スレッドにしたほうがいいような。
>>990 C++ でコンパイルする。
お使いのコンパイラはなんですか?
>>995 gcc使ってます。
g++に変えればC++コンパイル出来るらしいからやってみたけど
よくわからないエラーが増えたので
C言語らしくfor文の前に宣言するしかなさそうですね
-std=c89 ISO 1990 C 標準に準拠させる -std=c90 ISO 1990 C 標準に準拠させる -std=c99 ISO 1999 C 標準に準拠させる
うめ
>>996 c99 でもできるから
>>997 にしたがって -std=c99 を付けてコンパイルすればいいでしょう
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。