【发布时间】:2019-07-15 20:05:10
【问题描述】:
我制作了 3 个文件来组织我的代码。一个main.c、一个functions.h和一个functions.c。我还制作了一个与某些函数一起使用的结构,但我遇到的问题是我找不到任何方法来声明使用 .h 文件中的结构的函数。它起作用的唯一方法是当我将函数与结构一起放在 .c 中而不在 .h 中声明它们中的任何一个。
我试过了
主要是:
#include "functions.c"
在.c:
#include "functions.h"
void myfunction(sinWave *sw, float u, float ts){
};
typedef struct{
float amplitude;
float fase;
} sinWave;
在.h中:
typedef struct sinWave;
void myfunction(sinWave *, float, float);
但它不起作用。我明白了:
warning: useless storage class specifier in empty declaration
'typedef struct sinWave;'a
unknown type name 'sinWave'
'void ePLL(sinWave , float , float);'
【问题讨论】:
-
将
#include与.c文件一起使用很少是正确的。您通常只包含.h文件。 -
可能有特殊情况需要以不同寻常的方式做事,但这不是其中之一。将结构声明和函数原型放在 .h 文件中,将函数定义放在 .c 文件中,其中包括 .h。此外,您可能希望使用 double 而不是 float,除非您有充分的理由不这样做。
-
您使用的是什么平台(Linux、Windows 或...)?什么构建系统(Makefile、SCons、Visual Studio IDE 或...)?还是您在命令行手动调用编译器?这里的大多数(全部?)答案都假设您使用的是构建系统。如果您(例如)只是从命令行调用 GCC 并指定单个 .c 文件,然后运行生成的 a.out 或 a.exe 程序,那么您将希望开始使用将链接多个目标文件转换为单个可执行文件。您可以在没有构建系统的情况下从命令行执行相同操作,但构建系统更好。
-
Lee Daniel,我打算把它放在一个 32 位 CPU 的 esp32 上,我还做了另一个实验,在这种情况下双精度对我没有帮助。
-
我在 Windows 上,我正在编译 gcc main.c -o main.exe
标签: c function struct header-files declaration