【发布时间】:2016-09-06 21:09:42
【问题描述】:
我看到一个 C 语言程序,其代码如下:
static void *arr[1] = {&& varOne,&& varTwo,&& varThree};
varOne: printf("One") ;
varTwo: printf("Two") ;
varThree: printf("Three") ;
我对@987654324@ 的作用感到困惑,因为它的左侧没有任何内容。默认情况下它是否评估为空?还是这是特例?
编辑: 添加了更多信息,以使问题/代码对我的问题更加清晰。 谢谢大家的帮助。这是 gcc 特定扩展的一个案例。
【问题讨论】:
-
这不是一个
&&,而是两个&。并且在 C 中无效,因为&的结果是另一个&的无效表达式。确定那不是 C++ 代码?? -
这看起来有点像 GCC 的 computed gotos。是
varOne、varTwo和varThree标签吗? -
@user2357112:好点。再一次,minimal reproducible example 会有所帮助。
-
@Olaf:不,因为
&&将始终被词法分析器视为一个单元。这与return0之类的东西将被视为单个标识符而不是return 0的原因相同。 -
我投票决定重新打开,因为在这里关闭为“离题”对我来说似乎是错误的:这肯定是关于 GCC 的计算 goto,从快速搜索来看,我们似乎没有问题尤其是在处理这个问题。有这样一个问题会很好,可以节省未来的“这是一个计算的 goto”..“什么是计算的 goto”讨论。虽然它应该被适当地标记(gcc 和语言扩展?)
标签: c gcc goto language-extension