为什么我们不能在结构中声明函数?

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)