gpt4 book ai didi

c - 当C中没有左侧时,&&运算符会做什么?

转载 作者:行者123 更新时间:2023-12-02 10:26:24 25 4
gpt4 key购买 nike

我在C中看到了一个程序,其代码如下:

static void *arr[1]  = {&& varOne,&& varTwo,&& varThree};

varOne: printf("One") ;
varTwo: printf("Two") ;
varThree: printf("Three") ;

我对 &&的功能感到困惑,因为它的左边没有内容。默认情况下它是否评估为null?还是这是特例?

编辑:
添加了更多信息,以使问题/代码更加清楚我的问题。
谢谢大家的帮助。这是gcc特定扩展名的情况。

最佳答案

这是gcc特定的扩展,一个一元&&运算符,可以应用于标签名称,并将其地址作为void*值产生。

作为扩展的一部分,允许goto *ptr;,其中ptrvoid*类型的表达式。

它在gcc手册中记录为here

You can get the address of a label defined in the current function (or a containing function) with the unary operator &&. The value has type void *. This value is a constant and can be used wherever a constant of that type is valid. For example:

void *ptr;
/* ... */
ptr = &&foo;

To use these values, you need to be able to jump to one. This is done with the computed goto statement, goto *exp;. For example,

goto *ptr;

Any expression of type void * is allowed.



正如zwol在评论中指出的那样,gcc使用 &&而不是更明显的 &,因为标签和具有相同名称的对象可以同时可见,如果 &foo表示“标签地址”,则 &可能会含糊。标签名称占据它们自己的 namespace (不是C++的意思),并且只能在特定的上下文中显示:由带标签的语句定义,作为 goto语句的目标,或者对于gcc,作为一元 &&的操作数。

关于c - 当C中没有左侧时,&&运算符会做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64322165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com