use of cast expressions as lvalues is deprecated

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

 

你可能感兴趣的:(C,linux)