首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C:如何从库访问数据类型

C:如何从库访问数据类型
EN

Stack Overflow用户
提问于 2016-12-04 21:11:10
回答 2查看 160关注 0票数 2

我刚开始使用C语言,我不太熟悉它的工作原理。我有一份档案研究报告

代码语言:javascript
运行
复制
struct stud{};
void inc_stud_pos(){};
int get_stud_pos(){};

和研究人员:

代码语言:javascript
运行
复制
#include "stud"

#define STUDENT_SIZE 20

struct stud{
    char stud_id[MAX_STR_LEN];
    char stud_name[MAX_STR_LEN];
    struct grade Grade[MAX_STRUCT];
    struct income Income[MAX_STRUCT];
};

int stud_location = 0;

struct stud students[STUDENT_SIZE];

void inc_stud_pos(){
    stud_location++;
}

int get_stud_pos(){
    return stud_location;
}

现在,我希望从另一个文件中访问stud.c中的一些函数。假设我想在另一个文件中使用STUDENT_SIZE,语法是什么?我需要使用stud.STUDENT_SIZE吗?还是当我把“钉”包括在内的时候,我可以接触到学生的大小?如果我想说,做一组学生:

代码语言:javascript
运行
复制
struct stud students[STUDENT_SIZE];

我可以访问正常情况下的students5.stud_id吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-04 21:41:09

头文件(.h)是程序员与模块的接口。模块的用户(程序员)需要知道的任何东西都应该在模块中,但是要将实际的实现放在相关的.c文件中。通常,您将函数原型(例如int f(void);)放在.h文件中,将定义(实现,例如int f(void) { return 1; })放在.c文件中。链接器将原型与定义匹配,因为函数签名匹配(名称、参数类型和返回类型)。考虑它的一种方法是将.h文件作为您与每个人共享的内容,将.c文件作为您自己保存的文件。

如果您希望模块的用户能够访问STUDENT_SIZE,请将

代码语言:javascript
运行
复制
#define STUDENT_SIZE 20

.h文件中,而不是在.c文件中。然后,任何与

代码语言:javascript
运行
复制
#include "stud.h"

将有您的宏用于STUDENT_SIZE。(请注意文件名是"stud.h",而不是"stud"。)

假设我想在另一个文件中使用STUDENT_SIZE,语法是什么?我需要使用stud.STUDENT_SIZE吗?

不是的。您可能会将其与名称空间混淆,名称空间与其他语言(如C does not have、C++等)的含义相同,只需使用STUDENT_SIZE即可。(这就是为什么不使用现有标识符很重要,也是为什么许多人不喜欢宏。)

..。我希望从另一个文件中访问stud.c中的一些函数。

如果您希望另一个文件能够访问stud.c中的某个函数,那么将该函数的原型放在stud.h中。这正是头文件的作用所在。

..。如果我想让一群学生: struct stud students[STUDENT_SIZE]; 我可以访问正常情况下的students[5].stud_id吗?

由于您已经编写了您的头文件,没有。您可能知道有一些struct stud存在,但是您不知道成员被称为什么(也就是说,您不会知道stud_id存在)。原因是您的模块的用户只看到头文件中的内容,并且您在头文件中没有定义任何struct成员。(我很惊讶您所编写的编译,因为您定义了struct stud两次,一次是空的{},一次是带成员的。)同样,如果您希望程序员用户能够访问struct stud的成员,那么它的定义

代码语言:javascript
运行
复制
struct stud {
    char stud_id[MAX_STR_LEN];
    char stud_name[MAX_STR_LEN];
    struct grade Grade[MAX_STRUCT];
    struct income Income[MAX_STRUCT];
};

属于您的头文件(以及其他宏)。不知道这一点,程序员(和编译器)就不知道struct stud的成员是什么。

(您没有问到这一点,但是如果您想共享对.c文件中的全局变量的访问,那么使用.h文件中的关键字extern来声明它,而在.c文件中不要使用extern。请参阅How to correctly use the extern keyword in C获取更多信息。)

票数 2
EN

Stack Overflow用户

发布于 2016-12-04 21:15:25

不能使用头文件的写入方式访问STUDENT_SIZE。头文件桥接并扩展了上述项的范围:

代码语言:javascript
运行
复制
struct stud{}; //this should be fixed btw
void inc_stud_pos();
int get_stud_pos();

如果您想扩展STUDENT_SIZE的作用域,那么不要在.c文件中声明它,而是将它放在.h文件中。但是,如果这样做,则必须删除在STUDENT_SIZE文件中声明.c的代码行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40963696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档