トップページgamedev
1001コメント423KB

Kazukiの同人3DRPG制作【第一話】

■ このスレッドは過去ログ倉庫に格納されています
0001Kazuki2010/09/10(金) 06:35:05ID:8vGP1TSQ
Kazukiの同人3DRPG制作 公式サイト
ttp://www.kazuki-sendo.com/game/


発展途上中の素人Kazukiを中心として、
DirectX9による3DRPG制作に挑戦します。


開発言語は、C++です。
長く苦しい戦いになると思われますが、
同人ゲーム制作の限界への挑戦が、当企画のテーマでもあります。

2ch当スレを本スレとし、
ニコニコ動画、zoome、mixi、の3コミュメンバー合同で同人3DRPG制作に挑戦します。

※本格的にゲーム制作に協力していただけるメインメンバー様へは、
 ゲーム完成後に平等に利益分配されます。
 (詳細は公式サイトのメンバーページ)
0597名前は開発中のものです。2010/09/17(金) 13:22:00ID:/2a5uZT0
>>596
長文書きながら空気読めてねぇ、とは思ってた、すまそ。

>>1
# で始まる(#defineとか)は、プリプロセッサにより
「ビルドする前に」処理されて置き換えられるよ。つまり、
#define a 10 → printf("%d", a); とすると、#define 行は消えて
printf("%d", 10); に変換されてからビルドされる。

つまり、下の2つのはビルドする瞬間には全く同じコードになる。
#define a 10 → printf("%d", a); 
printf("%d", 10);
ビルドが始まる頃には #define も a も消えてなくなるから、
プログラム実行時に a というデータがメモリに格納されることは無いよ。
0598名前は開発中のものです。2010/09/17(金) 13:23:17ID:7qBxF+Sk
そうだな
>>587-588の質問は意味を理解できないレベルの質問な気がするぜ

もっと基本的な
CとC++の違いとか
FizzBuzz問題とかソートとか
回転行列導けとか
そのくらいからじゃない?
0599名前は開発中のものです。2010/09/17(金) 13:29:22ID:/2a5uZT0
define でメモリを使ってないという証明のためには、
プログラム実行時のメモリの中身を調査すれば早いけど、初心者には難易度高いか。
…そうだな、#define を1万個入れてビルドした奴と、
define 使ってないプログラムを作って、
タスクマネージャで消費メモリを比べたらいいよ。
0600名前は開発中のものです。2010/09/17(金) 13:35:12ID:itNV/TuA
とりあえず3と9で割れて6で割れない最小の自然数xを早くだな
範囲は-100<x<100で
0601名前は開発中のものです。2010/09/17(金) 13:45:04ID:cLhPtb1k
>>599
プリプロセッサで処理されるのは常識なんだから、証明責任は向こうにあるんじゃね?
あと、本人くる前に説明すると

んなこと知ってるよwwww
どーでもいいしwww
わかりやすいようにああ書いたんだよwwwww

って言われるから注意な
0602名前は開発中のものです。2010/09/17(金) 13:47:34ID:/2a5uZT0
ちなみに上の問題がもし全部わからなかったらこうなるとせっかくだから書いとく(@長文出題者)
長文これラスト。

地面にはリアルなキャラの影が落ちてなくて、肌とか顔がプラスチックみたいになって(BRDF無し)、
背景にある金属には周囲の写りこみも無く金属にすら見えなくて(環境マッピング無し)、
服や顔のしわとか細かい部分を見るとどれも平坦で作り物感がして(バンプマッピング無し)、
滑らかなシェーディングの仕方が分からないとなると、デフォルトのグーローが使われて、
何も知らずにこれに適してないモデルを作ってしまうとポリゴンの継ぎ目がカクカクになって、
CPU と GPU の役割分担わからないから適当にしたら
CPU 忙しいのに GPU 暇とかが頻繁に発生して大したこともしてないのに処理落ちし始める。
シェーダの役割とか3D数学もわからないとなるとそもそもシェーダプログラムができなくなる。
(シェーダープログラム内では 4x4 同時座標系の行列が使われている)
独自シェーダを使わなかった場合、昔ながら Phong の反射モデルベースのシェーディングが
自動的に使われることになるけど、Phong の反射係数の意味すらわからないとなると、
パラメータを訳も分からず適当にいじるしかなくなって、何もできなくなる。

