gcc编译warning: use of cast expressions as lvalues is deprecated,不建议将强转表达式作为左值,初衷是防止类型不一致导致解析非预期的类型,后续使用引发问题,如下
void func() {
void (*p)(void);
void *j;
(void*)p = j;
}
此时会报编译warning,此warning本质是编译器的提醒,但是其实可以通过二级指针绕过编译器检查,写lib时往往不允许有warning存在,可以使用这种方法欺骗编译器,如下:
void func() {
void (*p)(void);
void *j;
*(void**)&p = j;
}

本文探讨了gcc编译器发出的关于将强制转换表达式用作左值的警告,解释了这一警告的原因是为了避免类型不一致导致的问题,并提供了一种通过使用二级指针来绕过编译器检查的方法,以便在编写库时消除此类警告。
1564

被折叠的 条评论
为什么被折叠?



