我们什么时候使用goto*expr; 在C?

ass*_*sem 5 c gcc goto

| GOTO '*' expr ';'
Run Code Online (Sandbox Code Playgroud)

我还没有看到过这样的陈述,任何人都可以举个例子吗?

Mar*_*aev 6

这就是所谓的标签作为值,代表了GCC扩展之一.


举个例子,我已经应用了扩展给出一个答案打印1至1000,而不循环或条件语句的问题:

void printMe () 
{
    int i = 1;
    startPrintMe:
    printf ("%d\n", i);
    void *labelPtr = &&startPrintMe + (&&exitPrintMe - &&startPrintMe) * (i++ / 1000);
    goto *labelPtr;
    exitPrintMe:
}
Run Code Online (Sandbox Code Playgroud)


gee*_*aur 3

IIRC 这是尾部调用的 GNU 主义。通常,您会将优化留给编译器,但在编写内核或嵌入式设备驱动程序时它可能很有用。