【发布时间】:2015-10-09 01:22:45
【问题描述】:
我怀疑为什么 gcc 使用&& 访问标签以及为什么它不直接访问与标签关联的位置值。就像下面的代码一样:
void main()
{
static void* loc = &&locA;
printf("locA : %p\n", locA); //will give error
printf("loc : %p\n",loc); //will not give error
//statments X
locA :
//statements Y
}
【问题讨论】:
-
您可能会在这里找到答案:stackoverflow.com/questions/1777990/… TL;DR 可能是:因为 C 和 C++ 标准不支持获取标签的地址。
-
哦,哇,我什至不知道 gcc 可以做到这一点。据我所知,MSVC 不支持这一点——并不是说我真的用过
goto很多,但现在仍然很高兴知道! -
@Blindy :如果在 32 位代码(不是 x64)中使用 MSVC,您可以使用内联汇编访问标签的地址。
void* loc; __asm{ mov [loc],offset locA }; locA: -
我必须同意@Olaf 的观点——如果您必须使用不符合标准的方式来做某事,您最好重新编写代码以找到符合标准的实现方式同一个目标。
标签: c gcc unary-operator