C语言项目中头文件/代码文件的组织问题(使用VC6.0)

 

个人备忘:

 

1.新建一个文本文件命名为main.c,使用VC6.0打开并编译,VC6.0会在当前文件夹下自动创建“工作区间”和“工程”文件,如:main.dsw,main.dsp等;然后就可以在“工程”下新建或添加你的.c和.h文件。

 

2.消灭头文件被多次include导致的错误。在每个头文件中加上如下的定义:(假设头文件的名字为MyDemo.h)

#ifndef MY_DEMO_H

#define MY_DEMO_H

 

//...

 

#endif // MY_DEMO_H

 

3.文件后缀名不要混用.cpp,只使用.c/.h。如果是使用VC6直接创建的C++项目,建议后缀名统一用.cpp,总之不要混用。

 

4.头文件中一般只包含必要的全局类型/变量定义和函数接口定义。关于函数接口定义,要思考清楚哪些函数是要提供给其它模块使用的,哪些是本模块内部使用的,只需把对外的(供外部模块使用的)函数接口定义在头文件中即可。不对外公开的函数,可用static定义之。

 

5.一个完整代码示例:

main.c

 

#include "stdio.h"

#include "myfun1.h"
#include "myfun2.h"

void main()
{
    //加减法测试
    test_add_minus(9, 2);

    //乘除法测试
    test_multiply_divide(9, 3);

    printf("Please Press [Enter] to Exit..\n\n");
    getchar();
}

 

myfun1.h

 

#ifndef _MYFUN1_H
#define _MYFUN1_H

//加减法测试
void test_add_minus();

#endif

 

 

myfun1.c

 

#include "stdio.h"
#include "myfun1.h"

//加法
static int add(int a, int b)
{
    return (a+b);
}

//减法
static int minus(int a, int b)
{
    return (a-b);
}

//加减法测试
void test_add_minus(int a, int b)
{
    int m = add(a, b);
    int n = minus(a, b); 
    printf("a+b=%d\n\n", m);
    printf("a-b=%d\n\n", n);
}

 

myfun2.h

 

#ifndef _MYFUN2_H
#define _MYFUN2_H
 
//乘除法测试
void test_multiply_divide(int a, int b);

#endif

 

myfun2.c

 

#include "stdio.h"
#include "myfun2.h"

//乘法
static int multiply(int a, int b)
{
    return (a*b);
}

//除法
static int divide(int a, int b)
{
    return (a/b);
}

//乘除法测试
void test_multiply_divide(int a, int b)
{
    int m = multiply(a, b);
    int n = divide(a, b); 
    printf("a*b=%d\n\n", m);
    printf("a/b=%d\n\n", n);
}

 

6.头文件应是函数功能模块的组织,就像面向对象编程中的一个类的定义一样。为避免代码文件过大,函数功能又能有效组织,可以将多个代码文件对应一个头文件。这里还是要从功能组织去思考,或者说从函数接口的组织去思考,头文件应是将相似的功能函数定义在一起,便于查找或梳理相似功能的函数。这时,与单个头文件对应的多个代码文件很像C#语言中的分部类定义,呵呵。7中是对5中的代码改进后的完整示例。

 

7.一个完整代码示例(多个代码文件对应一个头文件):

main.c

 

#include "stdio.h"

#include "myfun.h"

void main()
{
    //加减法测试
    test_add_minus(9, 2);

    //乘除法测试
    test_multiply_divide(9, 3);

    printf("Please Press [Enter] to Exit..\n\n");
    getchar();
}

 

 

myfun.h

 

#ifndef _MYFUN_H
#define _MYFUN_H

//加减法测试
void test_add_minus();

//乘除法测试
void test_multiply_divide(int a, int b);

#endif

 

 

myfun1.c

 

#include "stdio.h"
#include "myfun.h"

//加法
static int add(int a, int b)
{
    return (a+b);
}

//减法
static int minus(int a, int b)
{
    return (a-b);
}

//加减法测试
void test_add_minus(int a, int b)
{
    int m = add(a, b);
    int n = minus(a, b); 
    printf("a+b=%d\n\n", m);
    printf("a-b=%d\n\n", n);
}

 

 

myfun2.c

 

#include "stdio.h"
#include "myfun.h"

//乘法
static int multiply(int a, int b)
{
    return (a*b);
}

//除法
static int divide(int a, int b)
{
    return (a/b);
}

//乘除法测试
void test_multiply_divide(int a, int b)
{
    int m = multiply(a, b);
    int n = divide(a, b); 
    printf("a*b=%d\n\n", m);
    printf("a/b=%d\n\n", n);
}

 

 

 作者:夏春涛 xchuntao@163.com 

 

 

 

时间: 2024-08-29 14:44:49

C语言项目中头文件/代码文件的组织问题(使用VC6.0)的相关文章

web app-关于web项目中webapp和web-inf文件下文件的看法

