QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2243|回复: 10

问一个基础问题。。。C/C++

[复制链接]
发表于 2009-12-14 20:24:39 | 显示全部楼层 |阅读模式
我不记得在哪里见过 ## 这样的使用方法

我学过C/C++, 但是我还没见过这种方法, 请问有谁见过?是什么意思?如何使用?

也就是 俩个 # 连在一起使用。。。
发表于 2009-12-14 20:41:34 | 显示全部楼层
字符串粘贴宏

#define JOIN(A,B) A##_is_not_##B
JOIN(xxx,yyy) 会被预处理为 xxx_is_not_yyy
回复

使用道具 举报

发表于 2009-12-14 22:12:41 | 显示全部楼层
给个实例?

在字符串中的宏不会被预处理,除了在字符串中用这个还可以在哪种情况用?
回复

使用道具 举报

发表于 2009-12-14 22:55:18 | 显示全部楼层
就是把两段字粘贴在一块,只能是预处理而已,并不能运行时连接的(如果要实现这个的话,个人觉得得用 c++ 的 template 和运算符重载),所有的字符都是在编译阶段都是可知的,省点写代码的功夫罢了。。一点意思也没有,用得太多会让代码变得很不可理解,比如 国际C语言混乱代码大赛 里的作品有些就是大量的 ## ................

A1##2     -->   A12
abc##345    -->   abc345
回复

使用道具 举报

发表于 2009-12-14 23:07:57 | 显示全部楼层

回复 4# nihui 的帖子

恩,都有印象,但是记不住了,学习了

是因为我的基础没打好呢,还是教育的问题,反思中......
回复

使用道具 举报

 楼主| 发表于 2009-12-15 17:28:49 | 显示全部楼层
原帖由 nihui 于 2009-12-14 22:55 发表
就是把两段字粘贴在一块,只能是预处理而已,并不能运行时连接的(如果要实现这个的话,个人觉得得用 c++ 的 template 和运算符重载),所有的字符都是在编译阶段都是可知的,省点写代码的功夫罢了。。一点意思也没有,用得太多会 ...

应该是乱码大赛的, 我不记得怎么用了
因为这个东西我一直没用过

PS:我IDE C++Free 3。5

运行如下代码:
  1. #include<stdio.h>
  2. #define P##S printf("Hello\n")
  3. int main(void)
  4. {
  5.     PS;
  6. }
复制代码
发生一个错误:
[erro]:'##' at start of macro definition

[ 本帖最后由 福尔摩斯 于 2009-12-15 17:42 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-12-15 18:04:19 | 显示全部楼层
另:C语言乱码大赛经典之作
  1. #include <stdio.h>
  2. char *a;main(int t,int _,char* a){return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
  3. main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?
  4. main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,
  5. "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
  6. :t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1)
  7. :0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,
  8. "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}
复制代码
这里的## 不是在预处理里的。。。
回复

使用道具 举报

whistler_wmz 该用户已被删除
发表于 2009-12-15 19:05:38 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

whistler_wmz 该用户已被删除
发表于 2009-12-15 19:06:27 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

whistler_wmz 该用户已被删除
发表于 2009-12-15 19:06:48 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2009-12-15 19:18:34 | 显示全部楼层
原帖由 whistler_wmz 于 2009-12-15 19:05 发表
2 楼正解

能不能给出一个具体代码。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-3-29 16:45 , Processed in 0.067069 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表