我使用Linux作为我的编程平台,C语言作为我的编程语言。我的问题是,我在主源文件(main.c)中定义了一个结构:
struct test_st { int state; int status; };
所以我想在其他源文件中使用这个结构(例如othersrc.)。有没有可能在其他源文件中使用这个结构而不把它放在头文件中?
jvlzgdj91#
您可以在每个源文件中定义struct,然后将示例变量声明一次为全局变量,再声明一次为外部变量:
// File1.c struct test_st { int state; int status; }; struct test_st g_test; // File2.c struct test_st { int state; int status; }; extern struct test_st g_test;
然后链接器会变魔术,两个源文件将指向同一个变量.但是,在多个源文件中复制一个定义是一种不好的编码实践,因为在发生更改时,您必须手动更改每个定义。简单的解决方案是将定义放在头文件中,然后将其包含在使用该结构的所有源文件中。若要跨源文件访问该结构的同一示例,仍可以使用extern方法。
extern
// Definition.h struct test_st { int state; int status; }; // File1.c #include "Definition.h" struct test_st g_test; // File2.c #include "Definition.h" extern struct test_st g_test;
ckocjqey2#
您可以在othersrc.c中使用指向它的指针而不包含它:其他来源c:
othersrc.c
struct foo { struct test_st *p; };
但除此之外,您需要以某种方式包含结构定义。一个好方法是在main. h中定义它,并将其包含在两个. c文件中。主. h:
主要c:
#include "main.h"
其他来源c:
当然,您可能会找到比main. h更好的名称
fd3cxomn3#
// use a header file. It's the right thing to do. Why not learn correctly? //in a "defines.h" file: //---------------------- typedef struct { int state; int status; } TEST_ST; //in your main.cpp file: //---------------------- #include "defines.h" TEST_ST test_st; test_st.state = 1; test_st.status = 2; //in your other.ccp file: #include "defines.h" extern TEST_ST test_st; printf ("Struct == %d, %d\n", test_st.state, test_st.status);
dwthyt8l4#
将其放在头文件中是声明源文件之间共享的类型的正常、正确的方法。除此之外,您可以将main. c视为头文件,并将其包含在另一个文件中,然后只编译另一个文件;或者您可以在两个文件中声明相同的struct,并在两个位置都进行修改。
kuuvgm7e5#
C支持separate compilation。将结构声明放在一个 * 头文件 * 中,将#include "..."放在源文件中。
#include "..."
wvt8vs2t6#
将struct保留在源文件中是完全合理的,这就是封装,但是如果你要在多个源文件中多次重新定义struct,那么你最好在头文件中定义一次struct,然后根据需要包含该文件。
5vf7fwbs7#
头文件/* 在file1.c和file2.c中都包含此头文件
struct a { }; struct b { };
因此头文件包含两个结构的声明。
file 1.c
struct a xyz[10];--〉此处定义的结构体a在此文件中使用结构B
struct a xyz[10];
extern struct b abc[20]; /* now can use in this file */
file2.c
struct b abc[20]; /* defined here */
使用file1.c中定义的结构a
use extern struct a xyz[10]
7条答案
按热度按时间jvlzgdj91#
您可以在每个源文件中定义struct,然后将示例变量声明一次为全局变量,再声明一次为外部变量:
然后链接器会变魔术,两个源文件将指向同一个变量.
但是,在多个源文件中复制一个定义是一种不好的编码实践,因为在发生更改时,您必须手动更改每个定义。
简单的解决方案是将定义放在头文件中,然后将其包含在使用该结构的所有源文件中。若要跨源文件访问该结构的同一示例,仍可以使用
extern
方法。ckocjqey2#
您可以在
othersrc.c
中使用指向它的指针而不包含它:其他来源c:
但除此之外,您需要以某种方式包含结构定义。一个好方法是在main. h中定义它,并将其包含在两个. c文件中。
主. h:
主要c:
其他来源c:
当然,您可能会找到比main. h更好的名称
fd3cxomn3#
dwthyt8l4#
将其放在头文件中是声明源文件之间共享的类型的正常、正确的方法。
除此之外,您可以将main. c视为头文件,并将其包含在另一个文件中,然后只编译另一个文件;或者您可以在两个文件中声明相同的struct,并在两个位置都进行修改。
kuuvgm7e5#
C支持separate compilation。
将结构声明放在一个 * 头文件 * 中,将
#include "..."
放在源文件中。wvt8vs2t6#
将struct保留在源文件中是完全合理的,这就是封装,但是如果你要在多个源文件中多次重新定义struct,那么你最好在头文件中定义一次struct,然后根据需要包含该文件。
5vf7fwbs7#
头文件/* 在file1.c和file2.c中都包含此头文件
因此头文件包含两个结构的声明。
struct a xyz[10];
--〉此处定义的结构体a在此文件中使用结构B
file2.c
使用file1.c中定义的结构a