Giriş
Gcc Labels As Values veya Computed gotos olarak bilir. Gcc'nin sağladığı ek bir özelliktir.
Tanımlama
Computed gotos şöyle tanımlanır.
Şöyle yaparız.
Gcc Labels As Values veya Computed gotos olarak bilir. Gcc'nin sağladığı ek bir özelliktir.
Tanımlama
Computed gotos şöyle tanımlanır.
static void *arr[1] = {&& varOne,&& varTwo,&& varThree};
varOne: printf("One") ; goto *VarTwo;varTwo: printf("Two") ; goto *VarThree;varThree: printf("Three");
State MachineŞöyle yaparız.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
void *tab[] = { &&foo, &&bar, &&qux };
// Alternative method
//int otab[] = { &&foo - &&foo, &&bar - &&foo, &&qux - &&foo };
int i, state = 0;
srand(time(NULL));
for (i = 0; i < 10; ++i)
{
goto *tab[state];
//goto *(&&foo + otab[state]);
foo:
printf("Foo\n");
state = 2;
continue;
bar:
printf("Bar\n");
state = 0;
continue;
qux:
printf("Qux\n");
state = rand() % 3;
continue;
}
}
Çıktı olarak şunu alırız.$ gcc -o x x.c && ./x
Foo
Qux
Foo
Qux
Bar
Foo
Qux
Qux
Bar
Foo
Hiç yorum yok:
Yorum Gönder