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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |