为什么GCC会定义一元运算符'&&'而不是仅使用'&'?

杰里米

本问题所述,GCC定义了非标准一元运算符&&以获取标签的地址。

为什么要定义一个新的运算符,而不是使用运算符的现有语义&和/或函数的语义(在哪里foo&foo两者都产生函数的地址foo())?

塞巴斯蒂安·雷德尔(Sebastian Redl)

标签名称不会干扰其他标识符,因为它们仅在gotos中使用。变量和标签可以具有相同的名称,并且在标准C和C ++中,从上下文中始终可以清楚地看出含义。因此,这是完全正确的:

name:
  int name;
  name = 4; // refers to the variable
  goto name; // refers to the label

因此需要区分&和&&&,以便编译器知道期望使用哪种名称:

  &name; // refers to the variable
  &&name; // refers to the label

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在三元运算符中使用“ 0”会返回第一个值?

为什么在使用三元if / else运算符时,增量运算符(++ /-)不起作用?

为什么使用三元运算符在宏中定义1和0?

为什么C#三元运算符不能与委托一起使用?

使用增量运算符会产生构建错误“ swift一元运算符'++'无法应用于类型为'Int'的操作数”

为什么在数组上使用一元运算符+会在javascript中产生不一致的结果?

关于在Python3中与一元运算符一起使用空格的逻辑

一元“不是”或PowerShell中的位翻转运算符?

为什么在vue.js中“避免使用JavaScript一元运算符作为属性名称”?

让一元运算符使用Python类

C ++一元右折叠与一元左折叠使用逗号运算符

R,在使用订单函数时将无效参数传递给一元运算符

一元减号运算符如何在C ++中与整数文字一起使用?

在子集函数中使用select = -c()会产生错误:一元运算符的参数无效

为什么 '?' 运算符使用From而不是Into?

为什么map.find使用<运算符而不是==运算符?

为什么选择二元运算符而不是一元运算符?

一元运算符语法错误提示“必须使用括号来消除运算符优先级的歧义”

为什么`as`运算符可能会抛出讨厌的EAccessViolation而不是正常的EIntfCastError?

'|' 不是后缀一元运算符

<=不是前缀一元运算符

错误[:-lt:Shell脚本Linux中应使用一元运算符

C ++类上使用的一元运算符是什么意思?(类::类)

'<' 不是前缀一元运算符

自定义类型的 Swift 字典初始化给出:“>”不是后缀一元运算符错误

期望与整数和数组一起使用的一元运算符

如何使用 RPN 解析一元运算符?

为什么 std::inlcudes 在条件中使用小于运算符而不是相等运算符?

为什么在三元运算符中使用赋值会产生没有括号的错误?