1、2重比較を注意しましょう。
例:
#define isalpha(s) if((s) > 'a' && (s) < 'Z')
isalpha(*s++);
結果は?
2、C言語アスキー文字コード判別ライブラリの実装例
インデックス 0 0x32 0x7b
_ctype+1[]
+---+-------+----+-------+----+---+---+---+
|0--|-------|0x01|.......|0x02|...|...|...|
+---+-------+----+-------+----+---+---+---+
文字コード EOF 'A' ↑ 'z'
|
|
各ビットの定義
8 7 6 5 4 3 2 1 0
+-----+-----+-----+-----+-----+-----+-----+-----+
|-----|-----|-----|-----|-----|0-9 |a-z |A-Z |
+-----+-----+-----+-----+-----+-----+-----+-----+
3、文字列処理の落とし穴
例:
#define debug(s) sprintf("message is %s", s)
debug(message[0]);
結果は:sprintf("message is %message[0]", message[0]);
4、文字列処理記号”#”と”##”
# は、引数を文字列に変換する。
#define string(x) #x
string(Hello World)
"Hello World"
## は二つの識別子を連結させる。
#define comb(x, y) x ## y
comb(hello, world)
helloworld
0 件のコメント:
コメントを投稿