C言語についての質問です。 #defineで宣言した変数は、 どのようなデータ型になるのでしょう? 思うような値が出ずに、printf文を使って中身を確認したいのですが、 %dなのか%lfなのか、混乱してしまいました。

C言語関連73,172閲覧xmlns="http://www.w3.org/2000/svg">25

1人が共感しています

ベストアンサー

5

5人がナイス!しています

ThanksImg質問者からのお礼コメント

defineは置き換えなのですね… 無知をさらしてしまいました。 みなさん、丁寧な解答をありがとうございます! 任意のデータ型にされることがわかりやすかったので khurataさんの解答をBAにしたいと思います。 皆様、ご回答ありがとうございました!

お礼日時:2013/1/21 20:15

その他の回答(4件)

1

defineは変数じゃありません。単純にソースコードを置き変えるだけです。 例えば #define HELLO printf("hello"); int main(){ HELLO return 0; } こんなのでもコンパイルが通ります。 データ型は、例えば「1」と書いたらint型に、「1.0」と書いたらdouble型になりますが、 #defineは置き換えるだけなので、そういうコンパイラの自動的な判断で決まります。 というわけでデータ型とかを厳密なものにしたければ、constでも使いましょう。

1人がナイス!しています

0

#include <stdio.h> #define C 'A' #define S "string" #define I 123 #define F 12.3 main() { printf("C = %c or %d or %p or %x\nS = %d or %s or %p or %x\nI = %d\nF = %e or %f or %g\n",C,C,C,C,S,S,S,S,I,F,F,F); }

1

#define は、変数ではないので、printf の対象には、成り得ません。 #define print display という定義ならば、 print と書けば、display と見なして展開され、 文字列が、置き換えられてから、コンパイルされます。 コンパイルに入る前の、前処理、 プリプロセッサ―が、この文字列の置き換えを行うもので、 この作業を完了してから、コンパイラーが、実行されます。 つまり、 #define value n と書いて、 int n ; printf ( "%d", value ) ; と書けば、 printf ( "%d", n ) ; ということです。 ※ 無機的に、文字列が、置き換えられるだけのことです。

1人がナイス!しています

1

defineはコンパイル前に文字が置き換わるだけの機能です。 #define VAL = 1 << 8; のように計算式を書くことができます。 if( data < VAL) が if( data < 1 << 8) のように展開出来ます。 ですので1とやればintですし、2.2はfloat、 1+1 は 1+1になります。 注意として #define ADD 1+1 val = ADD * 2: は4ではなく 3になります。 これはコンパイルする前(計算する前)に展開しているからです。

1人がナイス!しています