从C++转C嵌入式的一些有关问题

从C++转C嵌入式的一些问题
前段时间一直在做C++ VC,最近需要做一个嵌入式C的程序,有一些东西不太理解和习惯,想请教一下大家都是些什么意思,见笑了,谢谢!
1。C程序大量的写预编译,为啥要写这么多呢?比如
#ifdef app_feature_bt
extern sint32 abb(int a,int b);
#endif
为什么不直接
if()
{
}
else
{
}

2.函数里也嵌套预编译,什么好处和意思呢?
void fun()
{
  #ifdef app_feature_bt
  x = 9;
  #endif
}

3.C++里一般把函数和变量的定义放在头文件里,那么C程序的定义都放在当前C文件里吗,
比如在a.c文件里
int temp();//声明函数


int temp()//实现函数
{
  return 1;
}
都是这样吗

最后一个比较复杂了,就是不同的C程序模块间参数的传递怎么实现的,都是通过extern 吗
举个例子:
a.c b.c 两个文件
a中定义一个全局函数tempa()
b中extern tempa();
然后调用这个函数实现参数传递或函数的调用吗?

谢谢!


------解决方案--------------------
我谈谈个人理解吧

1,2问题,预编译只是在编译,连接之前的操作,可以减少目标代码量

最后一个问题 是的
------解决方案--------------------
个人感觉你C++搞得一般啊。。。
------解决方案--------------------
关于楼主的第一个和第二个问题:
#ifdef app_feature_bt
可以看做是一个编译开关,若app_feature_bt被定义了,其后面的代码才会被编译,否则的话就不会参与编译,而if else是在运行时根据其判断条件真假进入不同的分支。

第三个问题:
C和C/C++是一样的,一般应该把函数和变量的声明(注意楼主说成了定义,估计是笔误)头文件里的,特别是别的程序文件也要用到这个函数时,在头文件里声明函数和变量能保证类型的一致性,从而使编译器更好的做类型检查。

最后一个问题也一样,最好是把声明放在头文件,然后用到这个函数的程序文件中都包含这个头文件(定义这个函数的程序文件也应该包含这个头文件,这样可以更好的进行类型检查)

------解决方案--------------------
探讨
我觉得我问的这些问题跟C++关系不大吧。。。。

------解决方案--------------------
回答下你第一个问题
通过define和不define app_feature_bt来做一个开关
如果你用if,else那么势必需要定义个变量并且赋值
这样写起来是否方便点呢,而且省去了大括号
其实最主要的原因就是C习惯是这么写
------解决方案--------------------
这样做主要是为了跨平台使用,因为嵌入式系统非常多,可能遵循的标准也不尽相同,这样可以把不同的标准或者特性引入预处理,在各个平台上使用_D指定需要的平台或者特性之类。
------解决方案--------------------
C语言是很重要的语言,建议先学好C再学习C++效果更好。
------解决方案--------------------
探讨

关于楼主的第一个和第二个问题:
#ifdef app_feature_bt
可以看做是一个编译开关,若app_feature_bt被定义了,其后面的代码才会被编译,否则的话就不会参与编译,而if else是在运行时根据其判断条件真假进入不同的分支。

第三个问题:
C和C/C++是一样的,一般应该把函数和变量的声明(注意楼主说成了定义,估计是笔误)头文件里的,特别是别的程序文件也要用到……