大程序结构:声明

#main.c

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

int main(void){

    int a=5;
    int b=6;
    printf("%f\n".max(a,gAll));

    return 0;
} 
#max.c

int gAll = 12;
double max(double a,double b){

    return a>b?a:b;
}
#max.h

double max(double a,double b);
extern int gAll;

变量的声明

  • int i; 是变量的定义
  • extern int i;是变量的声明

声明和定义

  • 声明是不产生代码的东西
    • 函数原型
    • 变量声明
    • 结构声明
    • 宏声明
    • 枚举声明
    • 类型声明
    • inline函数
      -定义是产生代码的东西

头文件

  • 只有声明可以被放在头文件中
    • 是规则不是法律
  • 否则会造成一个项目中多个编译单元里有重名的实体
    • *某些编译器允许几个编译单元中存在同名的函数,或者用weak修饰符来强调这种存在

重复声明

  • 同一个编译单元里,同名的结构不能被重复声明
  • 如果你的头文件里有结构的声明,很难这个头文件不会在一个编译单元里被#include多次
  • 所以需要“标准头文件结构”
#main.c

#include<stdio.h>
#include "max.h"
#include "min.h"

int main(void){

    int a=5;
    int b=6;
    printf("%f\n".max(a,gAll));

    return 0;
} 
#max.c

int gAll = 12;
double max(double a,double b){

    return a>b?a:b;
}
#max.h

#ifndef _MAX_H_
#define _MAX_H_

double max(double a,double b);
extern int gAll;

#endif
#min.h

#include "max.h"

标准头文件结构

#ifndef _LIST_HEAD_
#define _LIST_HEAD_

#include "node.h"

typedef struct _list{

    Node* head;
    Node* tail;
}List;

#endif
  • 运用条件编译和宏,保证这个头文件在一个编译单元中只会被#include一次
  • #pragma once 也能起到相同的作用,但是不是所有的编译器都支持
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值