第二十章:函数声明与头文件
程序员文章站
2023-12-23 19:34:57
...
#include <stdio.h>
//定义函数在main之后必须声明,声明的地方是任意的可以在main之外、之内,加不加extern是等价的,且声明可以只写类型不写形参名,且写的形参名和定义的可以不一致,可以只声明不定义,声明次数没有限制
//统一规范要求:main外声明一次,定义与声明形参一致,main内调用
extern int my_strlen(char str[]);//等价int my_strlen(char str[]);====int my_strlen(char)====int my_strlen(char str[]);int my_strlen(char str[]);
int main(void)
{
printf("len=%d\n",my_strlen("abcd"));
return 0;
}
int my_strlen(char str[]){
int i=0;
while(str[i]!='\0'){
i++;
}
return i;
}
定义在main之前可以不声明
int my_strlen(char str[]){
int i=0;
while(str[i]!='\0'){
i++;
}
return i;
}
int main(void)
{
printf("len=%d\n",my_strlen("abcd"));
return 0;
}
多文件编译
main.c
extern int my_strlen(char str[]);//必须声明
int main(void)
{
printf("len=%d\n",my_strlen("abcd"));
return 0;
}
my_strlen.c
int my_strlen(char str[]){
int i=0;
while(str[i]!='\0'){
i++;
}
return i;
}
如果需要调用多个函数,就要声明多个,将函数声明放在头文件于是有
main.c
#include "mystrlen.h"
#include <stdio.h>
int main(void)
{
printf("len=%d\n",my_strlen("abcd"));
return 0;
}
my_strlen.c
int my_strlen(char str[]){
int i=0;
while(str[i]!='\0'){
i++;
}
return i;
}
mystrlen.h
extern int my_strlen(char str[]);
如果引入了多个头文件有重复声明,为了只声明一次
mystrlen.h
extern int my_strlen(char str[]);
my_strlen.c
int my_strlen(char str[]){
int i=0;
while(str[i]!='\0'){
i++;
}
return i;
}
第一种方案
main.c
#pragma once
#include <stdio.h>
#include "mystrlen.h"
int main(void)
{
printf("len=%d\n",my_strlen("abcd"));
return 0;
}
第二种方案
#ifndef _MYSTRLEN_H
define _MYSTRLEN_H
extern int my_strlen(char str[]);
#endif
#include "mystrlen.h"
int main(void)
{
printf("len=%d\n",my_strlen("abcd"));
return 0;
}