c语言多人开发,配置文件以及代码合入流程请教,感谢。

一升米 2018-11-16 09:45:02
一些基础问题,想咨询下,各位大神,谢谢了
1、通用的模块开发流程应该如何?
2、配置文件应该如何查找?
例如目前项目目录下有文件夹bin,文件夹include,文件夹config,配置文件都放在config中。在代码中配置的是相对路径到config文件夹查找配置文件的,现在发现这个相对文件夹与我在哪个目录执行bin下的文件有关系。这样的话,经常导致找不到配置文件。请问各位大神,这个你们是怎么处理的?就是怎么设置的配置文件,使其可以被找到?谢谢
3、不同开发人员,开发的不同模块合入到一起的问题。
例如,用户A和用户B同时开发各自的模块,
用户A写了一个aaa.c的文件
用户B写了一个bbb.c的文件,和一个bbb.h的头文件,其中bbb.c中开头就#include "bbb.h"
bbb.h文件的大概内容是:

#ifndef INCLUDE_BBB_H
#define INCLUDE_BBB_H

#define LEN 50 //bbb.c中使用
static char ARRAY[]="HELLO" //bbb.c中使用的常量数组
int func1(char*); //bbb.c中的函数
int func2(char*); //bbb.c中的函数
int func3(char*); //bbb.c中的函数,但是aaa.c中要用。

#endif

目前的问题就是aaa.c中为了用bbb.c中的func3函数,只能在aaa.c的开头#include "bbb.h",但这样就会报ARRAY定义重复的错误,我目前将下面2句话转移到bbb.c中了,
#define LEN 50 //bbb.c中使用
static char ARRAY[]="HELLO" //bbb.c中使用的常量数组
同时删除bbb.c中的#include "bbb.h",但我不知道这样做是否是标准流程的做法?大家这种协作开发是怎么处理C文件和H文件的??谢谢
...全文
216 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
一升米 2018-11-17
  • 打赏
  • 举报
回复
引用 13 楼 hjwang77 的回复:
不建议在头文件中定义变量 可以在a.c中定义,在a.h中extern下,那所有包含a.h的c文件都可以用 或者可以仿照c++,a.c中定义变量和所有访问此变量的函数,将其包到头文件a.h中,所有包含a.h的都可以通过此函数来获取变量。
谢谢您了,感觉你说的C++就是面向对象的那种getter和setter方法了吧??呵呵,我这里不是定义变量是想声明一个常量,应该是 #define AAA "HELLO WORLD"这种格式,按照您说的,我这个应该放到A.c中吧??A.h中只放置A.c中相关函数的声明。然后其他人include A.h,就可以使用A.c中定义的方法了。
云山大侠 2018-11-16
  • 打赏
  • 举报
回复
引用 6 楼 sys0613 的回复:
[quote=引用 1 楼 sinat_37764097 的回复:]
对于同一个机能模块:一个头文件,无数个C文件。
对于不同的机能模块:不同的头文件。

您好,我是按照模块分的,按照您的机能理解,就是不存在跨机能调用函数???如果存在跨机能调用,那这个.H文件应该如何部署?谢谢[/quote]

一个机能包含了很多模块,比如dev.h 包含了:lcd.c key.c usart.c。换言之lcd.c key.c usart.c共用一个dev.h。所有的机能模块会受到一个事件循环的控制,不存在跨机能调用,换言之,所有的事件处理都是这个循环中,机能甲要想调用机能乙中某个模块的函数,必须经过这个事件循环的同意,并且由事件循环去代为调用,然后把结果还给甲。这是我见过个人觉得比较不错的嵌入式上面的一个方案,各个模块之间耦合很低,各个机能之间几乎没有耦合。
一升米 2018-11-16
  • 打赏
  • 举报
回复
引用 1 楼 sinat_37764097 的回复:
对于同一个机能模块:一个头文件,无数个C文件。 对于不同的机能模块:不同的头文件。
您好,我是按照模块分的,按照您的机能理解,就是不存在跨机能调用函数???如果存在跨机能调用,那这个.H文件应该如何部署?谢谢
一升米 2018-11-16
  • 打赏
  • 举报
