Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4066424
  • 博文数量: 251
  • 博客积分: 11197
  • 博客等级: 上将
  • 技术积分: 6862
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-05 14:41
个人简介

@HUST张友东 work@taobao zyd_com@126.com

文章分类

全部博文(251)

文章存档

2014年(10)

2013年(20)

2012年(22)

2011年(74)

2010年(98)

2009年(27)

分类: LINUX

2009-08-27 21:39:38

    最近要将一个算法应用到分布式系统中,以前由于急着想实现这个算法(涉及到矩阵),于是就使用了C++的stl(用了string和vector),主要是方便二维数组参数的传递以及数组长度的自动管理,后来很方便的实现了。
   三天前开始把算法往系统中移植,问题来了。系统全部用C写的,算法模块用C++实现的,于是又一下几种方式:
1,将整个系统用g++重新编译成c++程序,因为系统与文件系统有关,而kernel完全由C实现,所以不做考虑。
2,C语言调用C++的函数?? google了一下,的确有这种方法(参看:),但程序由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文件中。
 
 
 
 
 
阅读(2109) | 评论(0) | 转发(0) |
0

上一篇:linux系统负载

下一篇:标准I/O缓冲区详解

给主人留下些什么吧!~~