压制gcc警告:"警告:这是前一个定义的位置"

max*_*986 2 linux include-guards gcc-warning

我需要围绕标准系统调用的一组包装器 - 打开,监听等.对于这些我有一些"#define",如:

#define open(a,b,c) JCL_Open(a,b,c)
Run Code Online (Sandbox Code Playgroud)

但是当我编译头文件和相关的.c文件时,我收到以下警告:

/jcl_wrappers.h:114:1:警告:"打开"重新定义
/jcl_wrappers.h:113:1:警告:这是前一个定义的位置

我怎么能抑制这些警告?

lot*_*har 5

认沽包括守卫在你的头文件.

基本上你需要将这两行放在头文件的开头

#ifndef _yourincludefilename_h_
#define _yourincludefilename_h_
Run Code Online (Sandbox Code Playgroud)

#endif /* _yourincludefilename_h_ */
Run Code Online (Sandbox Code Playgroud)

在你的最后包括文件.

编辑:
rascher是对的,open不是宏的好名字,因为它会与库函数冲突.通常,使宏全部为大写是很好的C约定,所以我建议将宏更改为

#define OPEN(a,b,c) JCL_Open(a,b,c)
Run Code Online (Sandbox Code Playgroud)

甚至更好

#define XYZ_OPEN(a,b,c) JCL_Open(a,b,c)
Run Code Online (Sandbox Code Playgroud)

其中XYZ是特定于您的代码的前缀.


ojb*_*ass 5

保留标准功能并重命名该功能:

#define myopen(a,b,c) JCL_Open(a,b,c)
Run Code Online (Sandbox Code Playgroud)

有人会后来感谢你.