问题描述 关于web项目中webapp和web-inf文件下文件的看法 webapp下的文件夹存放的都是css,js,img之类的东西,而web-inf下存放的都是jsp,可以这样理解吗 解决方案 webapp包含web-inf css,js,img可以放在webapp,也可以放在web-inf,差别就在于web-inf下的东西是有权限的访问,推荐都放 在web-inf 解决方案二: 这有一个权限的问题,即web-inf的访问时有权限的,但一般放在web-inf下比较好 解决方案三: WEB-I

java web-web项目中怎么写代码,才能减少中文乱码的产生

问题描述 web项目中怎么写代码,才能减少中文乱码的产生 近期实习一直在改bug,发现经常会出现中文乱码的问题,请问中文乱码产生的原因有哪些 ,应该怎么做才能避免这些问题,如果发现是中文乱码的问题,解决方法有哪些? 解决方案 你要确定所有用到编码的地方都统一用一种,比如utf8.这样乱码的几率就很少. 解决方案二: 对涉及到编码的地方编码同一即可 解决方案三: 这个是编解码的问题,统一编解码方式.避免这种问题要在写代码时多注意.之所以出现乱码,说明字符串没进行相应的解码,统一提取出一个解码的函数

android 项目中怎么用代码判断手机的某项应用的权限是否允许或者禁止,

问题描述 android 项目中怎么用代码判断手机的某项应用的权限是否允许或者禁止, android 项目中怎么用代码判断手机的某项应用权限是否允许或者禁止,比如拍照权限,定位权限,,,这些权限在manifest 配置文件中多已经配置过了, 解决方案 可以获取AndroidManifest到这里所有配置的权限,然后查看你想查看的那个权限是否包含里面就可以了吧 解决方案二: 判断 ContextCompat.checkSelfPermission(context, permission) == P

上传文件 ,当IE11遇上了VC6.0

问题描述 上传文件 ,当IE11遇上了VC6.0 用上传了一个cpp文件,接着用VC6.0打开该cpp文件,改完保存时提示"Cannot save file. The file may be in use by another application",关闭IE,发现硬盘上该cpp文件已经消失了!以前使用IE9时没有遇到过这个问题.我用记事本也可以修改该cpp文件,但VC不行,不知道其中什么原因,该如何解决这个问题? 解决方案 这和文件打开共享模式的机制有关.如果文件是共享读方式打开的

log4j2 0-用了log4j2,web项目中只有控制台输出,没有日志记录。tomcat7.0.59,谁知道什么原因

问题描述 用了log4j2,web项目中只有控制台输出,没有日志记录.tomcat7.0.59,谁知道什么原因 用了log4j2,web项目中只有控制台输出,没有日志记录.tomcat7.0.59,谁知道什么原因

Android项目中引用本地aar文件的方法_Android

随着项目越来越多,代码的复用就变得异常重要,这时候就要进行模块化编程,就是把一些通用的组件或者类库做成单独的模块,其他项目直接进行引用就好.针对Android开发最常见的就是Android Library,在Gradle出现之前引用Android Library的方式也很繁琐,但是有了Gradle一切变得非常简单方便. aar 何为aar?大家都知道jar文件把,如果你有一个Android Library项目,可以很容易的导出jar文件,然后在其他项目中很方便的引用,aar和jar类似,区别就是

Android项目中引用本地aar文件的方法

随着项目越来越多,代码的复用就变得异常重要,这时候就要进行模块化编程,就是把一些通用的组件或者类库做成单独的模块,其他项目直接进行引用就好.针对Android开发最常见的就是Android Library,在Gradle出现之前引用Android Library的方式也很繁琐,但是有了Gradle一切变得非常简单方便. aar 何为aar?大家都知道jar文件把,如果你有一个Android Library项目,可以很容易的导出jar文件,然后在其他项目中很方便的引用,aar和jar类似,区别就是

ASP老项目中如何搜索一个文件在哪些地方被引用

ASP老项目中,我们经常会遇到要搜索一个文件在哪些地方被引用,从而修改那些引用它的文件.由于asp没有搜索功能,因此我们需要借助Visual Studio来解决. 我们可以利用VS2008来打开一个网站,打开我们的asp项目的主目录. 然后,在 Edit->Find and Replace->Find in Files会打开一个搜索对话框:Find what: 填写你需要搜索的asp文件名Look in :   选择Entire Solution

c语言 发彩信 模块-PC直接控制GPRS模块,用VC6.0编写程序发送彩信,简单就行,有的大侠拜托了

问题描述 PC直接控制GPRS模块,用VC6.0编写程序发送彩信,简单就行,有的大侠拜托了 电脑连接一个 GPRS模块,要求用C语言编程控制GPRS模块发送彩信,应该包含彩信封装等内容,希望能有人帮帮忙,可以的话程序发我邮箱:Lzm11211109@163.com.并告知使用的硬件是什么, 谢谢各位大侠了. 解决方案 http://download.csdn.net/download/qianshuyuankk/4800261 解决方案二: 短信猫如何发彩信? 短信猫可以发彩信吗? 这个,得看短