大头
Table_bottom

标签云
Table_bottom

分类
Table_bottom

日历
十一月
272829303112
3456789
10111213141516
17181920212223
24252627282930
Table_bottom

评论
Table_bottom

留言
Table_bottom

微博
Table_bottom

热门文章
Table_bottom

随机文章
Table_bottom

豆瓣上谁关注这里
Table_bottom

链接
Table_bottom

搜索栏
Table_bottom

RSS
RSS Link
Table_bottom

功能
Table_bottom

页面
Table_bottom

计数器
481573
Table_bottom

访客统计
Table_bottom

存档
Table_bottom

defined but not used

loveisbug posted @ 2009年9月29日 22:41 in 工作 with tags compile warning , 7807 阅读

为了清除代码里定义不使用的变量,调整一下编译器的WarningLevel,原来是 -W (即-Wextra),编译无warning,已经在9月25日清除。

增加 -Wunused ,编译,出现1147个warning。把 -Wunused 改为 -Wunused-variable ,496个。

遇到这样一个问题,在一个 .h 文件中,定义了一个全局变量,还是 static 的,而它仅在两个宏定义中使用,代码如下:

  1. static OS_ID db_v_mutex = OS_INVALID_ID;
  2. #define DB_V_MUTEX_LOCK()       \
  3.         do                                          \
  4.         {                                                 \
  5.                 if(db_v_mutex == OS_INVALID_ID)\
  6.                 {                            \
  7.                         db_v_mutex = os_mutex_create();\
  8.                         ASSERT(db_v_mutex != OS_INVALID_ID);\
  9.                 }                            \
  10.                 os_mutex_lock(db_v_mutex, OS_WAIT_FOREVER_TIME);\
  11.         }while(0)
  12.  
  13. #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 文件包含。

如果要解决这个问题,可以再定义一个宏。

  1. #define USE_V_MUTEX_LOCK static OS_ID db_v_mutex = OS_INVALID_ID

需要使用 DB_VIEW_MUTEX_LOCK() 和 DB_VIEW_MUTEX_UNLOCK() 的地方加一行:

  1. USE_V_MUTEX_LOCK;

此法为steedhorse提供,参考ATL的做法。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter