Преобразование класса в структуру

У меня есть задание, где я должен преобразовать программу, подобную C++, в программу c.

Если у меня есть что-то вроде

class B {
    int var;
    int somefunction(){
        some code here
    }
}

это будет изменено на

struct B{
    int var;
}

int somefunction(){
    some code here
}

По сути, мне приходится менять class на struct каждый раз, когда я это вижу, и если есть функция, я должен сейчас вынести ее за пределы структуры.

Каков наилучший подход к выполнению чего-то подобного? Я понимаю теорию, стоящую за этим, но не уверен, как к ней подойти.


person FreeStyle4    schedule 17.01.2017    source источник
comment
int someFunction(struct B *this) обязательно?   -  person AlexP    schedule 18.01.2017
comment
мне любопытно, почему вы хотите преобразовать class в struct   -  person Mohsen_Fatemi    schedule 18.01.2017
comment
@Mohsen_Fatemi: в C нет ключевого слова class?   -  person Mooing Duck    schedule 18.01.2017
comment
@MooingDuck да, у него нет ключевого слова class   -  person Mohsen_Fatemi    schedule 18.01.2017


Ответы (1)


Обычно вы передаете указатель на структуру в функцию. Например, если у вас есть этот код C++:

class A {
    private:
       int x;
    public:
       A() : x(0) {
       }
       void incx() {
          x++;
       }
};

эквивалентный код C будет:

struct A {
    int x;
};

void init( struct A * a ) {   // replaces constructor
    a->x = 0;
}

void incx( struct A * a ) {
    a->x++;
}

И затем назовите это так:

struct A a;
init( & a );
incx( & a );

Но я должен спросить, почему вы думаете, что вам нужно преобразовать код C++ в C?

person Community    schedule 17.01.2017
comment
мне любопытно узнать, в чем причина этого преобразования :) - person Mohsen_Fatemi; 18.01.2017
comment
Это задание для школы. Мне нужно разобрать программу, подобную C++, и на выходе должна быть программа c - person FreeStyle4; 18.01.2017
comment
Я думаю, что я плохо сформулировал свой вопрос. Это был скорее вопрос о лучшем подходе к тому, как я буду анализировать такой файл. Откройте файл С++, прочитайте файл построчно, если я увижу класс, измените его на структуру и т.д. - person FreeStyle4; 18.01.2017
comment
@Free Это было бы очень, очень сложно. Фактически вы будете писать компилятор C++ с C в качестве целевого языка. Что и сделал первый компилятор C++ (cfront), но это было далеко не тривиальной задачей. Я думаю, что вы, возможно, неправильно поняли свое задание. - person ; 18.01.2017