一个关于编程规范的问题
我读过一些C++方面的书,也做过一些开发,但项目经验并不丰富,今天读gloox(Jabber协议的客户端API, http://camaya.net/gloox)的源代码,发现一个现象,它在定义任何一个类的时候,都是这样定义的
如:Client类:
#include "macros.h "
class GLOOX_API Client {
...
}
在macors.h中,GLOOX_API的定义如下:
#ifndef GLOOX_API
# define GLOOX_API
#endif
这种写法从编程的意义上说GLOOX_API是没有意义的,而这个软件包的编程风格很好,所以我想是不是编程规范方面的一些比较好的习惯。
请指教
因为不是什么关键问题,就给20分吧,分不在多,呵呵
[解决办法]
为了提高 Client类 的移植性 ......
可能有的使用环境下,
定义了 一个有意义的GLOOX_API,
所以,
在 Client类 的定义中使用的是 class GLOOX_API Client { ...
也有可能没有定义,(因为不会只有一个 macors.h文件独立存在,可能它和多个和文件被同时包含,而在其他的 和文件中可能定义了这个宏, 也可能都没有定义 )
所以,在macors.h中,
使用
#ifndef GLOOX_API
# define GLOOX_API
#endif
(在没有定义 GLOOX_API 的情况下, 定义该宏, 防止class GLOOX_API Client 出错)
[解决办法]
一般来说,正规的公司都会有一个编程风格的。
至于个人使用的,可以参考msdn介绍匈牙利命名法的部分,里面甚至对注释格式都有了说明。
[解决办法]
有时候定义空宏仅起注释作用,比如在有些大的工程里就可以看到类似:
ABSTRACT class App1 { ... };
SEALED class App2 { ... };
PRIVATE class App3 { ... };
这样的代码,通常类似ABSTRACT SEALED PRIVATE等都定义为空,除要是为了读代码或者维护代码的人能够理解其用意。
[解决办法]
这是保护符,在文件内部包含保护符保护头文件,以避免在多次包含时重新定义。一般采用以下格式。 #ifndef guard #define guard //....文件内容 #endif
定义时遵守以下规则:1.保护符使用唯一名称 2.谨遵上面的标准形式。