没有标题的外部结构

发布于 2025-01-10 17:05:28 字数 545 浏览 0 评论 0原文

我必须使用不同的文件:main.c 和 source.c。我想在 main.c 文件中 scanf 和 printf 信息,但要使用 source.c 中的结构。我不知道如何在不使用标头的情况下使用另一个文件中的结构。我尝试过使用 extern,但这是完全错误的。
你能教我在谈论结构时如何使用 extern
举例(仅举例)

main.c 
typedef struct Node{
  int n;
  int p[22];
  int z[33];
}Node;

Node a;

void sum (int i,int j, Node *sum);

main(){
   int i,j;
   scanf("%d",&i); 
   scanf("%d",&J); 
   sum (i,j,&a)
   printf("%d",a.k);
   return 0;
}
source.c

extern Node a;

void sum (int i,int j, Node *sum){
   a.n = i+j;
}

I have to different files : main.c and source.c. I want to scanf and printf information in main.c file, but to work with structure in source.c. I don't know how to use structure in another file without using headers. I've tryied to use extern, but that was totally wrong.
Can you teach me how to use extern when we talk about structure
For example (just example)

main.c 
typedef struct Node{
  int n;
  int p[22];
  int z[33];
}Node;

Node a;

void sum (int i,int j, Node *sum);

main(){
   int i,j;
   scanf("%d",&i); 
   scanf("%d",&J); 
   sum (i,j,&a)
   printf("%d",a.k);
   return 0;
}
source.c

extern Node a;

void sum (int i,int j, Node *sum){
   a.n = i+j;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白色秋天 2025-01-17 17:05:28

我将忽略您不想使用标头的部分,因为我怀疑这是基于误解。

您需要使用 extern 在标头中进行声明和 typedef(如果需要,但无论如何不鼓励使用全局变量)。
using 和 any 定义位于 .c 文件中,其中 #include 标头。

main.c

/* remove this ... to header
typedef struct Node{
  int n;
  int p[22];
  int z[33];
}Node;
*/
#include "myheader.h"

Node a;

/* remove this ... to header
void sum (int i,int j, Node *sum);
*/

int main(void) /* cleaner prototype */
{
   int i,j;
   scanf("%d",&i); 
   scanf("%d",&J); 
   sum (i,j,&a)
   printf("%d",a.n); /* I use n instead of k, because I do not see that... */
   return 0;
}

source.c

/* remove this ... completely
extern Node a;
*/
#include "myheader.h"
void sum (int i,int j, Node *sum){

   sum->n /* not sure where the k was meant to be */ = i+j;
   /* use the parameter pointer, use -> */
}

myheader.h

typedef struct Node{
  int n;
  int p[22];
  int z[33];
}Node;

void sum (int i,int j, Node *sum);

注意,我同意 Darth-Codex 的观点,这里不需要全局变量(因为指针参数提供了所有需要的访问),并且应该有一个更干净的 main() 原型被使用(以及我可能找到的其他任何东西......)。这意味着全球可以更好地被主要本地取代。

I am going to ignore the part that you do not want to use headers, because I suspect that is based on a misunderstanding.

You need to do the declaring and the typedefs in a header, using extern (if necessary, but globals are discouraged anyway).
The using and any definitions are in .c files, which #include the headers.

main.c

/* remove this ... to header
typedef struct Node{
  int n;
  int p[22];
  int z[33];
}Node;
*/
#include "myheader.h"

Node a;

/* remove this ... to header
void sum (int i,int j, Node *sum);
*/

int main(void) /* cleaner prototype */
{
   int i,j;
   scanf("%d",&i); 
   scanf("%d",&J); 
   sum (i,j,&a)
   printf("%d",a.n); /* I use n instead of k, because I do not see that... */
   return 0;
}

source.c

/* remove this ... completely
extern Node a;
*/
#include "myheader.h"
void sum (int i,int j, Node *sum){

   sum->n /* not sure where the k was meant to be */ = i+j;
   /* use the parameter pointer, use -> */
}

myheader.h

typedef struct Node{
  int n;
  int p[22];
  int z[33];
}Node;

void sum (int i,int j, Node *sum);

Note, I agree with Darth-Codex, that global variable is unneeded here (because the pointer parameter provides all needed access) and that a cleaner main() prototype should be used (and whatever else I may find....). And that means that the global could better be replaced by a main-local.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文