回复
引用 2 楼 xian_wwq 的回复:
1.通用模块开发,首先定义模块的接口。 然后再完成功能代码。也就是常说的模块之间松耦合。 具体来说,多个模块并行开发,不同开发人员先要定义好自己的.h。 某个模块修改,其他相关人员一定要及时同步.h. 2.不管是多人开发,还是单人开发 仅仅从代码管理来说 Git都是不二之选
您好,git已经使用,主要问题就是这个h文件有点蒙圈了,现在情况是A.c用A的A.h文件,B要用A.c的函数,也要include A.h文件,经常报错就是A.h里面有的东西被定义了2遍,您说是不是应该A.c中不应该#include A.h呢??谢谢了
一升米 2018-11-16
  • 打赏
  • 举报
回复
引用 3 楼 sinat_37764097 的回复:
在我印象中,VS开发,main函数的会默认一个有一个参数,这个参数就是argv[0],他是这个程序的绝对路径。你可以顺着这个思路看看Linux下是不是一样,可不可以通过这个方法,找到config文件夹。
您好,我明白您这个意思,谢谢,程序关键是合作开发,可能调用的就是对方的一个函数,如果从我的main函数开始传递路径到对方,有点太远了。您这个建议非常好,我别的程序里,会用到,万分感谢
云山大侠 2018-11-16
  • 打赏
  • 举报
回复
在我印象中,VS开发,main函数的会默认一个有一个参数,这个参数就是argv[0],他是这个程序的绝对路径。你可以顺着这个思路看看Linux下是不是一样,可不可以通过这个方法,找到config文件夹。
xian_wwq 2018-11-16
  • 打赏
  • 举报
回复
1.通用模块开发,首先定义模块的接口。
然后再完成功能代码。也就是常说的模块之间松耦合。
具体来说,多个模块并行开发,不同开发人员先要定义好自己的.h。
某个模块修改,其他相关人员一定要及时同步.h.

2.不管是多人开发,还是单人开发
仅仅从代码管理来说
Git都是不二之选
云山大侠 2018-11-16
  • 打赏
  • 举报
回复
对于同一个机能模块:一个头文件,无数个C文件。
对于不同的机能模块:不同的头文件。
英雄@末路 2018-11-16
  • 打赏
  • 举报
回复
引用 12 楼 sys0613 的回复:
[quote=引用 11 楼 xian_wwq 的回复:]
[quote=引用 5 楼 sys0613 的回复:]
[quote=引用 2 楼 xian_wwq 的回复:]
1.通用模块开发,首先定义模块的接口。
然后再完成功能代码。也就是常说的模块之间松耦合。
具体来说,多个模块并行开发,不同开发人员先要定义好自己的.h。
某个模块修改,其他相关人员一定要及时同步.h.

2.不管是多人开发,还是单人开发
仅仅从代码管理来说
Git都是不二之选

您好,git已经使用,主要问题就是这个h文件有点蒙圈了,现在情况是A.c用A的A.h文件,B要用A.c的函数,也要include A.h文件,经常报错就是A.h里面有的东西被定义了2遍,您说是不是应该A.c中不应该#include A.h呢??谢谢了[/quote]

既然报错是重复定义,那就避免重复定义


#define LEN 50 //bbb.c中使用
static char ARRAY[]="HELLO" //bbb.c中使用的常量数组

相关定义放在 bbb.c中不就可以了吗?
[/quote]

谢谢您,是不是这些定义放到aaa.c中更好呢?不放在aaa.h中了,因为是B用A,这些东西是A的东西,是不是直接放到aaa.c中更合理 。。抱歉,我真的是想弄清这个规范性的东西,有些较真了哈,谢谢。我看 您写的是放在bbb.c中了,所以就较真了。因为b是用a的函数,所以希望应该是所有东西都让A处理好吧?也不知道这个协同开发有没有业界规范。真得好好学学。谢谢您[/quote]

不建议在头文件中定义变量
可以在a.c中定义,在a.h中extern下,那所有包含a.h的c文件都可以用
或者可以仿照c++,a.c中定义变量和所有访问此变量的函数,将其包到头文件a.h中,所有包含a.h的都可以通过此函数来获取变量。
一升米 2018-11-16
  • 打赏
  • 举报
