c/c++语言开发共享无法在C中使用void变量进行编译

test.c的

int main () { void a; return 0; } 

我使用gcc编译,但它给了我一个错误:

错误:变量或字段’a’声明为void

从我在这里读到的,我以为我可以毫无问题地声明void变量。

    正如您的链接所述:

    一个本身声明为void的变量(例如上面的my_variable)是无用的; 它不能赋值,不能转换为其他类型,实际上不能以任何方式使用。

    这意味着虽然语法正确,但void声明对任何东西都没用,这就是GCC认为它是错误的原因。 即使它会编译,你也无法对变量做任何事情,所以我猜你的问题只与测试这种行为有关。

    事实上,当我们讨论指针( void* )时, void很有用,因为它允许你声明一个通用指针而不指定类型。

    不,但你可以声明一个void指针: void *void *可以保存任何对象指针。

    void *只能保证保存对象(即数据)指针

    [但]

    将函数指针转换为void *是不可移植的

    虽然这本书说明了void a; 是一个有效的声明,我不认为它符合标准。 话虽这么说,本书的第一版是从1987年开始的,所以它也可能是旧版GCC实现的结转。

    void *x; 是一个有效的声明。

    void x; 不是有效的声明。

    返回指向void的指针的函数也是有效的。

    为什么会这样?

    在函数中声明变量时,编译器必须为变量分配内存空间。 但是当变量的类型为void时,编译器不知道要为此变量分配多少字节。 所以这对编译器不起作用。 但是,指向void的指针是不同的。 指针可以是void类型,可以在读取时读取为int或double或float或short或char。 在这种情况下,编译器将完成所需的显式类型转换或自动类型提升。

    例如

     int function_A( void *x ) { int *p = (int *)x; return *p; } double function_B( void *x ) { double *p = (double *)x; return *p; } 

    一个重要的注意事项:C不允许直接强制取消引用void指针。 我的意思是你不能这样做:

     double function_B( void *x ) { return (double)*x; } 

    从概念上讲,这非常有意义。 但是C不允许这样做。

      以上就是c/c++开发分享无法在C中使用void变量进行编译相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544905.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