Sun Studio 12:C 用户指南

6.5.5 使用字符串


注 –

在 ISO C 中,如果您使用 -xtransition 选项,则以下带有 ? 标记的示例将生成警告。仅在转换模式(–Xt-Xs)下,结果才与以前版本的 C 相同。


在 K&R C 中,以下代码生成字符串文字 "x y!"


#define str(a) "a!"   ?
str(x y)

因此,预处理程序在字符串文字和字符常量中查找看起来类似宏参数的字符。ISO C 认识到此功能的重要性,但不允许对部分标记的操作。在 ISO C 中,以上宏的所有调用均生成字符串文字 "a!"。为在 ISO C 中实现旧效果,我们使用 # 宏替换操作符和字符串文字并置。


#define str(a) #a "!"
str(x y)

以上代码生成两个字符串文字 "x y""!",它们在并置后生成相同的 "x y!"

不直接替换字符常量的类似操作。此功能的主要用法与以下类似:


#define CNTL(ch) (037 & ’ch’)    ?
CNTL(L)

它生成


(037 & ’L’)

求值为 ASCII control-L 字符。我们知道的最佳解决办法是将此宏的用法更改为:


#define CNTL(ch) (037 & (ch))
CNTL(’L’)

此代码的可读性和实用性更强,因为它还可以应用于表达式。