免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 835 | 回复: 0
打印 上一主题 下一主题

注意编程规范 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-27 21:39 |只看该作者 |倒序浏览
    最近要将一个算法应用到分布式系统中,以前由于急着想实现这个算法(涉及到矩阵),于是就使用了C++的stl(用了string和vector),主要是方便二维数组参数的传递以及数组长度的自动管理,后来很方便的实现了。
   三天前开始把算法往系统中移植,问题来了。系统全部用C写的,算法模块用C++实现的,于是又一下几种方式:
1,将整个系统用g++重新编译成c++程序,因为系统与文件系统有关,而kernel完全由C实现,所以不做考虑。
2,C语言调用C++的函数?? google了一下,的确有这种方法(参看:
http://tzc.is-programmer.com/posts/551.html
),但程序由windows移植到linux后一直编译/链接有错误。
3,只能做最坏的打算了,用C语言重写算法。

花了一天半的时间,把算法用C实现了一个功能精简版本。(用一维数组模拟了二维数组,避免了复杂的二维指针传递的限制和复杂性)

当我要把代码移到linux下用gcc编译时,又出现问题了,提示跟前两天编c++的程序一样,大致意思是某某东西被多次定义了,检查了几分钟,终于发现问题。

问题所在:
有以下文件 xx.h xx.c main.c
在windows下,由于我没有建工程main.c不回主动链接xx.o,所以为了方便调试,我在main.c里加了#include "xx.c", 于是顺利通过。

在linux下,我使用 gcc -o main main.c xx.c 于是问题出现了重新定义之类的error一大堆,检查的过程中我想到main.c中包含了xx.c,于是我想到两种解决方法:
1,在main.c去掉#include "xx.c"
2,使用gcc -o main main.c
实践证明,二者皆可行。

于是回过头调C++的程序,马上pass了。。。。。。两天的时间就这样被我浪费了,主要是平时变成没有注意规范。


注意的问题:
在预编译时,#include指令将包含的头文件的内容结合预处理指令扩展到源文件中,在头文件中最好只包含声明(不是必须,不要包含头文件),在同名(方便管理)的源文件中的一些声明(需要包含头文件,生成目标文件时需要有语法检查),在main.c中包含.h 即可编程。

头文件应该放些什么?
1,宏定义   结构体,联合体,枚举的声明   typedef声明  外部函数声明  全局变量声明   
2,当声明或宏定义需要在多个文件中共享时,尤其需要把他们加入到头文件。
3,永远不要把外部函数原型(即外部函数声明)放到.c文件中。
4,如果一个宏或声明为一个.c文件按私有,最好放在.c文件中。







本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/87570/showart_2039061.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP