如何将一个C语言头文件中的函数改写为一个长尾词的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计922个文字,预计阅读时间需要4分钟。
(C语言)头文件实现的函数+在C语言中,有时为了方便(方便的同义词是偷懒),函数就直接在头文件中实现了。那么这样子有没有问题呢?+当然有。这种做法会导致编译时的依赖问题,特别是当函数的实现细节需要修改时。下面举一个例子,这个例子只有3个字。+例子:在头文件中直接实现了一个打印函数。
(C语言)头文件实现的函数
在C语言里面,有时候为了方便(方便的同义词是偷懒),函数就直接在头文件里面实现了。那么这样子有什么问题呢?
下面举个例子,这个例子只有3个文件
/* fun.h */
#ifndef FUN_H
#define FUN_H
void base(){};
void fun();
#endif
/* fun.c */
#include "fun.h"
void fun()
{
base();
}
/* main.c */
#include "fun.h"
int main()
{
fun();
return 0;
}
好,然后gcc一下
gcc -c main.c (通过)
gcc -c fun.c (通过)
gcc -o main main.o fun.o (链接错误)
出现错误...“base()函数重定义!”
为什么重定义呢?因为#include是预处理部分,在编译之前由预处理程序在这个部分复制头文件的内容过来。所以在编译时候,main.o和fun.o文件都有base()函数的定义。
本文共计922个文字,预计阅读时间需要4分钟。
(C语言)头文件实现的函数+在C语言中,有时为了方便(方便的同义词是偷懒),函数就直接在头文件中实现了。那么这样子有没有问题呢?+当然有。这种做法会导致编译时的依赖问题,特别是当函数的实现细节需要修改时。下面举一个例子,这个例子只有3个字。+例子:在头文件中直接实现了一个打印函数。
(C语言)头文件实现的函数
在C语言里面,有时候为了方便(方便的同义词是偷懒),函数就直接在头文件里面实现了。那么这样子有什么问题呢?
下面举个例子,这个例子只有3个文件
/* fun.h */
#ifndef FUN_H
#define FUN_H
void base(){};
void fun();
#endif
/* fun.c */
#include "fun.h"
void fun()
{
base();
}
/* main.c */
#include "fun.h"
int main()
{
fun();
return 0;
}
好,然后gcc一下
gcc -c main.c (通过)
gcc -c fun.c (通过)
gcc -o main main.o fun.o (链接错误)
出现错误...“base()函数重定义!”
为什么重定义呢?因为#include是预处理部分,在编译之前由预处理程序在这个部分复制头文件的内容过来。所以在编译时候,main.o和fun.o文件都有base()函数的定义。