っていう感じで、全部一つに繋がってる。
0603名前は開発中のものです。2010/09/17(金) 14:44:06ID:2BpkBEPJ
>>589
同人2Dゲーだったらともかく、同人3Dゲーをガチで作ろうとすると避けられない所もいくつかあるよ。
最悪でも三次元ベクトルと行列の基礎知識ぐらいは必須になる。
まぁでも2.5D(3D空間だけど、2Dアクションみたいな)のゲームだったら二次元ベクトルの知識があればなんとかなる。

2Dゲーと3Dゲーの違いとして、リソース=クオリティが技術力=クオリティになるのは確か。
2DはテクスチャとかUIがしっかりしてて、適当なエフェクト(ムービーテクスチャでも)出せばそれなりに見える。
でも3Dは>>602が書いてある通り、「綺麗に魅せる為」にはそこそこ高い技術が使わないといけない。

まー最悪基本ライティングとかのみでも一応出来るっちゃ出来るけど、高クオリティを求めるならば、確実に見劣りする

0604名前は開発中のものです。2010/09/17(金) 14:53:59ID:cJXoUaD/
>>603
>最悪基本ライティングとかのみでも一応出来るっちゃ出来るけど、高クオリティを求めるならば、確実に見劣りする

でも同人ゲーでノーマルマップまで使えるようなとこってほとんど無いような気もする。
思いつく限りではソウルゲイナー作ってたとこと妖々剣戟夢想作ってるあんかけスパくらいかな。
あとは大体のサークルが基本ライティングのみかもしくはキャラにはライティングしないでテクスチャの色のみでお茶を濁してるのが現状だよ。
0605名前は開発中のものです。2010/09/17(金) 15:39:11ID:b92kLMfZ
まぁ同人ゲーであんまクオリティ高くすると売れないからな
同人ゲーマーにそんなハイスペックなPC持ってる人が少ないからね
0606名前は開発中のものです。2010/09/17(金) 15:59:23ID:2BpkBEPJ
まぁそこまで高い技術使う必要無いからな
そういった技術を覚えればゲームが面白くなる訳でもなんでもないし
面白くてナンボな世界に技術はいらない。

個人的に作る時にも実装ガンガンしていって方が面白いしww
3D作ったとしても綺麗にする為に労力使おうとは思わないなぁ、ってか時間的に無理
0607名前は開発中のものです。2010/09/17(金) 16:07:26ID:cJXoUaD/
まあ「できない」なのか「やらないだけ」なのかはサークルによって違うだろうけどとにかく実際問題少ないことは間違いないわな。
0608名前は開発中のものです。2010/09/17(金) 16:18:57ID:AmJCQRbx
>>599
そんなバカなw

じゃあ聞くが、あんたは、システム領域、ヒープ領域、コード領域、スタック領域で、
メモリを全て使い切っても、静的領域を使えるとでも言いたいのか?

そんな馬鹿なw

ちなみに、静的領域はグローバル変数で使う領域のことです。


そもそもプログラムを実行しているのに、
メモリを使っていないとか絶対にありえない!

どんなプログラムも必ずメモリを使用して動いているのです。


ちなみにメモリとはCPUにデータを移す前のデータの一時保管場所。
0609名前は開発中のものです。2010/09/17(金) 16:20:41ID:AmJCQRbx
ああ。違う違うw

CPUはメモリのデータを使って、
プログラムを実行させるための頭脳かw
0610名前は開発中のものです。2010/09/17(金) 16:27:13ID:cJXoUaD/
>>AmJCQRbxが>>1さんなのかな?
とりあえずはじめまして(違ってたらごめんなさいね)。
0611名前は開発中のものです。2010/09/17(金) 16:33:48ID:b92kLMfZ
>>608
defineてものをわかってないようだね
0612名前は開発中のものです。2010/09/17(金) 16:35:56ID:AmJCQRbx
ちなみに、それまで1GBのメモリを搭載していたパソコンに、
2GBのメモリに増設すれば、
パソコンの動きが早くなったりします。

