-4 c oop struct c-preprocessor
我想为我的编程语言创建一个面向对象的预处理器,将我的语言转换为C语言(如早期的C++).我想用结构模拟类.问题是:如何在结构中声明一个变量,如下所示:
typedef struct { //equivalent of class
int a = 5;
int (*sub)(int) = &int_sub; //function of a class, uses an external declared function
} class_name;
Run Code Online (Sandbox Code Playgroud)
我尝试了上面的代码,但编译器写了这个:
error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
void (*sub)(int) = &int_sub;
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
我可以在结构中声明一个变量吗?
如果有,怎么样?
您不能在结构定义中指定指针值.您可以使用函数来初始化它.
typedef struct { //equivalent of class
int a;
int (*sub)(int);
} class_name;
int int_sub (int a)
{
// your stuff
return 0;
}
int main()
{
class_name myClassVariable;
myClassVariable.a = 5;
myClassVariable.sub = int_sub;
printf("class_name.a = %d\n", myClassVariable.a );
printf("class_name.sub = %p\n", myClassVariable.sub );
printf("int_sub address = %p\n", int_sub );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
或者,如artm回答所示,您可以初始化已分配的变量:
class_name my_struct = { .a = 5, .sub = int_sub };
Run Code Online (Sandbox Code Playgroud)