没画完的画

喂马 劈柴 BBQ~
posts - 37, comments - 55, trackbacks - 0, articles - 0
  C++博客 ::  :: 新随笔 :: 联系 :: 聚合  :: 管理

#define 指令

Posted on 2008-09-14 16:56 没画完的画 阅读(208) 评论(0)  编辑 收藏 引用 所属分类: VC

1、字符串化(Stringizing Operator)

#

#define stringer( x ) printf( #x "\n" ) 
int main() 
{
    stringer( In quotes 
in the printf function call\n ); 
    stringer( 
"In quotes when printed to the screen"\n ); 
    stringer( 
"This: \" prints an escaped double quote" ); 
}
 

如此的定义在进行处理时将被转换为如下代码:
int main() 
{
    printf( 
"In quotes in the printf function call\n" "\n" ); 
    printf( 
"\"In quotes when printed to the screen\"\n" "\n" );
    printf( 
"\"This: \\\" prints an escaped double quote\"" "\n" );
}


程序运行结果如下:
In quotes 
in the printf function call 
"In quotes when printed to the screen" 
"This: \" prints an escaped double quotation mark" 


2、字符化(Charizing Operator)

#@

例子:#define makechar(x) #@x 

causes the statementa 
= makechar(b); 

这条语句将被扩展为 

= 'b';注意单引号字符不能使用这样的字符化。  

3、连接符(Token-Pasting Opertor)

##

#define paster( n ) printf( "token" #n " = %d", token##n ) int token9 = 9; 

如果一个数字作为此宏的参数调用的话, 

paster( 
9 ); 

宏被展开为 

printf( 
"token" "9" " = %d", token9 ); 

进而成为这样的语句:printf( 
"token9 = %d", token9 );  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理