我已经读了一段时间关于C并决定让我们写一点添加程序,没什么好看的.我对C头的理解是它们是"接口"(比如java和其他语言),但你也可以定义具有设置值的变量.
所以我写了这个:
#include <stdio.h>
#include <stdlib.h>
#include "sample.h"
int main(int argc, char** argv) {
printf("hello World\n");
add(12, 18);
return (EXIT_SUCCESS);
}
int add(int a, int b){
int value = a+b;
printf("value = %d\n", value);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它有一个头文件,如下所示:
#ifndef SAMPLE_H_GUARD
#define SAMPLE_H_GUARD
int add(int a, int b);
#endif
Run Code Online (Sandbox Code Playgroud)
我认为头文件,这是我在他们的定义上丢失的地方,假设定义add的使用,所以我要做的就是调用add - 从我的理解,我定义add的规则然后实现添加功能....
此外,我读过的很多材料显示了多个C文件的一个头文件.今天许多项目每个c都有一个标题,这意味着Sample.h属于Sample.c而没有别的.
有人可以对此有所了解吗?
我可以像这样做:
main.c中
#include <stdio.h>
#include <stdlib.h>
#include "sample.h"
int main(int argc, char** argv) {
printf("hello World\n");
add(12, 18);
return (EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
add.c
#include <stdio.h>
#include <stdlib.h>
#include "sample.h"
int add(int a, int b){
int value = a+b;
printf("value = %d\n", value);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
sample.h
#ifndef SAMPLE_H_GUARD
#define SAMPLE_H_GUARD
int add(int a, int b);
#endif
Run Code Online (Sandbox Code Playgroud)
我相信我正在阅读的书:C编程语言他们有一个像这样的计算器例子,我的问题是C如何知道添加定义在哪里?我认为它基于头文件知道它的规则,但不知道实际实现的位置....
他们分割文件的例子就像这样的doe没有像#include "add.c"他们所做的那样,将头文件包含在实现或使用此功能的文件中.
注意:显然,计算器示例和我的示例将会有所不同,但基本相同 - 对于那些拥有该书的人.我只是迷失了如何有效和高效地使用头文件.
头文件C会为那些需要它的模块声明函数add,但不会定义函数。该函数仍将在其自己的模块中定义(例如,在您的情况下,add.c)。
所以一般来说,要使一个函数foo可用于多个模块,您通常会:
选择一个头文件(如果有其他相关的定义等,它可能是自己的)来声明 foo. 例如,也许foo.h会有void foo(...);
在某些模块中,也许foo.c,您会定义完整的函数foo。
在任何想要调用 的模块中foo,您将#include "foo.h"
(或您使用的任何标头)调用该函数。
当您编译/链接代码时,您将确保存在所有模块,包括foo.o或foo在其中定义的任何模块。
头文件中给出的声明提供(当然)函数名称、函数返回类型以及列出所有参数及其类型。这就是编译器要弄清楚如何从调用模块调用函数所需要知道的全部内容。在链接时,地址都被解析,这样模块就可以准确地知道函数在它自己的特定模块中的位置。