#defineというCの表記を覚えたのですが説明を見ると
「#define MAX 10と表記するとMAXは10に置換されます」
と書いてありました ・・・これって変数でやるのと何か違うのですかね?(x=10って書けばいいような)
それとサンプルプログラミングの館の「林檎の落ちゲー(ミク編)」というゲームのソースに
「GLOBAL void operate_char();」や「#define PI2 (3.141592653589793*2)」
という表記がありますが検索しても全く知りたい情報がでてきません
心お優しい方、この二つはどういう意味か教えてください
コードの意味が分からない
Re: コードの意味が分からない
これはdefineで書くことによって定数となって値を変更するときに便利です。
例 配列に便利です。
ソースは見てませんが
GLOBALはグローバルどこでも使える関数、PI2は弧度法で円一周をあらわしていると思います。
例 配列に便利です。
ソースは見てませんが
GLOBALはグローバルどこでも使える関数、PI2は弧度法で円一周をあらわしていると思います。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: コードの意味が分からない
まずコンパイルの流れをイメージしてもらうと良いと思います。
「#define MAX 10」だとMAXと書かれたところは、すべて数字の10に置き換わります。これは確実です。
変数のx=10の場合は、変数が書き換えられる恐れがあるので信用が置けないのです。
「GLOBAL void operate_char();」はコンパイル時にGLOBALが置き換えられてextern void operate_char();などと書いたのとおなじになります。
「#define PI2 (3.141592653589793*2)」は、PI2 が(3.141592653589793*2)とカッコ付きで置き換えられます。なぜカッコが必要かはサイトをご紹介します。
参考。
「C言語編 第39章 マクロ」
http://www.geocities.jp/ky_webid/c/039.html
#defineはプリプロセッサで処理されるので、コンパイル時は既に置き換わっています。[ソースコード・ファイル]
↓
プリプロセッサ #で始まるプリプロセッサ命令を処理する。 #includeでインクルード #define の置き換えなど。
↓
[中間ソースコード・ファイル]
↓
コンパイラ コンパイルして中間オブジェクトコードを作り出します。
↓
[オブジェクト・ファイル]
↓
リンカ ここでC言語の標準ライブラリとオブジェクトがリンクされ実行ファイルが出来ます。
↓
[実行ファイル(exe)]
「#define MAX 10」だとMAXと書かれたところは、すべて数字の10に置き換わります。これは確実です。
変数のx=10の場合は、変数が書き換えられる恐れがあるので信用が置けないのです。
「GLOBAL void operate_char();」はコンパイル時にGLOBALが置き換えられてextern void operate_char();などと書いたのとおなじになります。
「#define PI2 (3.141592653589793*2)」は、PI2 が(3.141592653589793*2)とカッコ付きで置き換えられます。なぜカッコが必要かはサイトをご紹介します。
参考。
「C言語編 第39章 マクロ」
http://www.geocities.jp/ky_webid/c/039.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: コードの意味が分からない
>#defineというCの表記を覚えたのですが説明を見ると
>「#define MAX 10と表記するとMAXは10に置換されます」
>と書いてありました ・・・これって変数でやるのと何か違うのですかね?(x=10って書けばいいような)
(x=10って書けばいいような) その通りです。
ですが、ソースの規模が5万行、10万行と増えていきます。
x=12になった場合に
その5万行、10万行の中からx=10を探しだし、x=12に変更することは大変な作業だし、見落としなどがあります。
#define MAX 10
x = MAX と記入しておき
xを12に変更があるときに
#define MAX 12 ←に変更するだけで
x = MAX に12が入ります。
その5万行、10万行の中から全てx=12に変更になりm見落としがありません。
>「#define PI2 (3.141592653589793*2)」
「#define PI2 (3.141592653589793*2)」はマクロといい。
y= 3×P12 の式があるときに自動的に
y= 3×(3.141592653589793*2)になります。
#defineの意味をもう一度、調べて見ては・・
>「#define MAX 10と表記するとMAXは10に置換されます」
>と書いてありました ・・・これって変数でやるのと何か違うのですかね?(x=10って書けばいいような)
(x=10って書けばいいような) その通りです。
ですが、ソースの規模が5万行、10万行と増えていきます。
x=12になった場合に
その5万行、10万行の中からx=10を探しだし、x=12に変更することは大変な作業だし、見落としなどがあります。
#define MAX 10
x = MAX と記入しておき
xを12に変更があるときに
#define MAX 12 ←に変更するだけで
x = MAX に12が入ります。
その5万行、10万行の中から全てx=12に変更になりm見落としがありません。
>「#define PI2 (3.141592653589793*2)」
「#define PI2 (3.141592653589793*2)」はマクロといい。
y= 3×P12 の式があるときに自動的に
y= 3×(3.141592653589793*2)になります。
#defineの意味をもう一度、調べて見ては・・