user-0 提问: c语言多人开发，配置文件以及代码合入流程请教，感谢。

回复:
user: user-0
content: 引用 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中定义的方法了。

user: user-1
content: 引用 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。所有的机能模块会受到一个事件循环的控制，不存在跨机能调用，换言之，所有的事件处理都是这个循环中，机能甲要想调用机能乙中某个模块的函数，必须经过这个事件循环的同意，并且由事件循环去代为调用，然后把结果还给甲。这是我见过个人觉得比较不错的嵌入式上面的一个方案，各个模块之间耦合很低，各个机能之间几乎没有耦合。

user: user-0
content: 引用 1 楼 sinat_37764097 的回复:对于同一个机能模块：一个头文件，无数个C文件。 对于不同的机能模块：不同的头文件。 您好，我是按照模块分的，按照您的机能理解，就是不存在跨机能调用函数？？？如果存在跨机能调用，那这个.H文件应该如何部署？谢谢

user: user-0
content: 引用 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呢？？谢谢了

user: user-0
content: 引用 3 楼 sinat_37764097 的回复:在我印象中，VS开发，main函数的会默认一个有一个参数，这个参数就是argv[0]，他是这个程序的绝对路径。你可以顺着这个思路看看Linux下是不是一样，可不可以通过这个方法，找到config文件夹。 您好，我明白您这个意思，谢谢，程序关键是合作开发，可能调用的就是对方的一个函数，如果从我的main函数开始传递路径到对方，有点太远了。您这个建议非常好，我别的程序里，会用到，万分感谢

user: user-1
content: 在我印象中，VS开发，main函数的会默认一个有一个参数，这个参数就是argv[0]，他是这个程序的绝对路径。你可以顺着这个思路看看Linux下是不是一样，可不可以通过这个方法，找到config文件夹。

user: user-2
content: 1.通用模块开发，首先定义模块的接口。    然后再完成功能代码。也就是常说的模块之间松耦合。    具体来说，多个模块并行开发，不同开发人员先要定义好自己的.h。 某个模块修改，其他相关人员一定要及时同步.h.  2.不管是多人开发，还是单人开发 仅仅从代码管理来说 Git都是不二之选

user: user-1
content: 对于同一个机能模块：一个头文件，无数个C文件。 对于不同的机能模块：不同的头文件。

user: user-3
content: 引用 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的都可以通过此函数来获取变量。

user: user-0
content: 引用 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处理好吧？也不知道这个协同开发有没有业界规范。真得好好学学。谢谢您

user: user-2
content: 引用 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中不就可以了吗？

user: user-0
content: 引用 9 楼 user-4 的回复:用svn . 谁提交谁修改。 谢谢您，但svn只是项目管理，我懂您意思，但您没懂我的需求。。因为第二个人开发的代码是具有独立功能的，不想把.h文件都和别人的混合到一起，这样第三个人，想用第二个人的功能，无法单独抽取头文件了。谢谢

user: user-4
content: 用svn . 谁提交谁修改。

user: user-0
content: [/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中，就可以了。您说的事件循环应该比我这个想法复杂吧？