结构体函数,是声明在主函数外的,有时候是否要另建文件存放?结构体在函数中是怎么调用的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体函数,是声明在主函数外的,有时候是否要另建文件存放?结构体在函数中是怎么调用的?相关的知识,希望对你有一定的参考价值。

对于公用的结构体和函数的声明,都需要放在独立的头文件中,组织的原则是实现同一个功能的结构体定义和函数声明都放在同一个头文件中,如下面的这个双链表头文件:
#ifndef _DLIST_H
#define _DLIST_H 1
#include <stdbool.h>
#ifdef __cplusplus
extern "C"
#endif

typedef struct _DListNode

struct _DListNode *prev;
struct _DListNode *next;
void *data;
DListNode;

typedef struct _DList

DListNode *head;
DListNode *tail;
void (*destroy) (void *data);
int size;
DList;

typedef void (*DList_PrintNodeFunc) (void *data);
typedef int (*DList_VisitNodeFunc) (void *context,void *data);

extern void dlist_init(DList *dlist,void (*destroy) (void *data));
extern int dlist_insert(DList *dlist,void *data);
extern int dlist_append(DList *dlist,void *data);
extern bool dlist_contain(const DList *dlist,const DListNode *node);
extern int dlist_insert_before(DList *dlist,DListNode *node,void *data);
extern int dlist_append_after(DList *dlist,DListNode *node,void *data);
extern int dlist_remove_node(DList *dlist,DListNode *node);
extern void dlist_print(DList *dlist,DList_PrintNodeFunc print);
extern int dlist_foreach(DList *dlist,DList_VisitNodeFunc visit,void *ctx);

#define dlist_head(dlist) ((dlist)->head)
#define dlist_tail(dlist) ((dlist)->tail)
#define dlist_size(dlist) ((dlist)->size)
#define dlistnode_data(node) ((node)->data)
#define dlistnode_prev(node) ((node)->prev)
#define dlistnode_next(node) ((node)->next)

#ifdef __cplusplus

#endif

#endif /* _DLIST_H */
对应于该头文件的函数实现存放在C或C++代码文件中。

而对于不需对外公开的结构和函数声明可以和直接调用这些结构或函数的函数放在一起,这种情况下函数的声明最好加static关键字修饰,表明函数的可见范围仅限与定义该函数的代码文件
如下所示
#include <stdio.h>
typedef struct _mystruct

type var1;
type var2;
Mystruct;
static void myfunc(void)

Mystruct mstu;
//Do something here


int main (void)

myfunc();
return 0;


对结构体的调用需要区别是结构体变量还是结构体指针,如果传入参数是结构体变量本身,则需要使用"."操作符引用其成员,如Point结构体有int x、int y两个变量,结构体变量为p,则需要通过p.x引用x成员变量,p.y引用y成员变量,如果参数是结构指针,即ptr执向结构体p,则需要使用ptr->x引用x成员变量,ptr->y引用y成员变量
参考技术A 定义结构体的时候就定义结构体变量,然后直接调用就好了。。主要调用的时候用的是点。比如:struct Num
int x;
;Num num;这时候num就是结构体变量,要调用x的话,应该这样写num.x;要是定义结构体指针的话,就要写成num->x。注意两者的区别就好了。。
参考技术B 1=2
2=2+1 就用到了哈·

C++创建一个结构体应该放在.cpp文件中吗?然后调用的时候只要包含这个.cpp文件?

想创建一个结构体,还有写一些对它的操作。在其它文件中调用

应该建一个头文件(如head.h), 然后把结构体还有函数的声明放在这个头文件里,然后在建一个.cpp文件(如head.cpp),文件开头包含这个头文件(#include "head.h"),函数的实现全放在这个文件里。

完了之后其他程序只要包含这个头文件(#include "head.h"),就可以使用这个结构体和这些函数了。
参考技术A 一般对结构体的声明(我也是最近刚开始学c++ 看的primer)放在头文件里。对结构体的定义是放在cpp里。 感觉c++里 并不把struct说成是结构体了 也是一个类,用户自己定义的类追答

定义放在实现文件里你这个类基本就别用了。

//tieba.baidu.com/i/sys/jump?un=sunchy12345678" onclick="Stats.sendRequest('fr=tb0_forum&st_mod=pb&st_value=atlink');" onmouseover="showattip(this)" onmouseout="hideattip(this)" username="sunchy12345678" target="_blank" class="at">@sunchy12345678 :那可不一定。

我没打算绝对化。。

参考技术B 放在头文件里。

以上是关于结构体函数,是声明在主函数外的,有时候是否要另建文件存放?结构体在函数中是怎么调用的?的主要内容,如果未能解决你的问题,请参考以下文章

结构体联合体

程序通过定义学生结构体变量,存储学生的学号姓名和3门课的成绩。函数fun的功能是:对形参b所指结构体变量中的数据进行修改,并在主函数中输出修改后的数据。

结构体基础

结构体的声明是在文件中的那个位置,函数的声明是在引用函数的声明部分还是在整个文件开始

161-结构函数的定义和使用

结构体数组怎么做函数参数