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; 
} 


标签:C++
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号