一直不太明白,C中防止重复定义时非要加下划线干嘛?
譬如:
#ifndef _UARTH_
#define _UARTH_
#endif
纳闷,可否指点一下?
2楼: | >>参与讨论 |
作者: szyzm 于 2006-4-20 18:30:00 发布:
我也不明白!! |
3楼: | >>参与讨论 |
作者: 绿阴深处 于 2006-4-20 19:50:00 发布:
你不加也可以 没什么强制要求。 之所以很多地方(特别是系统定义的)加下划线,我想是一种习惯,为了和普通变量和定义区分。 |
4楼: | >>参与讨论 |
作者: 涤纶 于 2006-4-20 20:25:00 发布:
回复 用是这么用了,为什么也不知道,不会这么多人都有这习惯,还等高人指点一下吧。 |
5楼: | >>参与讨论 |
作者: IceAge 于 2006-4-20 21:08:00 发布:
加下划线是为了防止重复定义 :-) 因为大多数名称没有下划线, 这样可以避免名称冲突,也便于识别。 |
6楼: | >>参与讨论 |
作者: 奔腾的心 于 2006-4-20 21:51:00 发布:
就是个好习惯,无他 |
7楼: | >>参与讨论 |
作者: 风... 于 2006-4-21 9:00:00 发布:
可是: 以下这一段是在文件名为uart.h的文件里的, #ifndef _UARTH_ #define _UARTH_ #endif 有的也用“#ifndef UART_H”的,反正有很多变种,好像似乎为了躲避文件名中的点“.”,而且_UARTH_、UART_H等,与其文件名紧密相连的。 纳闷…… 唉,我一直以为这是一个弱智问题呢^_^ |
8楼: | >>参与讨论 |
作者: computer00 于 2006-4-21 9:05:00 发布:
我一般用两个下划线,例如#define __UART_H__ 这样在取名字时,一般都不用顾忌它是否已经被用了。 因为变量很少取这么奇怪的名字。 |
9楼: | >>参与讨论 |
作者: AIRWILL 于 2006-4-21 9:16:00 发布:
不过,一旦起名成了习惯 这怪名也就不怪啦,冲突也会难免啦 也许这就说编程语言的缺陷啦 |
10楼: | >>参与讨论 |
作者: xwj 于 2006-4-21 9:38:00 发布:
就是作为特殊标识,和普通的定义区分开,防止重名 譬如: #ifndef _UARTH_ //如果没有定义 #define _UARTH_ //那么定义标志 //下面跟着一堆正常的定义 #endif //结束这个if[/#] 因为很多头文件可能被多个文件包含,很多时候会出现重复定义的错误 而采用这种写法时,当重复包含这个文件时,第一次编译到#ifndef _UARTH_时条件满足,if里面的宏定义执行一次, 再次编译到#ifndef _UARTH_时条件不满足,if里面的宏定义就不会再执行了,也就不会出现重复定义的错误了 |
11楼: | >>参与讨论 |
作者: 风... 于 2006-4-21 10:59:00 发布:
非常感谢楼上各位大师,小生有礼了 也就是说,这只是一个习惯,而实际上用什么都行?是吧? 唉,我一直在想,这个奇怪的命名与其文件名有什么关系呢! 再次感谢大家的指点,开始有些醒悟了^_^ |
12楼: | >>参与讨论 |
作者: meng730507 于 2006-4-21 11:20:00 发布:
这只是一个命名规则 当然,如果你有更好的方法,也可以不用这个规则. |
13楼: | >>参与讨论 |
作者: computer00 于 2006-4-21 12:53:00 发布:
楼主来看看这个日志: http://blog.21ic.com/more.asp?NAME=computer00&id=11021 |
14楼: | >>参与讨论 |
作者: 风... 于 2006-4-24 9:48:00 发布:
非常感谢楼上各位高手的指点,非常感谢! 一定再仔细看看! 谢谢啦! |
15楼: | >>参与讨论 |
作者: fushaobing 于 2006-4-25 8:32:00 发布:
我也不明白 那为什么包含的时候文件名是“UART_H”而不是“__UART_H__”呢? |