Раньше использование вложенной функции в G CC было спорным . Его главный недостаток в том, что он использует технику под названием батут . Теперь, когда вы можете предотвратить это, указав -fno-trampolines при компиляции, можно ли, наконец, безопасно использовать?
Вложенные функции мне очень интересны, так как я могу использовать их для создания структуры который похож на класс, путем определения и назначения функции класса внутри функции-конструктора:
#include <stdio.h>
#include <stdlib.h>
struct classStruct;
typedef struct classStruct ClassA;
struct classStruct {
int a;
//class constructor
ClassA* (*new_Class_A)();
//class destructor
void (*free_Class_A)();
//class function
int (*geta)();
};
ClassA* new_Class_A(int a) {
ClassA* temp = NULL;
temp = (ClassA*) malloc(sizeof(ClassA));
//assign variables
temp->a = a;
//assign constructor
temp->new_Class_A = new_Class_A;
//assign destructor
void free_Class_A() {
temp->new_Class_A = NULL;
temp->free_Class_A = NULL;
temp->geta = NULL;
temp->a = 0;
free(temp);
}
temp->free_Class_A = free_Class_A;
//assign class function
int geta () {
return temp->a;
}
temp->geta = geta;
return temp;
}
int main (int argc, char* argv[]) {
//declare a new instance
ClassA* ANumber = new_Class_A(12);
//access a class function is now super easy
printf("%d\n",ANumber->geta());
//destroy instance
ANumber->free_Class_A();
return 0;
}
Затем я могу теперь вызвать функцию класса object-> geta () так же, как и в C ++. of object-> geta (& object), фактически имеющий нечто похожее на неявное ключевое слово this. Это сейчас приемлемо? Могу ли я столкнуться с проблемами при вызове функций вне функции конструктора?
Давайте оставим вопросы вроде «почему?» или «почему вы просто не использовали C ++» сейчас из этого обсуждения: P.