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 的,而它仅在两个宏定义中使用,代码如下:

  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的做法。


TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-03  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 10627
  • 日志数: 13
  • 图片数: 1
  • 建立时间: 2009-02-12
  • 更新时间: 2009-12-05

RSS订阅

Open Toolbar