为什么我不能引用.h文件中定义的函数的实现?[duplicate]

velaa5lx  于 2023-01-08  发布在  其他
关注(0)|答案(1)|浏览(132)
    • 此问题在此处已有答案**:

(39个答案)
14小时前关门了。

    • IDE:**VS代码
    • gcc版本:**8.1.0(x86_64-posix-seh-修订版本0,由MinGW-W64项目构建)

我在C语言中是新手,现在我有三个文件:

    • 获取h段**
#ifndef _GETPARA_H_
#define _GETPARA_H_
extern double C;
extern double dEarthAngularVelocity;
...
extern void calParameter();
#endif

以及Get_para. c,它是Get_para. h的实现

#include <math.h>
#define _USE_MATH_DEFINES
#define pi M_PI

double C = 3e8;
double dEarthAngularVelocity = 7.29210e-5;
...

void calParameter(){
...
}

然后,我想在test. c中包含Get_para. h,并调用在Get_para. c中实现的calParameter函数

#include <stdio.h>
#include "Get_para.h"

int main(){
   calParameter();
   printf("%lf\n",dSemiMajorAxis);
}

我在VS中使用'run code',终端中的命令是:

if ($?) { gcc test.c -o test } ; if ($?) { .\test }

输出为:

C:\Users\bob\AppData\Local\Temp\ccuWLUIl.o:test.c:(.text+0xe): undefined reference to `calParameter'
C:\Users\bob\AppData\Local\Temp\ccuWLUIl.o:test.c:(.rdata$.refptr.dSemiMajorAxis[.refptr.dSemiMajorAxis]+0x0): undefined reference to `dSemiMajorAxis'
collect2.exe: error: ld returned 1 exit status

但我想只包括"Get_para.h",然后我就可以在"Get_para.c"中使用它们的实现。我在谷歌上搜索了这个,其他人的代码在我的计算机上不起作用。现在我猜问题是gcc的参数,但不知道它是什么,也不知道我需要知道什么C知识来解决这个问题。

h5qlskok

h5qlskok1#

您还必须编译函数的实现:

gcc Get_para.c test.c -o test

考虑学习构建系统,比如cmake。

#define _USE_MATH_DEFINES

要使这样的宏工作,它必须在任何包含之前定义。
一个二个一个一个
定义宏时,以_开头,后跟大写字母是无效的。此类标识符是保留的。例如,使用:

#define GETPARA_H_

相关问题