• ベストアンサー

定数の定義方法 #define

いつもお世話になっております。 定数を定義したいのですが、 その数値が符号無し長整数の場合どのように 定義すれば宜しいのでしょうか。 符号有りの場合は特に指定しなくても宜しいのですか。 どうぞ宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

マクロ定数には型はないですが、プリプロセッサで解釈されるときに 型が問題になります。 X3010(CのJIS規格) §6.1.3.2では「整数定数の型はその値を 表現できる最初(int以上の小さい型から最初)の型とする」となってます。 だから#define A 1と書くと、解釈時にAの型はintになり、 intで表現できない数を書くとlong intになります。 その値を使って計算をすると、結果が異なってくる可能性があります。 (たとえば、long intだと桁あふれのしない計算が、intだとあふれるとか) その数値がunsigned long intであることが必要ならば、 数値の最後にULをつけることで型を指定できます。 #define A 1UL

crm
質問者

お礼

取り急ぎお礼を申し上げます。 どうもありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

#defineで定義するマクロ定数(記号定数)には型はありません。 ソースコードに   #define AA 1  a=AA; のように書くと、コンパイル時にプリプロセッサで  a=1; のように置換されるのです。 http://naruzo.cside1.com/html/online/ckouza/ckouza2.htm

crm
質問者

お礼

取り急ぎお礼を申し上げます。 どうもありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • defineで定数が置き換えられない?(C言語)

    #defineについて質問です。 #defineは、ソースコード内にこの文字を見つけたら、コンパイルする前にこの文字をこの定数に置き換えて、というプリプロセッサですよね?だから、printfで#defineで定義した定数を出力する場合で、変換指定が必要ない場合は #include <stdio.h> #define DEF 100 void main(){ printf("#defineで定義された定数はDEFです"); } でもいいと思うんです。ですがこのソースコードは間違いで、実行結果は #defineで定義された定数はDEFです(←置き換えられてない) となってしまします。プリプロセッサだけ実行しても、DEFは100に置き換えられずそのままです。printfで#defineで定義した定数を出力させたい場合は書式指定をしなければなりません。なぜ、このような場合は#defineで定義した定数は置き換えられないのでしょうか?回答よろしくお願いします。

  • C# 定数定義

    c#での定数定義についてですが、定数用のclassを定義したのですが この場合、定数を使用する各classで継承をしなくてはいけないですが、もっといいやり方等があれば教えてください。 public abstract class define { public const short NET_BUFF = 1024; } class testMain:define {     :     :

  • #defineの定数を文字列として読み込む

    #define A "xxx" #define B "yyy" と定義しておいて scanf("%s", str) で読み込んだ文字列strが "xxx"だった場合、"yyy"だった場合のように分岐したいのですが このとき if(str == "xxx") のように中身を指定するのではなく if(str == AA) のように定数で分岐させることってできますか? 上記のままではできませんが、何か特別な関数とかでできるのでしょうか?

  • #defineについて

    #define STATIC_ASSERT(expr) { \ char __STATIC_ASSERTION[(expr) ? 1 : -1]; \ (void)__STATIC_ASSERTION; \ } /* 符号付き整数の右シフトが算術シフトかどうか */ #define SHIFT_LEFT_SINGNED_USES_SAL \ (((signed int)0xffffffff >> 1) == 0xffffffff) /* 符号無し整数の右シフトが論理シフトかどうか */ #define SHIFT_LEFT_UNSIGNED_USES_SHL \ (((unsigned int)0xffffffff >> 1) == 0x7fffffff) とは一体どういう意味なのでしょうか? なぜ、ブロックの中にchar型が宣言されているのでしょうか? なぜ、(void)とキャストされているのでしょうか? できたらわかりやすくご教授よろしくお願いします。

  • Javaの定数の定義について、教えてください

    Android StudioでAndroidアプリを作っています。 使用言語はJavaです。 現在コーディングしている部分では定数を定義しているんですが、 例えば以下の3つの定数があるとして、 final HOGE = 1; final FOO = 2; final BAZ = 3; あとから、2つ目と3つ目の間に filnal BAR = 3; という違う定数を入れたいとします。 そうすると、 filnal BAZ = 4; に手動で数値をずらさないといけません。 定数の定義の数が膨大になっていて、非常に面倒なのです! これを回避するのに、最適な方法を教えてください。 ちなみに、スクリプト言語のHSPでは、 #enam HOGE = 1 #enum HOO #enum BAR #enum BAZ ・・・と、列挙していくだけで、自動的にコンパイラがインクリメントしてくれるので、プログラマが悩まなくても良いようになっているんですが。 同じことって、できますか? 調べた限りでは、C言語でも、似たような事ができるみたいですけど。 Javaでも可能でしょうか?

  • 定数って?実数・定数の使い分けって?

    こちら現在高校生です。 学校で整数、有理数の定義などはやりました。 ですが、定数の定義・意味・特徴がわかりません。 自分の中では定数=定まる数 つまりk:定数ならkは1個に定まるなどと勝手に考えています。このように、定数の性質・特徴たるものもわかりません。 あと、よく例題を見てみると「(k:定数)」や「(k:実数)」などと書いてありますがこの定数、実数の使い分けはどのようにするのでしょうか。 少々わかりづらい質問ですが、ご回答お願いします。

  • 定数等のオンコーディングについて

    いつもお世話になっております。 コーディングする時の注意点についてお聞きしたい事があります。 よく、「数字や文字列をそのままPGにオンコーディングせずに、 定数として定義してから使うように」と言われます。 なぜそうなのでしょうか? 以下の2つの観点から教えて頂けませんでしょうか? (1)数字や文字列など、定数にして使うことの利点 (2)何を定数にして、何を定数にせずそのまま使うのがよいのか 宜しくお願いします。

    • ベストアンサー
    • Java
  • 符号付きにすべきか、符号なしにすべきか

    変数の定義でとり得る値が1~100の場合の変数の定義は、  符号有り1バイトで定義する  符号無し1バイトで定義する どちらが、一般的なのでしょうか。 メモリをなるべく節約したいのですが、上記どちらも1バイトですし、1~100までなので符号ありでも定義して問題ないと思いますが、それ以外(処理速度等)で2つの定義の違いによるメリット/デメリット等はあるのでしょうか。

  • 定数の定義とかはできますか?

    こんにちは、HTMLやCSSで教えていただきたいことがあります。 いま、ウェブサイトを作っていて、コンテンツはほとんどできあがっているのですが、サイトのタイトルが決まりません。コンテンツ中の、テキストの随所に、自分のサイト名をたくさん参照する場合、あとでサイトのタイトルが正式に決定した時に、それらを全部探しだしてすべて直さないといけなくなります。 僕はたくさん文章を書くほうなので、ページがもう100ファイルくらいあり、あとで自分のサイト名のところを探すのは骨が折れます。 そこで、自分のサイト名を定数として(例えばsitename)値を格納しておいて、それを外部スタイルシートかなんかに定義するような方法はありませんでしょうか。 そうすれば、外部スタイルシートのsitenameの定義だけ直せば、全ての場所が一括して替えられるような気がするのですが...... ちなみにIE5でも表示できるサイトを目指しています。 もしなにかいい方法を知っていましたらぜひ教えてください。よろしくお願いします。

    • ベストアンサー
    • HTML
  • 定数配列の書き方

    VB6で定数を定義する場合は次の通りです。   Const strTest As String = "TEST" では、定数配列を定義する場合はどのように書けばいいのでしょう?   Const astrTest() As String = Array("A", "B", "C")      '→NG   Const astrTest(0 To 2) As String = Array("A", "B", "C")  '→NG いろいろな書き方を試して見たのですが、上記のような書き方でも文法的にエラーになるようです。 どのように書けばいいのでしょうか? それとも定数を配列で定義するのは無理なんでしょうか?