defined but not used
上一篇 /
下一篇 2009-09-29 16:06:51
/ 个人分类:工作
为了清除代码里定义不使用的变量,调整一下编译器的WarningLevel,原来是 -W (即-Wextra),编译无warning,已经在9月25日清除。
增加 -Wunused ,编译,出现1147个warning。把 -Wunused 改为 -Wunused-variable ,496个。
遇到这样一个问题,在一个 .h 文件中,定义了一个全局变量,还是 static 的,而它仅在两个宏定义中使用,代码如下:
-
static OS_ID db_v_mutex = OS_INVALID_ID;
-
#define DB_V_MUTEX_LOCK() \
-
do \
-
{ \
-
if(db_v_mutex == OS_INVALID_ID)\
-
{ \
-
db_v_mutex = os_mutex_create();\
-
ASSERT(db_v_mutex != OS_INVALID_ID);\
-
} \
-
os_mutex_lock(db_v_mutex, OS_WAIT_FOREVER_TIME);\
-
}while(0)
-
-
#define DB_V_MUTEX_UNLOCK() do{os_mutex_unlock(db_v_mutex);}while(0)
编译器报 db_v_mutex 定义了没有使用。想了一想,情况应该是这样,很多 .c 文件包含了这个头文件,有些 .c 文件使用了 DB_VIEW_MUTEX_LOCK() 和 DB_VIEW_MUTEX_UNLOCK() ,有些没有。用了的文件里不会有问题,没用的文件就会报warning。static 使 db_v_mutex 可以定义在头文件里被多个 .c 文件包含。
如果要解决这个问题,可以再定义一个宏。
-
#define USE_V_MUTEX_LOCK static OS_ID db_v_mutex = OS_INVALID_ID
需要使用 DB_VIEW_MUTEX_LOCK() 和 DB_VIEW_MUTEX_UNLOCK() 的地方加一行:
此法为steedhorse提供,参考ATL的做法。
收藏
举报
TAG: