• ベストアンサー

#defineの初歩的な質問

今c言語を勉強しているのですが #define TEST(tid)tid,#tid これはどういう意味なのでしょうか。 宜しくお願いします。

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★使い方? >#define TEST(tid)tid,#tid  本当にこの順序ですか?  私なら  #define TEST(tid)#tid,tid  と定義して  printf( "%s=%d\n", TEST(value) );  として使います。すると  printf( "%s=%d\n", "value", value );  となって  『value=123』  とvalue変数の値を表示します。 ・でももっと良い方法としては  #define debugValue(n) printf(#n " = %d\n",n)  #define debugString(s) printf(#s " = %s\n",s)  として  debugValue( value );  debugString( string );  とすれば整数値、文字列を変数名付きで表示してくれます。  このようなマクロを記述するときに活用できます。 ・詳しい内容はテキスト本を確認するか、  回答者No.1さんのリンクを参考にして下さい。

oeppu08
質問者

お礼

ご回答ありがとうございます。 使用例等詳細に記載していただきとても理解できました。 ありがとうございました。

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

その他の回答 (1)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

#define での # は文字列化演算子で引数が文字列として展開されます。 なので、その定義だと  TEST(123) は  123,"123" と展開されます。 [参考] C言語のプリプロセスのメモ(Hishidama's C pre-process Memo) http://www.ne.jp/asahi/hishidama/home/tech/c/preproc.html # 文字列化演算子ってあんまり初歩的じゃない気がする。

oeppu08
質問者

お礼

回答ありがとうございます。 参考のリンクにいろいろ記載されておりとても役に立ちました。 ありがとうございました。

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

関連するQ&A

  • #defineで置き換えられない

    C言語です。詳しい方、よろしくお願いします。 下記のプログラムをコンパイルして実行したら、画像のようになってしまいます。 コンパイラは、CPad for LSI C-86 ver2.31です。 #include<stdio.h> #define clr() printf("\x1b[2J") void main(void) { while(1){ clr(); printf("test"); } } #defineがどうも置き換えられていないようです。 詳しい方、考えられる原因を教えてください。 よろしくお願いします。

  • ・Javaで、C言語の#defineに相当するもの

    ・Javaで、C言語の#defineに相当するもの 今までC/C++を使い込んできて、最近Javaの勉強を始めました。 C言語では条件分岐に使う定数を指定するのに#defineをよく使用していたのですが、Javaにもそれに相当するものはあるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • #defineについて、教えて下さい。

    Cの、プログラムを勉強中なのですが、 #define SSS(x,y) ((x) > (y) ? (x) : (y)) は、どういう意味なのでしょうか? 教えて下さい。よろしくお願いします。

  • #defineとconstについて

    C/C++言語では、#defineの他にconstが定数として使えるようになりましたが、今後どちらに統一するか悩んでいます。 constにする利点、欠点や#defineにする利点や欠点など、コーデイングのプロにお聞きしたいです。

  • C言語 #defineについて

    C言語でどの様に考えれば良いか分からない事があるので、教えて下さい。 以下の様な行が出てきたのですが、どういう意味なのでしょうか? #define SYSTEM (*(volatile struct st_system *)0x80000) 現状分かっている事は 1.#define ABC 100   ならこれ以降で出てくるABCは100と読み替える。 2.volatileはコンパイラの最適化を抑制する様な意味。 とい事です。 以上、宜しくお願い致します。

  • c言語で言うところの #define

    スミマセン。教えていただきたいことがあります。 c言語はいくらか経験あるのですが、visual basic 2005 はまったくの初心者です。 visual basic には c言語で言うところの定義マクロプリプロセッサ#define の様な機能はあるのでしょうか? 無い場合、どんな感じで代用していますか? よろしくお願いします。

  • すみません。C言語にある#define文、sizeof演算子、gets

    すみません。C言語にある#define文、sizeof演算子、gets文の用語の意味が分からないので、教えてくれませんか?

  • Verilog_HDLでのdefineとifdef

    yahooやgoogleで念入りに調べたつもりですが、自分の求めているようなHPは見つからなかったので、こちらの掲示板に記載させて頂きます。 すみませんが、誰かVerilog_HDLに詳しい方ご教授願いますでしょうか。 (1)「define」と「parameter」の用途の違いについて。 (2)「`ifdef」文と「if」文の用途の違いについて。 (3)「ifdef」の"def"は「define」の意味でしょうか。 -「define」の意の場合、「`ifdef <define_name>」のように<>の記述はdefineで定義された変数しか使用できないのでしょうか。 (4)下記例のように"test1/2"に定義値を持たせない場合は、どのようにして"test1/2"に値をアサインすれば宜しいのでしょうか。 サンプル記述例) `define test1 //定義値なしのdefine `define test2 `ifdef test1 //test1を真・偽させたい。 ------ `elsif test2 //test2を真・偽させたい。 ------ `endif (5)「ifdef」や「task」は、合成目的ではないテストベンチ等に使用するものと思っていましたが、「ifdef」や「task」を用いて組み合わせ回路等を開発したりするのでしょうか。 以上です。 すみませんが何方か宜しくお願いします。

  • Eclipseにてdefineが使えない

    Eclipse3.7を用いて、C言語のプログラムを作成中ですが、defineが使えません。 例えば -------------------- #include <stdio.h> #define LENG 5; int main() {   char name[LENG];   return 0; } -------------------- 上記のソースですと、"char name[LENG]"の部分がエラーとなります。 エラー内容は"syntax error before ';' token"です。 Eclipseの設定を変えれば直るのでしょうか。ご教示ください。

  • #defineの使い方

    お世話になります。 C#で質問があります。 #defineでシンボルを定義しておいて、 複数の別のファイルから、#ifでコンパイルを切り替えたいのですが、どのようにすれば可能でしょうか? C++の場合は、#includeで出来たと思うのですが・・ よろしくお願いいたします。