visual-c++之C++ 预处理器中的奇怪定义
pengyingh
阅读:139
2025-06-02 22:19:02
评论:0
我遇到过这个
#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,4,PAGE_EXECUTE_READWRITE,&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("%s\n", glue(hello,world)); // prints Hello, World!
return 0;
}
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