あれはどうしてなのかと言うと、
増設した分、メモリで使用できる領域の全体容量が増えるため。


ちなみにAdobe製品のCS4は、
64bit版のWindows7に対応しています。

64bitになると、128GBまでメモリを増設できるため
メモリ内で一度に扱える容量が増え、
それに対応するようにCS4製品はプログラムが組まれているため。


パソコンに1GBしかメモリを搭載していない場合は、
1GBまで用のメモリ容量確保プログラムが動き、
2GBに増設すれば2GB用のプログラムに切り替わり実行される。

ちなみにグラボにもメモリが搭載されていて、
ゲームの3D描画は、マザーボードのメモリではなく、
グラボのメモリを使う。

ちなみに、サウンドボードを付ければ、
音楽はサウンドボードでデータを扱う。
0613名前は開発中のものです。2010/09/17(金) 16:39:45ID:AmJCQRbx
なので、どんなプログラムもメモリを使って動いています。

メモリを使わないで動くプログラムなんて存在しない。


まあ、HDD内の仮想メモリを使う場合もあるけど。。

これで俺のレベルが解った?


解説にメモリの図解を使用しているのは、
それを初心者にも解りやすく解説するためです。
0614名前は開発中のものです。2010/09/17(金) 16:41:18ID:b92kLMfZ
>>613
defineを使っても実行ファイルの使用メモリに影響しないってのを言ってるんだよ?
0615名前は開発中のものです。2010/09/17(金) 16:41:35ID:cJXoUaD/
>>612
>ちなみに、それまで1GBのメモリを搭載していたパソコンに、
>2GBのメモリに増設すれば、
>パソコンの動きが早くなったりします。
マジですか?!
情報サンクスです!!
でもうちのPCはけっこう小さな机の上に置いてるのであんまり激しく動き回られると机から落ちてしまいそうでちょっと怖いです。
0616名前は開発中のものです。2010/09/17(金) 16:43:49ID:7qBxF+Sk
>>608
defineは静的領域すら使わない
defineを使おうが使うまいがメモリの使用量は変わらない

だからあんたはdefineを理解してないって言ってんだよ
0617名前は開発中のものです。2010/09/17(金) 16:46:28ID:+iJDRTKb
もはや、>>1のは理解出来ないフリじゃね?

俺らを怒らせて楽しんでいるようにしか見えん。

0618名前は開発中のものです。2010/09/17(金) 16:50:31ID:AmJCQRbx
>>616
えええ??

そうなのか?


なんか混乱してきた。。

じゃあ、定数で使用するデータはどこで扱っているのですか?

定数ってのは、実はint型とかchar型を使用していたりするのですが、
それらのデータは、どの場所の領域を確保して
データを扱っているのですか?
0619名前は開発中のものです。2010/09/17(金) 16:51:54ID:sYa04YS8
>>618
コンパイルする前に置換される
0620名前は開発中のものです。2010/09/17(金) 16:52:08ID:AmJCQRbx
どの場所に領域を確保


定数で指定したデータは、
どの場所に運ばれているのか?

という質問です。
0621名前は開発中のものです。2010/09/17(金) 16:53:32ID:7qBxF+Sk
>>618
int型もchar型も使ってないよ
しいて言うならコード領域に入ってる

お前が無知だと自省したら教えてやるよ
0622名前は開発中のものです。2010/09/17(金) 16:56:29ID:b92kLMfZ
ほんとうにわからないのだろうか
0623名前は開発中のものです。2010/09/17(金) 16:59:59ID:cJXoUaD/
>>608
ちょっと待ったなんか微妙にdefineの話と定数の話がごっちゃになってないか?
0624名前は開発中のものです。2010/09/17(金) 17:01:02ID:AmJCQRbx
プログラム実行の流れ

