これは私が提案するものです:
#include <stdio.h>
#define TYPE int
#define TYPE_FORMAT "%d"
int main()
{
TYPE x=3;
printf("Value of x is: " TYPE_FORMAT "\n", x);
return 0;
}
C で型を自動検出する方法はありませんprintf()
。C++ では、オーバーロードされた<<
演算子を使用できます。これは型を自動的に把握しますが、C にはそのようなものはありません。
ただし#define
、型だけでなく形式も指定できます。複数の文字列リテラルを並べて配置すると、C コンパイラはそれらを単一の文字列定数に自動マージします。
PSタイプに使用する代わりに、#define
おそらく次typedef
のように使用する必要があります。
typedef int TYPE;
これは、デバッガーでは、変数x
が typeTYPE
である#define
ことがわかりますが、 では type として表示されることを意味しますint
。
そして完璧な世界では、フォーマット文字列を次のように宣言します。
static char const * const TYPE_FORMAT = "%d";
しかし、私たちは完璧な世界に住んでいるわけではありません。に対して上記の宣言を行う場合TYPE_FORMAT
、コンパイラはおそらく、文字列を他の文字列リテラルとマージするほど賢くありません。(GCC で試してみたところ、予想どおりエラー メッセージが表示されました。) したがって、TYPE_FORMAT
絶対に #define を使用する必要があります。
要約:typedef
タイプには を使用しますが#define
、フォーマットには を使用します。