Chinaunix

标题: define中的#问题. [打印本页]

作者: dianlongliu    时间: 2008-06-15 08:40
标题: define中的#问题.
今天再APUE看见


  1. #define   doit(name)   pr_limits(#name,name)

  2. static void  pr_limits(char * ,int)/*函数定义*/

复制代码


上边pr_limits中的name前面加了个#是什么意思??

是不是加个#就变成了char类型的??
作者: gawk    时间: 2008-06-15 12:26
引用操作符(#)是一元的,后跟一个形参作为运算对象,它的作用是将该运算对象替换为带引号的字符串。
作者: 77h2_eleven    时间: 2008-06-15 17:25
把参数放到双引号中,即常量字符串。
作者: c/unix    时间: 2008-06-15 19:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: dianlongliu    时间: 2008-06-15 22:09
原帖由 c/unix 于 2008-6-15 19:32 发表
宏定义中的#表示将其变为字符串。如:
#include  
#include
   
#define STRCPY(a, b)     strcpy(a ##_p, #b)
int main()
{
char arrr_p[]="abcdefg";
char *b = "123456";
STRCPY(arrr, b);  ...


a ,##,_p
代表什么意思?
怎么我运行之后的arrr_p的结果是b\000cdefg呢?
作者: ruoyisiyu    时间: 2008-06-15 22:20
##连接符。如a##b相当于ab
作者: dianlongliu    时间: 2008-06-15 22:28
a ,##,_p
代表什么意思?// 是连接2个字符串.
怎么我运行之后的arrr_p的结果是b\000cdefg呢?/*这个问题呢?运行之后结果很令人不解.*/
作者: mafiaguy    时间: 2008-06-18 09:22
我一样的操作结果是正确的




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2