1.コンパイルを実行
2.ソースコードの全文は、コード領域に運ばれる
3.引数やローカル変数は、スタック領域に運ばれる
4.グローバル変数は、静的領域に運ばれる
5.コンパイラがコンピュータが読める内容に翻訳
6.リンカで、ソースファイル、ヘッダファイル、リソースファイルを実行ファイルにする
7.CPUが動く(すでに動いてるが)
8.CPUが実行ファイルを読みにいく
9.CPUが高速回転して処理
10.最後に実行結果をディプレイに表示する
0625名前は開発中のものです。2010/09/17(金) 17:01:05ID:7qBxF+Sk
>>623
defineを定数だと思ってるんだから仕方ない
0626名前は開発中のものです。2010/09/17(金) 17:01:37ID:sYa04YS8
>>624
どこから突っ込めばいいのやらorz
0627名前は開発中のものです。2010/09/17(金) 17:03:49ID:7qBxF+Sk
>>624
最低限6と7分けて欲しいな
0628名前は開発中のものです。2010/09/17(金) 17:04:48ID:cJXoUaD/
>>624
>9.CPUが高速回転して処理
うちのPC古いから手回し式だわ
0629名前は開発中のものです。2010/09/17(金) 17:05:09ID:2BpkBEPJ
このスレの話題のレベル差ぱねぇ

const static int AAA = 10;
0630名前は開発中のものです。2010/09/17(金) 17:06:15ID:sYa04YS8

|          ゴロゴロゴロゴロ
|r'⌒X⌒X⌒X⌒X⌒X⌒ヽ ⊂゙⌒゙、∩
|ヽ__乂__乂__乂__乂__乂__ノ  ⊂(。Д。) ←CPU
0631名前は開発中のものです。2010/09/17(金) 17:06:19ID:AmJCQRbx
>>621
なんだw
ただの釣だったのかよww

説明できないなら、
適当なこと言うなよな・・。
0632名前は開発中のものです。2010/09/17(金) 17:07:30ID:7qBxF+Sk
>>631
じゃー説明して正しかったらお前が無知だと認めるか?
ここでそう思ってるのはお前だけだぞ
0633名前は開発中のものです。2010/09/17(金) 17:09:19ID:AmJCQRbx
>>627
うん。

6と7の間に、
メモリのシステム領域を使用してますね。

システム領域は、
システム自体が利用する領域のことです。
0634名前は開発中のものです。2010/09/17(金) 17:10:01ID:sYa04YS8
>>633
また変な解釈する…
日本語読めないの?在日?
0635名前は開発中のものです。2010/09/17(金) 17:10:02ID:b92kLMfZ
>>631
教えてあげるから>>632にごめんなさいしてね


分かりやすい例を示すと、

#define hoge 100
int hige=hoge;

ってプログラムなら、コンパイルするときに、

int hige=100;

に翻訳されてからコンパイルされる。
つまり、defineは、君のいうプログラム実行の流れの2の前に実行されるんだよ
0636名前は開発中のものです。2010/09/17(金) 17:12:01ID:7qBxF+Sk
>>633
そういう意味じゃねーw
>>624の突っ込みどころは
コンパイルから実行までをつなげて書いてるところだよ
基本的にコンパイルといわれる作業は実行ファイルを作るところまで
その後それを実行することで結果を確認するんだよ
0637名前は開発中のものです。2010/09/17(金) 17:18:49ID:cJXoUaD/
#define SAFE_DELETE(p) if ( (p) != NULL ) { delete (p); (p) = NULL; }
↑これなんかは#defineと定数が全く無関係なのを説明するのに良い例だと思うんだよね。
0638名前は開発中のものです。2010/09/17(金) 17:20:19ID:sYa04YS8
>>637
千堂和樹がマクロ関数を理解できるわけないじゃん
0639名前は開発中のものです。2010/09/17(金) 17:24:00ID:6VFHKBQ3
プリプロセッサも知らないのにプログラミングが簡単とか仰るバカがいるのはこのスレですか?
0640名前は開発中のものです。2010/09/17(金) 17:24:34ID:cJXoUaD/
>>638
じゃあどうすりゃいいってんだ!
0641名前は開発中のものです。2010/09/17(金) 17:24:36ID:sYa04YS8
>>639
ようこそバカ隔離スレへ
0642名前は開発中のものです。2010/09/17(金) 17:24:49ID:AmJCQRbx
>>615
パソコンは電圧を変化して動いてるから、
どんなにパソコンが激しく動いても、
携帯電話のバイブレータ機能みたいに、
ブブブーンとは動かないよw

