gpt4 book ai didi

c - 为依赖文件生成单独的 .o

转载 作者:行者123 更新时间:2023-11-30 18:56:00 25 4
gpt4 key购买 nike

e1.c

#include<stdio.h>
extern struct members;
int main(){
printf("\n %d \n",members.a1);
printf("%d",add(2,2));
printf("%d",sub(2,2));

}

e2.c

typedef struct members_t{
int a1;
int b1;
}members;
int add(int a,int b){
return (a+b);
}
int sub(int a,int b){
return (a-b);
}

我需要单独生成 .o,并且需要在创建可执行文件来解决依赖关系时组合这两个 .o。

我单独编译了e1.c并得到了以下错误,

[root@angus]# gcc -c e1.c -o e1.o
e1.c:2: warning: useless storage class specifier in empty declaration
e1.c: In function ‘main’:
e1.c:4: error: ‘members’ undeclared (first use in this function)
e1.c:4: error: (Each undeclared identifier is reported only once
e1.c:4: error: for each function it appears in.)

如何分别生成两个 .o 而不会出现错误。

我使用 extern 通知编译器它已在某处定义,但仍然出现上述错误。

最佳答案

当您编译 e1.c 时,编译器必须具有 structmembers_t 的完整声明以及 add() 和 sub() 函数的声明(原型(prototype)),因此您应该将其放在头文件中。

第 1 步。将声明移至头文件。

创建新的头文件,如下所示:

#ifndef E_HEADER_H
#define E_HEADER_H

typedef struct members_t{
int a1;
int b1;
}members;
int add(int a,int b);
int sub(int a,int b);
#endif

并将其命名为e.h

第 2 步。

添加

#include "e.h" 

到 e1.c 和 e2.c。

第 3 步。

从 e2.c 中删除 struct Members_t 的声明

第 4 步。

从 e1.c 中删除 extern struct Members; 的前向声明

第 5 步。

修复代码。您需要实际创建成员结构的实例,并初始化其成员

#include <stdio.h>
#include "e.h"
int main(int argc, char *argv[]){
members m;
m.a1 = 1;
m.a2 = 2;
printf("\n %d \n",m.a1);
printf("%d",add(2,2));
printf("%d",sub(2,2));

}

然后您可以按照您想要的方式编译这些文件。

关于c - 为依赖文件生成单独的 .o,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25789386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com