ページ 1 / 1
コードの意味が分からない
Posted: 2011年4月11日(月) 23:09
by lib
#defineというCの表記を覚えたのですが説明を見ると
「#define MAX 10と表記するとMAXは10に置換されます」
と書いてありました ・・・これって変数でやるのと何か違うのですかね?(x=10って書けばいいような)
それとサンプルプログラミングの館の「林檎の落ちゲー(ミク編)」というゲームのソースに
「GLOBAL void operate_char();」や「#define PI2 (3.141592653589793*2)」
という表記がありますが検索しても全く知りたい情報がでてきません
心お優しい方、この二つはどういう意味か教えてください
Re: コードの意味が分からない
Posted: 2011年4月11日(月) 23:51
by ひよこ
これはdefineで書くことによって定数となって値を変更するときに便利です。
例 配列に便利です。
ソースは見てませんが
GLOBALはグローバルどこでも使える関数、PI2は弧度法で円一周をあらわしていると思います。
Re: コードの意味が分からない
Posted: 2011年4月12日(火) 00:33
by softya(ソフト屋)
まずコンパイルの流れをイメージしてもらうと良いと思います。
[ソースコード・ファイル]
↓
プリプロセッサ #で始まるプリプロセッサ命令を処理する。 #includeでインクルード #define の置き換えなど。
↓
[中間ソースコード・ファイル]
↓
コンパイラ コンパイルして中間オブジェクトコードを作り出します。
↓
[オブジェクト・ファイル]
↓
リンカ ここでC言語の標準ライブラリとオブジェクトがリンクされ実行ファイルが出来ます。
↓
[実行ファイル(exe)]
#defineはプリプロセッサで処理されるので、コンパイル時は既に置き換わっています。
「#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
Re: コードの意味が分からない
Posted: 2011年4月12日(火) 11:19
by 暇なプログラマ
>#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の意味をもう一度、調べて見ては・・