如何正确编写结构
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错误。
我见过一些程序员的代码如下所示
在他们声明一个结构之后,他们有两个指向该结构的相似函数
第一虚空的海豚是什么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错误。