zee*_*zee 2 c struct declaration function
我读了很多关于的问题
declaration of functions inside structure?
但我没有得到满意的答案.
我的问题不在于此 whether functions can be declared inside a structure or not?
相反,我的问题是
WHY function can not be declared inside structure?
her*_*tao 10
那就是C和C++之间的根本区别(在C++中有效).C++支持类(在C++中struct是一个类的特殊情况),而C则不支持.
在C中,您将实现该类作为一个具有this显式指针的函数的结构,这实际上是C++在幕后所做的事情.结合一个合理的命名约定,让你知道哪些函数属于哪些类(再次是C++在名称修改过程中所做的事情),如果不是面向对象的编程,你就会接近基于对象的.例如:
typedef struct temp
{
int a;
} classTemp ;
void classTemp_GetData( classTemp* pThis )
{
printf( "Enter value of a : " );
scanf( "%d", &(pThis->a) );
}
classTemp T ;
int main()
{
classTemp_GetData( &T );
}
Run Code Online (Sandbox Code Playgroud)
但是,正如您可以看到没有语言支持的类,实现然后可能会变得无聊.
在C中,函数和数据结构或多或少是裸露的; 该语言为将数据结构组合在一起提供了最少的支持,并且根本没有(直接)用于包含具有这些数据结构的函数.
C的目的是让一种语言尽可能直接地转换为机器代码,更像是一种可移植的汇编语言,而不是像C++这样的高级语言(而不是C++就是高级语言).C让你非常接近机器,深入了解大多数语言摘录的细节; 这方面的缺点是你必须接近C中的机器才能最大限度地使用这种语言.它需要一种完全不同的C++编程方法,它们之间的表面相似性隐藏起来.
点击这里了解更多信息(那里的精彩讨论).
PS:你也可以通过使用函数指针来完成这个功能,即在函数内部有一个指向函数(作为变量)的指针struct.
例如:
#include <stdio.h>
struct t {
int a;
void (*fun) (int * a); // <-- function pointers
} ;
void get_a (int * a) {
printf (" input : ");
scanf ("%d", a);
}
int main () {
struct t test;
test.a = 0;
printf ("a (before): %d\n", test.a);
test.fun = get_a;
test.fun(&test.a);
printf ("a (after ): %d\n", test.a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)