有没有办法跳转到C中变量定义的行?

时间:2016-11-10 12:33:24

标签: c goto

所以,我有这个程序,我使用

将行号存储在变量中
int x = __LINE__;

x的值可以不断变化。 是否可以使用goto或C中的任何其他关键字从任意一行跳到x给出的那一行? 我正在寻找像

这样的东西
'keyword' x;

程序转移到由变量x定义的行。

如果无法解决这个问题吗?

3 个答案:

答案 0 :(得分:7)

GCC编译器支持using labels as values作为扩展名,以便您可以以类似于您之后的方式使用它们。

它允许你这样做:

void *ptr = &&label;
label:

然后

goto *ptr;

跳转到label

这通常在虚拟机的核心内部有用,当然可以导致可怕的意大利面。同样,它也是GCC扩展(我认为也是Clang的支持)。

答案 1 :(得分:0)

不,这是不可能的,实现类似的一种可能的方法是将变量定义为函数指针,并且一旦将变量设置为 你称之为正确的功能。

int foo(int x) {
    return x+x;
}

int (*func) (int);
func = foo;
int r = func(3);

答案 2 :(得分:0)

这是可能的,但非常痛苦。假设您有这样的程序:

instruction1;
instruction2;
...
instructionn;

然后您可以将其重写为:

jump:
switch(x) {
case 1:
  instruction1;
case 2:
  instruction2;
...
case n:
 instructionn;
}

然后您可以插入类似的内容:

jump:
switch(x) {
case 1:
  instruction1;
case 2:
  instruction2;
...
case <something>:
  x = <number>;
  goto jump;
...
case n:
  instructionn;
}

当然,在这样的模式中,你会遇到一些编码像switch这样的块的问题,但是总是可以用这个给定的形式来翻译它(不是这里解释的地方)。所以,根据你真正需要做的事情,我可能不值得努力。