パソコンの基本は、1と0の数値です。
全て1と0で動いています。

スイッチオンで1、スイッチオフで0の状態。

電極には、+極と-極があって、
それを操作することでスイッチをオンしたりオフにしたりする。

ちなみに、この1と0の単位がビットであり、
2進数の一桁の単位です。
0643名前は開発中のものです。2010/09/17(金) 17:25:29ID:5/0uQ8SZ
>>636
>>1はゲームする度にコンパイルするんだから問題無い
0644名前は開発中のものです。2010/09/17(金) 17:28:19ID:sYa04YS8
>>640
それがわかれば苦労しないけどね…。
救いようないよ
0645名前は開発中のものです。2010/09/17(金) 17:28:28ID:7qBxF+Sk
>>643
それは驚きだ

必須環境:VC2010以上
ですねわかります
0646名前は開発中のものです。2010/09/17(金) 17:30:42ID:2BpkBEPJ
基本情報とか持ってるけどプログラム出来ないヤツに似てる
0647名前は開発中のものです。2010/09/17(金) 17:31:04ID:AmJCQRbx
片手で数を数える時、
5までしか数えられないと思うかもしれないけど、
工夫すれば、5以上も数えることが出来ます。

人差し指だけを立てて
他の指を閉じた状態を6にするとか。

そういう風に考えれば解りやすいかな?
0648名前は開発中のものです。2010/09/17(金) 17:31:51ID:sYa04YS8
>>646
その基本情報すら不十分という
0649名前は開発中のものです。2010/09/17(金) 17:32:05ID:cJXoUaD/
>>642
そうなのか。
また一つ勉強になりました。
ありがとうございます。
でも俺が目を離した隙に動いてる可能性もあるので一応机に縛っておきます。
0650名前は開発中のものです。2010/09/17(金) 17:35:59ID:cJXoUaD/
>>647
それはともかくこれで定数と#defineの違いはわかってもらえたかな?
0651名前は開発中のものです。2010/09/17(金) 17:39:04ID:AmJCQRbx
>>636
>基本的にコンパイルといわれる作業は実行ファイルを作るところまで

悪いけどそれは間違い。

全体を指してコンパイルと読んだりしますが、
実際は、翻訳するところだけがコンパイルです。

そんな基本的なことも解ってなかったのですか?

マジですか??
0652名前は開発中のものです。2010/09/17(金) 17:43:22ID:7qBxF+Sk
>>651
狭義のコンパイルの意味は知ってるよ
「基本的にコンパイルといわれる作業は」って言ってるだろ?
gccとかmakeとかVCでビルドとかするときはそれらすべてまとめて「コンパイルする」って呼ぶことが多いだろ?
そういう意味だよ
0653名前は開発中のものです。2010/09/17(金) 17:43:25ID:AmJCQRbx
まあいいや。
そんなことどうだってw

