加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

visual-c – C预处理器中的奇怪定义

发布时间:2020-12-16 10:29:50 所属栏目:百科 来源:网络整理
导读:我遇到过这个 #define DsHook(a,b,c) if (!c##_) { INT_PTR* p=b+*(INT_PTR**)a; VirtualProtect(c##_,4,PAGE_EXECUTE_READWRITE,no); *(INT_PTR*)c##_=*p; VirtualProtect(p,no); *p=(INT_PTR)c; } 除了“c ## _”这个词之外,一切都很清楚,这是什么意思?
我遇到过这个

#define DsHook(a,b,c) if (!c##_) {  INT_PTR* p=b+*(INT_PTR**)a;  VirtualProtect(&c##_,4,PAGE_EXECUTE_READWRITE,&no); *(INT_PTR*)&c##_=*p;  VirtualProtect(p,&no);  *p=(INT_PTR)c; }

除了“c ## _”这个词之外,一切都很清楚,这是什么意思?

解决方法

它意味着“粘合”在一起,所以c和_“粘在一起”形成c_.这种粘合发生在宏中的参数替换之后.看我的例子:

#define glue(a,b) a##_##b

const char *hello_world = "Hello,World!";

int main(int arg,char *argv[]) {
    printf("%sn",glue(hello,world)); // prints Hello,World!
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读