如何正确编写结构

How to properly write a struct

我见过一些程序员的代码如下所示

在他们声明一个结构之后,他们有两个指向该结构的相似函数

第一虚空的海豚是什么Point_print(const struct screen* self); 当 main 函数下面有另一个 void Point_print(const struct screen* self); 做所有的表达式时

struct screen{
    double x;
    double y;
};

void Point_print(const struct screen* self); // <-- what is the purpose of having this function?



int main(int argc, const char * argv[]) {
    
    struct screen aScreen;
    aScreen.x = 1.0;
    aScreen.y = 2.0;
    
    Point_print(&aScreen);
    return 0;
}

void Point_print(const struct screen * self){ // <-- this function is doing the work?
    printf("x:%f, y:%f",(*self).x,(*self).y);
}


编译器从上到下读取代码。因此,如果 main 上方没有 Point_print 的声明,编译器在读取第一次调用时将不知道 Point_print 的参数和 return 值它。

这里有一篇关于函数声明的更详细的文章:

https://www.programiz.com/c-programming/c-user-defined-functions

// this is called function signature or declaration, 
// and typically it's what's found in
// header files, this is all that's needed to properly generate the code
// to call this function.

void Point_print(const struct screen* self); // <-- what is the purpose of having this function?

现在它已经声明,您可以使用它了:

int main(int argc, const char * argv[]) {
    
    struct screen aScreen;
    aScreen.x = 1.0;
    aScreen.y = 2.0;
    
    Point_print(&aScreen); // <--- it's the use here
    return 0;
}

这是函数体或实现:

void Point_print(const struct screen * self){ // <-- this function is doing the work?
    printf("x:%f, y:%f",(*self).x,(*self).y);
}

当 linking 步骤发生时,它解析“调用点”和函数的实际主体之间的“link”。

一种体验方法是将函数体部分完全注释掉,然后尝试编译其中包含main的文件,它会正确编译,但是会喷出linking错误。