こんなコンピュータの構造なんて知らなくても、
ゲームプログラムは組めるし・・。
0654名前は開発中のものです。2010/09/17(金) 17:44:20ID:cJXoUaD/
>>651
まあコンパイル後にリンクやらがあってこそのビルドなわけだからそういう意味じゃ確かに言うとおりだわな。
しかしそんなに鬼の首を取ったように喜ばんでもええわw
0655名前は開発中のものです。2010/09/17(金) 17:44:20ID:b92kLMfZ
ごめんなさいはまだですか
ってか理解できなかったのかしら
0656名前は開発中のものです。2010/09/17(金) 17:45:52ID:7qBxF+Sk
>>653
んでプログラムに必要な知識である
定数とdefineの違いについてはわかったのかい?
0657名前は開発中のものです。2010/09/17(金) 17:45:56ID:cJXoUaD/
>>653
そうだよ本題は定数と#defineの話。
あれでだいたいわかった?
0658名前は開発中のものです。2010/09/17(金) 17:46:05ID:sYa04YS8
自分の知らないからって流さなくてもいいだろ
0659名前は開発中のものです。2010/09/17(金) 17:46:07ID:AmJCQRbx
よし。
では、次は、列挙体と列挙型の解説を書くことにしよう。

ここまでくれば、あともう少しですね(^^
06606582010/09/17(金) 17:47:16ID:sYa04YS8
やばい。やめるボタンと間違って投稿しちまった。
0661名前は開発中のものです。2010/09/17(金) 17:47:44ID:AmJCQRbx
列挙体や列挙型にも
定数を使うんだけど、
少しだけ意味が違うんだな。(^^
0662名前は開発中のものです。2010/09/17(金) 17:48:57ID:sYa04YS8
またそうやって、理解できてないのに先へ進む…
>>1を止められるのは>>1のかーちゃんだけか
0663名前は開発中のものです。2010/09/17(金) 17:51:28ID:cJXoUaD/
>>659
>では、次は、列挙体と列挙型の解説を書くことにしよう。
オイ!!
その前にだよ!その前に定数と#define!
こっちを先に片づけてから先に行こうよ
0664名前は開発中のものです。2010/09/17(金) 17:51:29ID:b92kLMfZ
>>653
これがメモリの仕組みとか言ってた人間の発言である
0665名前は開発中のものです。2010/09/17(金) 18:00:38ID:AmJCQRbx
>>663
俺はもう十分解説してるでしょ。

定数を使う時は、
マクロ名を付けて
そのデータをメモリに格納されると。


解説できていないのは、
上の発言者の方です。

解説できないところを見ると、
「やっぱ釣だったのか・・」と俺は理解できた。


俺の質問は、

#define A 10

こんな風に定数を宣言した時、
「10という数値」はどこに運ばれるのか?ということです。

俺は「メモリに運ばれる」とはっきり言っている。

論点はここ。
0666名前は開発中のものです。2010/09/17(金) 18:02:28ID:2BpkBEPJ
>>653
前にメモリの仕組みとかドヤ顔で言ってたじゃねーか
0667名前は開発中のものです。2010/09/17(金) 18:03:01ID:sYa04YS8
救いようねーな
0668名前は開発中のものです。2010/09/17(金) 18:10:29ID:AmJCQRbx
>>667
何言ってやがるw


プログラムを実行しているのだから、
変数だろうか定数だろうか、
そこに書かれているデータをまずどこかに運ばないと動かないでしょ。

そんなの常識でしょ?

俺はそんな基本的なことを言っている。

#define A 10

こんな風に書いたら、実際には「10」は関数内で呼び出されて使うんだけど、
俺が言っているのは、呼び出す前の状態です。

10 → □

こんな感じに□←の入れ物に「10」が入る。

この、□の「場所」を言ってるの。


だ か ら メ モ リ で し ょ ?

と俺は言ってる。

間違ったことは言ってないと思うのだが。
0669名前は開発中のものです。2010/09/17(金) 18:10:48ID:7qBxF+Sk
じゃー説明してやるからちょっと待て
ついでだから今日の書き込み分全部訂正してやるよ

俺も完全に理解してるわけじゃないから間違ってたらすまんな
適当に補足してくれ<ALL
でもお前よりはきっちり理解してるってのは明白だがな
0670名前は開発中のものです。2010/09/17(金) 18:15:15ID:sYa04YS8
>>668
#defineはプリプロセッサ命令なんだよ。

#define A 10
としたら、コンパイル前にプログラム中の A がすべて 10 に置き換えられる。

int A = 10;
とは意味がまったく違う
0671名前は開発中のものです。2010/09/17(金) 18:17:01ID:7qBxF+Sk
http://jbbs.livedoor.jp/bbs/read.cgi/otaku/14006/1283905908/8
ほい
こっちのスレ汚すのもあれだから向こうに書いてきたよ
0672名前は開発中のものです。2010/09/17(金) 18:17:28ID:b92kLMfZ
>>668
入 れ 物 に は 入 れ ま せ ん

#define A 10
ってのは、「Aって書いてある部分をみんな10に書き換えてからコンパイルしてね〜」っていう
コンパイラ宛のメモ。
0673名前は開発中のものです。2010/09/17(金) 18:20:39ID:AmJCQRbx
>>672
ほら見ろ。メモリを使ってるじゃないかよ。

プログラムは何もかもメモリに運ばれて動いているのだから、
その時に、「10も含めて」メモリに運ばれているじゃないか。
0674名前は開発中のものです。2010/09/17(金) 18:20:50ID:cJXoUaD/
>>665

>#define A 10

>こんな風に定数を宣言した時

早い話がこの文章がもう間違ってるわけだ
これはそもそも定数宣言じゃありません。
0675名前は開発中のものです。2010/09/17(金) 18:23:12ID:AmJCQRbx
訂正
>>673>>671宛ての返事
0676名前は開発中のものです。2010/09/17(金) 18:23:33ID:cJXoUaD/
>>673
いや、そうとも限らんぞ。
例えばソースに
#define A 10
を定義しておきながら結局Aを一度も用いなかった場合。
この場合は「10がメモリに運ばれることは一度たりとも無い」
0677名前は開発中のものです。2010/09/17(金) 18:26:01ID:+iJDRTKb
ちょっと聞きたいんだが>>1よ。

C言語を勉強するのに使った参考書を、教えてはもらえないだろうか?
参考にさせてもらいたい。
0678名前は開発中のものです。2010/09/17(金) 18:26:01ID:7qBxF+Sk
>>673
コード領域に格納されるのは自明だからあえて言及しないのが普通じゃないのか?
メモリに確保するって言うのは、コード領域以外の場所を使うってことだろ

あと俺が「しいて言うならコード領域」って回答したのわかって
「ほら見ろ」
とか言ってるんですか?
0679名前は開発中のものです。2010/09/17(金) 18:26:45ID:b92kLMfZ
>>673
あえていうなら、コンパイル時のみはメモリを使う。
でも生成された実行ファイルはそれによってメモリを使うことはないのよ。
すでに書き換えられてるから
0680名前は開発中のものです。2010/09/17(金) 18:27:56ID:b92kLMfZ
って私へのレスじゃなかったのね
0681名前は開発中のものです。2010/09/17(金) 18:28:05ID:AmJCQRbx
>>674
じゃあ、マクロって言えば満足?

ちょっとググってみたけど、
どこの定数の解説で

#define A 10

こんな感じで解説してるけどなぁ・・。

じゃあ、あれは全部間違った解説なのね?ww

ははwそんなバカなwww


だから釣だったんでしょ?(^^
0682名前は開発中のものです。2010/09/17(金) 18:28:53ID:7qBxF+Sk
>>681
>もちろん定数として使うことも出来るが
0683名前は開発中のものです。2010/09/17(金) 18:31:06ID:b92kLMfZ
>>681
「define=定数」ってことじゃなくて、
「define=マクロ機能」で、マクロ機能で定数を実装することもできる、ってこと
0684名前は開発中のものです。2010/09/17(金) 18:32:12ID:AmJCQRbx
#define A 10

こんな感じに書いた場合

定数Aは数値10を表す
マクロ名Aは数値10を表す

という表現をします。

定数名といったりマクロ名と言ったりするけで、
言い方を変えているだけで、
二つとも同じ意味。

「マクロ名」と呼ぶ方が正確だと思うが。。
0685名前は開発中のものです。2010/09/17(金) 18:32:29ID:cJXoUaD/
>>668
ちなみにプリプロセッサの話だけじゃなくてソース内部で宣言された変数でも宣言だけされてその後一度も使われてないような奴はコンパイラの最適化オプションによっては最適化時にはじかれて

変数として宣言されてるのにメモリには一切乗らない

ってこともあるわけだ
0686名前は開発中のものです。2010/09/17(金) 18:32:59ID:+iJDRTKb
>>681
むしろお前のレスが全て釣りであって欲しいんだが・・・。

とりあえず、ゲーム制作の基本であるC言語を勉強するのに使った参考書を教えてくれないかな?
参考にしたいから。
0687名前は開発中のものです。2010/09/17(金) 18:46:34ID:AmJCQRbx
ちょっと不安になったので基本的なおさらいをします。


変数と定数は似たような名前だが、
意味が全く違う。


変数は代入して使います。
なので、計算結果を入れて、変数の中身を変えることが出来る。

int a = 0;
a = 1 +1;

こんな感じに書けば、最初は0だったものが2に変わる。


だが、定数は代入するのではなく「置き換える」という意味。
なので、変数みたいに、計算結果によって中身を変えることは出来ない。

#define A 10

こう書けば、Aは10という意味。

#define B 10
#define C 10
#define A B + C

つまりこう書けば、Aは20ではなく、B+Cという意味。

俺はこのように理解してるけど、
間違ってないよね?
0688名前は開発中のものです。2010/09/17(金) 18:46:35ID:sYa04YS8
>>684
#defineは定数以外の事にも使う
つまり定数名≠マクロ名
あくまで#define A 10が定数に使えるってだけ
0689名前は開発中のものです。2010/09/17(金) 18:48:31ID:cJXoUaD/
>>688
ありがとう・・・これでようやく>>637の書き込みが生きてくる
0690名前は開発中のものです。2010/09/17(金) 18:49:29ID:AmJCQRbx
#define A 10
#define A = 10 + 10

つまり、このようにAを10にしているのに、
次の行で、Aを20に変えることは出来ない。

これが定数の基本です。
0691名前は開発中のものです。2010/09/17(金) 18:50:12ID:7qBxF+Sk
>>684
じゃー定数なんて題付けずにdefineマクロの説明にしときゃよかったんだよ

このようにdefineマクロをつかって定数を表現できます

なら突っ込みは入らない

定数はマクロで文字列を格納する仕組みのことです

だと厳密には定数はconstって別の物があるんだから嘘を言うことになる
そしてdefineマクロにメモリは使わない
この2点において大嘘である

>>687
定数の意味は「数値が定まっていること」それだけだ
#define A B+C
は「定数」とは呼ばない
0692名前は開発中のものです。2010/09/17(金) 18:50:58ID:ZoVqC4Uv
無知晒すにしてももっと高度なとこで晒せよ
プリプロセスとか変数の初期化とか演算子とか
ゲームもDirectXも関係ない低レベルな間違い多すぎ
>>273とか始めて二日の素人でも間違わないだろ
0693名前は開発中のものです。2010/09/17(金) 18:55:23ID:AmJCQRbx
ちなみに、なぜ定数があるのかというと、
これは、プログラムを読みやすくするためにあります。

ゲームプログラムを組む場合は、
ソースの冒頭に定数をまとめて定義し、
あらゆるパラメーターを定義しておきます。

そうすることで、
定数の数値を変えるだけで主人公の動くスピードとか、
カメラ視点の動くスピードなどを設定を簡単に変えることが出来る。
0694名前は開発中のものです。2010/09/17(金) 18:56:03ID:sYa04YS8
マジックナンバーを減らせる
0695名前は開発中のものです。2010/09/17(金) 18:57:59ID:WmNVwv6S
そろそろ>>1はコテつけるかトリップつけろよ。だれがだれかわからなくなってきた
0696名前は開発中のものです。2010/09/17(金) 18:58:26ID:yG6pO8Eq
>>693
それ、定数の説明じゃなくて・・・
■ このスレッドは過去ログ倉庫に格納されています