免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6112 | 回复: 12
打印 上一主题 下一主题

[C] 宏定义问题咨询 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-26 09:41 |只看该作者 |倒序浏览
代码如下:
  1. #define MAX_NUM 24
  2. #define NUM_STR(num) #num

  3. int main(int argc, char *argv[])
  4. {                                                                                                                        
  5.     int i = 0;
  6.     //memset(&i, 0xff, sizeof(1) );


  7.     printf("---------[%d] [%s] -------------\n",
  8.             MAX_NUM, NUM_STR(MAX_NUM) );

  9.     return 0;
  10. }
复制代码
打印如下:
$ cc test.c && ./a.out
---------[24] [MAX_NUM] -------------

可是我想打印字符串"24"啊,  网上搜索了很多都没有找到解决办法,  大牛帮忙看看有好办法解决吗?

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2013-07-26 10:01 |只看该作者
  1. #include <stdio.h>

  2. #define MAX_NUM 24
  3. #define NUM_STR(num) #num
  4. #define FUCK(num) NUM_STR(num)

  5. int main(int argc, char *argv[])
  6. {                                                                                                                        
  7.     printf("---------[%d] [%s] -------------\n", MAX_NUM, FUCK(MAX_NUM) );

  8.     return 0;
  9. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-07-31 14:07 |只看该作者
回复 2# bruceteen

如果宏是由前面两个宏运算出来的, 就出问题了
  1. #include <stdio.h>


  2. #define MAX_STANDARD_NUM 24
  3. #define MAX_EXTENDED_NUM 12

  4. //#define MAX_NUM 24
  5. #define MAX_NUM (MAX_STANDARD_NUM+MAX_EXTENDED_NUM)                                                                          
  6. #define NUM_STR(num) #num
  7. #define FUCK(num) NUM_STR(num)

  8. int main(int argc, char *argv[])
  9. {                                                                             
  10.     printf("---------[%d] [%s] -------------\n", MAX_NUM, FUCK(MAX_NUM) );

  11.     return 0;
  12. }
复制代码
  1. $ cc test.c && ./a.out
  2. ---------[36] [(24+12)] -------------
复制代码
有试了n种方法貌似不行, 大侠有好办法吗?

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
4 [报告]
发表于 2013-07-31 14:52 |只看该作者
没有(当然也不是绝对没有,只是我怕写出来,你说我代码变态^_^),因为宏只是字符级的替换,它不认为可以将24+12变为36。

论坛徽章:
0
5 [报告]
发表于 2013-07-31 14:59 |只看该作者
回复 4# bruceteen


    如果有的话, 写出来看看, 管它变态不变态.

    {:2_168:}

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
6 [报告]
发表于 2013-07-31 15:06 |只看该作者
回复 4# bruceteen


    赶紧写吧,我是来围观变态写法的....

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
7 [报告]
发表于 2013-07-31 15:14 |只看该作者
刚回来。好吧,贴
  1. #include <stdio.h>

  2. #define A 24
  3. #define B 12

  4. #if A+B == 1
  5.     #define MAX_NUM 1
  6. #elif A+B == 2
  7.     #define MAX_NUM 2
  8. #elif A+B == 3
  9.     #define MAX_NUM 3
  10. // ……
  11. #elif A+B == 36
  12.     #define MAX_NUM 36
  13. // ……
  14. #endif

  15. #define NUM_STR(num) #num
  16. #define FUCK(num) NUM_STR(num)

  17. int main(int argc, char *argv[])
  18. {                                                                             
  19.     printf("---------[%d] [%s] -------------\n", MAX_NUM, FUCK(MAX_NUM) );

  20.     return 0;
  21. }
复制代码

论坛徽章:
0
8 [报告]
发表于 2013-07-31 15:25 |只看该作者
回复 7# bruceteen


    果然够变态, 霸气侧漏啊!~{:3_204:}

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
9 [报告]
发表于 2013-07-31 18:13 |只看该作者
本帖最后由 rover12421 于 2013-07-31 18:14 编辑

回复 7# bruceteen


    太BT了.

论坛徽章:
0
10 [报告]
发表于 2013-08-01 20:12 |只看该作者
根本不懂,过来学习、学习!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP