gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:18:40 24 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* 类型的表达式。

已记录 here在 gcc 手册中。

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 可能会产生歧义。标签名称占据它们自己的命名空间(不是 C++ 意义上的),并且只能出现在特定的上下文中:由 labeled-statement 定义,作为 goto 语句的目标,或者,对于 gcc,作为一元 && 的操作数。

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

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