История изменений
Исправление MOPKOBKA, (текущая версия) :
ООП не такая уж и сложная идея для реализации, мой любимый пример на FASM:
https://board.flatassembler.net/topic.php?t=9896
...
class TIndex
field Index : DWORD = 0
; suppose we have 2 functions to work with Index
function Inc
; just for example - let it be virtual
virtual_function Dec
endclass
...
А уж на С совсем просто, GObject как доказательство. Генераторы/корутины тоже просто делаются:
#define CO_BEGIN static int state=0; switch(state) { case 0:
#define CO_END }
#define CO_YIELD(x) do { state=__LINE__; return x; case __LINE__:; } while (0)
void parser(int c) {
CO_BEGIN;
for (;;) {
if (c == EOF)
break;
if (isalpha(c)) {
do {
add_to_token(c);
CO_YIELD();
} while (isalpha(c));
got_token(WORD);
}
add_to_token(c);
got_token(PUNCT);
CO_YIELD();
}
CO_END;
}
Исходная версия MOPKOBKA, :
ООП не такая уж и сложная идея для реализации, мой любимый пример на FASM:
https://board.flatassembler.net/topic.php?t=9896
...
class TIndex
field Index : DWORD = 0
; suppose we have 2 functions to work with Index
function Inc
; just for example - let it be virtual
virtual_function Dec
endclass
...
А уж на С совсем просто, GObject как доказательство. Генераторы тоже просто делаются:
#define CO_BEGIN static int state=0; switch(state) { case 0:
#define CO_END }
#define CO_YIELD(x) do { state=__LINE__; return x; case __LINE__:; } while (0)
void parser(int c) {
CO_BEGIN;
for (;;) {
if (c == EOF)
break;
if (isalpha(c)) {
do {
add_to_token(c);
CO_YIELD();
} while (isalpha(c));
got_token(WORD);
}
add_to_token(c);
got_token(PUNCT);
CO_YIELD();
}
CO_END;
}