User Tools

Site Tools


lang:c-extensions

Предложения по расширению языка Си

Описанные ниже расширения языка Си позволяют простыми средствами превратить его в объектно-ориентированное средство разработки. При этом достигается совместимость с языком Ада.

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 Сергей Вакуленко

lang/c-extensions.txt · Last modified: 2005/10/25 00:39 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki