たとえば、
int variable = 1; DEBUG_PRINT(variable);
とすると、
printf("%s is %d", "variable", 1);
のように置換されるマクロを定義したい場合。
#define DEBUG_PRINT(x) printf("%s is %d", "x", 1)
としても、
printf("%s is %d", "x", 1);
と出力されてしまい、望む結果が得られない。
このようなときは、引数の文字列化機能を使用する。
引数名の先頭に`#’をつけることで、引数の文字列定数表現を得ることができる。
上の例の場合は次のようにする。
#define DEBUG_PRINT(x) printf("%s is %d", #x, x)]]>
getsは読み込んだ改行文字をヌル文字に変える。
fgetsは読み込んだ文字列の後ろにヌル文字を加える。
(したがって改行文字は残る。)
よく忘れる。
fgetsは行の途中で切れる場合があるので改行文字付きかどうか通知する必要がある、と覚えればよい。
]]>X / _ / X < "来週も見てくださいね!"
ということであれば、
#include
#define X 1
#define _ ubar()
int ubar(void)
{
printf("ひだまりスケッチx365 来週も見てくださいね!");
return 1;
}
int main(void)
{
X / _ / X < "来週も見てくださいね"
;
return 0;
}
ということで一応できるわけです。
整数型とポインタの比較をしているので当然警告が出ますが……。