Предложения по расширению языка Си
Описанные ниже расширения языка Си позволяют простыми средствами превратить его в объектно-ориентированное средство разработки. При этом достигается совместимость с языком Ада.
1)
Описание новых структур как дополнение старых:
struct foo : extends bar {
...
};
Поля новой структуры дописываются в хвост к полям старой структуры.
2)
Описание структур с набором интерфейсных функций:
struct stream {
...
interface:
void putch (char c);
int getch (void);
int peekch ();
void flush ();
int eof ();
};
В структуре создается скрытое первое поле, указывающее на таблицу указателей на функции:
struct stream {
struct {
void (*putch) ();
int (*getch) ();
int (*peekch) ();
void (*flush) ();
int (*eof) ();
} *interface;
...
};
3)
При определении интерфейсной функции указывается имя соответствующей структуры. Добавляется скрытый аргумент this:
void putch (char c) : interface struct stream
{ ... }
превращается в:
void putch (struct stream *this, char c)
{ ... }
4)
Вызов интерфейсной функции:
stream->putch ('x');
транслируется так:
stream->interface->putch (stream, 'x');
Copyright (C) 2005 Сергей Вакуленко