アーカイブ

‘C言語’ タグのついている投稿

[Cプリプロセッサ] マクロ引数の文字列化

2010 年 5 月 28 日 コメントはありません

C言語のプリプロセッサにおいて、引数付きマクロの引数を文字列化したいときがある。

たとえば、

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)

参考
The C Preprocessor

カテゴリー: コンピュータ タグ: , ,

[C] gets、 fgetsの改行文字の処理

2009 年 11 月 17 日 コメントはありません

stdio.hの

getsは読み込んだ改行文字をヌル文字に変える。

fgetsは読み込んだ文字列の後ろにヌル文字を加える。
(したがって改行文字は残る。)

よく忘れる。

fgetsは行の途中で切れる場合があるので改行文字付きかどうか通知する必要がある、と覚えればよい。

カテゴリー: コンピュータ タグ: , , ,

ゆの in C

2008 年 7 月 13 日 コメント 1 件

ゆの in languageをC言語でやろうと考えたわけですが、
まず、2バイト文字は識別子に出来ないので無理、
あと、コロンをどうしていいのか分からないので無理。
けれど、ゆの in ニコスクリプトゆの in Java
などを見るとそのあたりはごにょごにょしているかんじなので。

 X / _ / X < "来週も見てくださいね!"

ということであれば、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#define X 1
#define _ ubar()
 
int ubar(void)
{
    printf("ひだまりスケッチx365 来週も見てくださいね!");
    return 1;
}
 
int main(void)
{
    X / _ / X < "来週も見てくださいね"
    ;
    return 0;
}

ということで一応できるわけです。
整数型とポインタの比較をしているので当然警告が出ますが……。