免费注册 查看新帖 |

Chinaunix

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

一个C问题 求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-31 09:55 |只看该作者 |倒序浏览
如下:

#define SECCLASS_PROCESS   0x00000100UL

void fuck(u32 arg1,...)
{

}

现在的问题是
SECCLASS_PROCESS传递给 fuck(SECCLASS_PROCESS,...) 函数
在fuck()中是看不到SECCLASS_PROCESS这个东西
只知道有arg1
现在我想通过传递的参数arg1
在fuck()中打印出“SECCLASS_PROCESS”这个字符串,
而不是SECCLASS_PROCESS的值
请问大仙们如何实现,或者是否已有这样的函数
先谢过!

论坛徽章:
0
2 [报告]
发表于 2010-08-31 10:01 |只看该作者
宏在编译后就替换掉了,如果你真的想要输出,你就在开个字符串,将宏的值和宏名进行映射就行了

论坛徽章:
0
3 [报告]
发表于 2010-08-31 10:06 |只看该作者
回复 2# daybreakcx


    能不能详细指点一下,谢谢

论坛徽章:
0
4 [报告]
发表于 2010-08-31 10:08 |只看该作者
比如你开个数组叫做name
char name[N][M]={......,"SECCLASS_PROCESS",......}这样,然后SECCLASS_PROCESS的位置坐标就是宏的数值,我是这个意思,你得到了0x100就printf("%s\n", name[arg1]);

论坛徽章:
0
5 [报告]
发表于 2010-08-31 10:16 |只看该作者
回复 4# daybreakcx


    谢谢。
我遇到问题就是它定义的数值有重复的,所以找不到原来宏名是哪个了
不然也懒得想来这个方法了
列一下它的定义
#define COMMON_IPC__CREATE                               0x00000001UL
#define COMMON_IPC__DESTROY                              0x00000002UL
#define COMMON_IPC__GETATTR                              0x00000004UL
#define COMMON_IPC__SETATTR                              0x00000008UL
#define COMMON_IPC__READ                                 0x00000010UL
#define COMMON_IPC__WRITE                                0x00000020UL
#define COMMON_IPC__ASSOCIATE                            0x00000040UL
#define COMMON_IPC__UNIX_READ                            0x00000080UL
#define COMMON_IPC__UNIX_WRITE                           0x00000100UL
#define FILESYSTEM__MOUNT                         0x00000001UL
#define FILESYSTEM__REMOUNT                       0x00000002UL
#define FILESYSTEM__UNMOUNT                       0x00000004UL
#define FILESYSTEM__GETATTR                       0x00000008UL
#define FILESYSTEM__RELABELFROM                   0x00000010UL
#define FILESYSTEM__RELABELTO                     0x00000020UL
#define FILESYSTEM__TRANSITION                    0x00000040UL
#define FILESYSTEM__ASSOCIATE                     0x00000080UL
#define FILESYSTEM__QUOTAMOD                      0x00000100UL
#define FILESYSTEM__QUOTAGET                      0x00000200UL
#define DIR__IOCTL                                0x00000001UL
#define DIR__READ                                 0x00000002UL
#define DIR__WRITE                                0x00000004UL
#define DIR__CREATE                               0x00000008UL
#define DIR__GETATTR                              0x00000010UL
#define DIR__SETATTR                              0x00000020UL
#define DIR__LOCK                                 0x00000040UL
#define DIR__RELABELFROM                          0x00000080UL
#define DIR__RELABELTO                            0x00000100UL
#define DIR__APPEND                               0x00000200UL
#define DIR__UNLINK                               0x00000400UL
#define DIR__LINK                                 0x00000800UL
#define DIR__RENAME                               0x00001000UL
#define DIR__EXECUTE                              0x00002000UL
#define DIR__SWAPON                               0x00004000UL
#define DIR__QUOTAON                              0x00008000UL
#define DIR__MOUNTON                              0x00010000UL
#define DIR__ADD_NAME                             0x00020000UL

论坛徽章:
0
6 [报告]
发表于 2010-08-31 10:27 |只看该作者
额,根据传入的数值无法区分对应的宏,那么对应到具体的宏名也就无从谈起了,除非你加参数

论坛徽章:
0
7 [报告]
发表于 2010-08-31 12:50 |只看该作者
编译阶段宏就被替换掉了。。。

论坛徽章:
0
8 [报告]
发表于 2010-08-31 13:33 |只看该作者
回复 1# kitifaye
  1. #include <stdio.h>

  2. #define SECCLASS_PROCESS 0

  3. #define pmaco(x) p(x, #x)
  4. void p(int x, const char *s)
  5. {
  6.     printf("%d, %s", x, s);
  7. }

  8. int main()
  9. {
  10.     pmaco(SECCLASS_PROCESS);
  11.     return 0;
  12. }
复制代码
要这样的结果吗?

我喜欢四楼的方法。缺点是,如果数字比较大,不好实现值-名称映射。

论坛徽章:
0
9 [报告]
发表于 2010-08-31 14:05 |只看该作者
本帖最后由 kitifaye 于 2010-08-31 14:13 编辑

回复 8# zzyong08

谢谢您的方法,

你这里是将定义的宏名直接传递给一个宏函数
是能得出来的
如果是传递给一个函数话
在函数里不知道怎么打印出来


四楼确实好方法,但是有重复值的时候不好解决

论坛徽章:
0
10 [报告]
发表于 2010-08-31 15:09 |只看该作者
一样的啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP