源文件和头文件的区别

Posted on 2020-05-17 11:35  黑炽  阅读(706)  评论(0编辑  收藏  举报

同学帮忙给我写的一份

#pragma once //(批注)用这个保证不会重包含

//(批注)在这里写包含你需要用到的库,用到的越少越好,用到多个库时按字典顺序排列
#include <iostream>

//(批注)在自己写的库中,尽量(尽最大可能)不用using nsmespace,一定不要用

//(批注)每个函数上面可以写注释,这是我写注释的规范(不是标准规范)
//(接批注)我也不常写注释,我自己调用的话一般只标注功能,但是给别人写的库一定要有完整注释,特别是头文件中

/*
将data输出((批注)函数的功能)
@data:要输出的数据((批注)函数的参数,顺序从左到右来)
@return:无((批注)函数的返回值)
*/
void Print(int data);

/*
将两个数相加
@a:左操作数
@b:右操作数
@return:相加的结果
*/
int Add(int a,int b);

/*(批注)函数声明可以只写类型,但是如果参数较多,最好写上,不然看着乱,对一看就知道是干啥的参数不用写
将两个数相加
@int:左操作数
@int:右操作数
@overflow:检测是否溢出,若传入null则不检测
          否则将溢出结果写入其中
@return:相加的结果
*/
int Add(int ,int ,bool *overflow);
 1 #include "My.h"
 2 #include "My.h" //(批注)多次包含应该保证一定不会冲突
 3 using namespace std;//(批注)可以在这里加命名空间引用,尽量减少使用范围
 4 
 5 //(批注)在源文件中声明并定义的函数,只有本文件会用到,别人包含头文件也无法使用(头文件中没声明)
 6 void PrintMsg(int x,int y)
 7 {
 8     bool overflow;
 9     cout<<Add(x,y,&overflow)<<" 溢出:"<<overflow<<endl;
10 }
11 
12 int main()
13 {
14     PrintMsg(123,456);
15     PrintMsg(2147483647,2147483647);
16     PrintMsg(-2147483647,-2147483647);
17     PrintMsg(2147483647,-2147483647);
18 }
#include "My.h"
//(批注)函数间空格
void Print(int data)
{
    std::cout<<data;
}

int Add(int a,int b)
{
    return a+b;
}

int Add(int x,int y,bool *overflow)
{
    if(overflow==nullptr)//(批注)特殊情况可以写到开头
        return Add(x,y);
        
    int ret=x+y;//(批注)用到的临时变量尽量起有意义的名字,比如ret是return的缩写,不要写a,b,c,z之类的
    //(接批注)参数这种结合函数功能一看就知道是干啥的,起名就不需要复杂了,写成x,y还更好理解,overflow是溢出
    if((x>>(sizeof(int)-1))^(y>>(sizeof(int)-1)))//比较符号位,若不同,则不会溢出
        *overflow=false;//(批注)判断,循环,只有一条语句时,不要花括号,但是要缩进
    else if(x>0&&ret<0||x<0&&ret>0)//若操作数符号位相同,计算结果符号位与操作数不同
        *overflow=true;
    return ret;
}