回复
引用 11 楼 xian_wwq 的回复:
[quote=引用 5 楼 sys0613 的回复:] [quote=引用 2 楼 xian_wwq 的回复:] 1.通用模块开发,首先定义模块的接口。 然后再完成功能代码。也就是常说的模块之间松耦合。 具体来说,多个模块并行开发,不同开发人员先要定义好自己的.h。 某个模块修改,其他相关人员一定要及时同步.h. 2.不管是多人开发,还是单人开发 仅仅从代码管理来说 Git都是不二之选
您好,git已经使用,主要问题就是这个h文件有点蒙圈了,现在情况是A.c用A的A.h文件,B要用A.c的函数,也要include A.h文件,经常报错就是A.h里面有的东西被定义了2遍,您说是不是应该A.c中不应该#include A.h呢??谢谢了[/quote] 既然报错是重复定义,那就避免重复定义 把

#define LEN 50         //bbb.c中使用
static char ARRAY[]="HELLO"        //bbb.c中使用的常量数组
相关定义放在 bbb.c中不就可以了吗? [/quote] 谢谢您,是不是这些定义放到aaa.c中更好呢?不放在aaa.h中了,因为是B用A,这些东西是A的东西,是不是直接放到aaa.c中更合理 。。抱歉,我真的是想弄清这个规范性的东西,有些较真了哈,谢谢。我看 您写的是放在bbb.c中了,所以就较真了。因为b是用a的函数,所以希望应该是所有东西都让A处理好吧?也不知道这个协同开发有没有业界规范。真得好好学学。谢谢您
xian_wwq 2018-11-16
  • 打赏
  • 举报
回复
引用 5 楼 sys0613 的回复:
[quote=引用 2 楼 xian_wwq 的回复:]
1.通用模块开发,首先定义模块的接口。
然后再完成功能代码。也就是常说的模块之间松耦合。
具体来说,多个模块并行开发,不同开发人员先要定义好自己的.h。
某个模块修改,其他相关人员一定要及时同步.h.

2.不管是多人开发,还是单人开发
仅仅从代码管理来说
Git都是不二之选

您好,git已经使用,主要问题就是这个h文件有点蒙圈了,现在情况是A.c用A的A.h文件,B要用A.c的函数,也要include A.h文件,经常报错就是A.h里面有的东西被定义了2遍,您说是不是应该A.c中不应该#include A.h呢??谢谢了[/quote]

既然报错是重复定义,那就避免重复定义


#define LEN 50 //bbb.c中使用
static char ARRAY[]="HELLO" //bbb.c中使用的常量数组

相关定义放在 bbb.c中不就可以了吗?
一升米 2018-11-16
  • 打赏
  • 举报
回复
引用 9 楼 smwhotjay 的回复:
用svn . 谁提交谁修改。
谢谢您,但svn只是项目管理,我懂您意思,但您没懂我的需求。。因为第二个人开发的代码是具有独立功能的,不想把.h文件都和别人的混合到一起,这样第三个人,想用第二个人的功能,无法单独抽取头文件了。谢谢
smwhotjay 2018-11-16
  • 打赏
  • 举报
回复
用svn . 谁提交谁修改。
一升米 2018-11-16
  • 打赏
  • 举报
回复
[/quote] 您好,我是按照模块分的,按照您的机能理解,就是不存在跨机能调用函数???如果存在跨机能调用,那这个.H文件应该如何部署?谢谢[/quote] 一个机能包含了很多模块,比如dev.h 包含了:lcd.c key.c usart.c。换言之lcd.c key.c usart.c共用一个dev.h。所有的机能模块会受到一个事件循环的控制,不存在跨机能调用,换言之,所有的事件处理都是这个循环中,机能甲要想调用机能乙中某个模块的函数,必须经过这个事件循环的同意,并且由事件循环去代为调用,然后把结果还给甲。这是我见过个人觉得比较不错的嵌入式上面的一个方案,各个模块之间耦合很低,各个机能之间几乎没有耦合。[/quote] 收到,收到,特别感谢。其实像您说的,情况1,我要就是去把循环事件搞懂,情况2,要不就是一个机能内,例如lcd.c由用户A开发,key.c 由用户B开发,但通过版本管理系统GIT或者svn。用户A和用户B共同维护一个头文件,dev.h。 其实我想用的场景是模块化开发,例如密码校验功能,有开发者A写,他写一个AA.c和AA.h,这样用户B需要使用密码校验功能时,直接把A的代码拿来就能用,拿来一个AA.h文件将AA.c拷贝到用户B中,就可以了。您说的事件循环应该比我这个想法复杂吧?

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