C/C++ 如何写自己的 头文件

6 篇文章 1 订阅

  C/C++ 如何使用自定义的头文件 .h

  博主以一个任意的代码示例举例:
  如下,是一个初步写成未经测试,代替 atoi函数的简单代码:


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


int Atoi(char *str)
{
    if (*str == '\0')
       return 0;
 
    int res = 0;		// Initialize result
    int sign = 1;		// Initialize sign as positive
    int i = 0;			// Initialize index of first digit
 
     if (str[0] == '-')
    {
        sign = -1;
        i++;  			// Also update index of first digit
    }
    if (str[0]=='+')
        i++;    
    for (; str[i] != '\0'; ++i)
    {
        if ( str[i] < '0' || str[i] > '9')	// If string contain character it will terminate
        {   
            return 0;
        }           
        res = res*10 + str[i] - '0';
    }
 
    return sign*res;
}

int add(char *firt,char *secend){
    int result;
    result = Atoi(firt)+Atoi(secend);
    return result;
}

int main(int argc, char **argv) 
{
      if(argc<3)
    {
        printf("Your enter is error,Please run the program again\n");
        return 1;
    }
      if(argc>4)
    {
        printf("Out of range,Please run the program again\n");
        return 1;
    } 
    printf("\n%d\n", add(argv[1],argv[2]));
    
    return 0;
}

  我们可以 将函数声明连带函数题写入到一个.h文件中,也可以仅在.h头文件中写函数声明,将函数主体放在一个或多个.c文件中。

  明白这一点后,就开始动手操作了,这里例子博主是分成了一个.h和.c文件。

  .h文件的内容为:


#ifndef _ATOI_H_	
#define _ATOI_H_
/* 这里的“_ATOI_H_“仅仅是.h头文件的命名,
你也可以写改写成你想要的名称,不过习惯以头文件名称的大写形式去写。
*/

int Atoi(char *str);
int add(char *firt,char *secend);
/*此处,是头文件中函数头声明*/

#endif

  .c文件的内容如下:

int Atoi(char *str)
{
    if (*str == '\0')
       return 0;
 
    int res = 0;		// Initialize result
    int sign = 1;		// Initialize sign as positive
    int i = 0;			// Initialize index of first digit
 
     if (str[0] == '-')
    {
        sign = -1;
        i++;  			// Also update index of first digit
    }
    if (str[0]=='+')
        i++;    
    for (; str[i] != '\0'; ++i)
    {
        if ( str[i] < '0' || str[i] > '9')	// If string contain character it will terminate
        {   
            return 0;
        }           
        res = res*10 + str[i] - '0';
    }
 
    return sign*res;
}

int add(char *firt,char *secend){
    int result;
    result = Atoi(firt)+Atoi(secend);
    return result;
}

  主函数仅写main函数和写好的头文件的声明:


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


int main(int argc, char **argv) 
{
      if(argc<3)
    {
        printf("Your enter is error,Please run the program again\n");
        return 1;
    }
      if(argc>4)
    {
        printf("Out of range,Please run the program again\n");
        return 1;
    } 
    printf("\n%d\n", add(argv[1],argv[2]));
    
    return 0;
}

  然后先预编译,再链接编译生成可执行文件,最后运行:

gcc -c Atoi.c atoi-own.c
gcc -o Atoi.exe -lm atoi-own.o Atoi.o

运行:
C:\root\文档\代码\C-C++\实习练习\自主编写实现atoi函数的测试> ./Atoi.exe +21 -3

18

在这里插入图片描述

附:

  gcc -c 指令会对 demo.c 文件执行预处理、编译以及汇编这 3 步操作;
  
  为了编译这个 atoi-own.c,必须使用-l选项,以链接数学库:gcc ... -lm atoi-own.o Atoi.o
  
  数学库的文件名是 libm.a。前缀lib和后缀.a是标准的,m是基本名称,
  GCC 会在-l选项后紧跟着的基本名称的基础上自动添加这些前缀、
  后缀,本例中,基本名称为 m。
  在支持动态链接的系统上,GCC 自动使用在 Darwin 上的共享链接库 libm.so 或 libm.dylib。
  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~晨曦静竹~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值