Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

int main()
{
    volatile int *a = NULL;
    long int * b = NULL;
    a = (volatile int *)b;
    //a = b;   这里就会编译报错.
}

对于a=b这种形式的转换如何解决? 在编译boost asio的时候发现,里面有大量代码参数类型是volatile int *, 而传入的实参是long int, 由于参数不匹配而导致了编译失败.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
590 views
Welcome To Ask or Share your Answers For Others

1 Answer

在 C 里并不会报错,只是会有警告:

>>> gcc -o a a.c
a.c: 在函数‘main’中:
a.c:8:7: 警告:从不兼容的指针类型赋值 [-Wincompatible-pointer-types]
     a = b;
       ^
a.c:5:19: 警告:变量‘a’被设定但未被使用 [-Wunused-but-set-variable]
     volatile int *a = NULL;
                   ^
>>> cp a.c a.cpp
>>> g++ -o a a.cpp
a.cpp: 在函数‘int main()’中:
a.cpp:8:9: 错误:不能在赋值时将‘long int*’转换为‘volatile int*’
     a = b;
         ^

警告的原因很明确,int 和 long 不兼容。C++ 里会报错,因为 C++ 的类型系统更严格。

请把问题打上正确的标签,以免引来非对口专业的人,浪费双方的时间。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...