[语法]“(void) i” 是什么意思?

diaoni 2009-01-19 11:27:52
最近在看代码的时候看到类似这样的语句,VC2005可以编译通过,不知道是什么意思,请高手解释一下:

int i;
(void) i;

//--------------------------------------------------------------

以下是原本的代码(抽取了其中相关的部分),是用于锁定信号量的:


typedef int _glthread_Mutex;

#define _glthread_DECLARE_STATIC_MUTEX(name) static _glthread_Mutex name = 0

#define _glthread_LOCK_MUTEX(name) (void) name

#define _glthread_UNLOCK_MUTEX(name) (void) name

_glthread_DECLARE_STATIC_MUTEX(OneTimeLock);

static void one_time_init() {
_glthread_LOCK_MUTEX(OneTimeLock);
// do something...
_glthread_UNLOCK_MUTEX(OneTimeLock);
}
...全文
418 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
diaoni 2009-01-21
  • 打赏
  • 举报
回复
想了下,可能是我犯傻了...

这个宏应该只是用作一个占位符,在不同的系统下,肯定是要重新定义的
kangjian1 2009-01-20
  • 打赏
  • 举报
回复
This is a dummy code. The implementation is ignored.
waizqfor 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 nineforever 的回复:]
引用 5 楼 waizqfor 的回复:
引用 4 楼 hityct1 的回复:
避免编译器提示变量i未被使用。

第一个用途应该跟4L说的差不多 还有一个用途应该是改void类型 方便于以后在不能确定i的类型的时候 给它赋值


void本身是不能作为存储类型的,你如何“在不能确定i的类型的时候 给它赋值”?
[/Quote]
哦 定义弄混了 受教了
bingbingzhe 2009-01-20
  • 打赏
  • 举报
回复
其实很关心楼主说的问题,我也想知道!
diaoni 2009-01-20
  • 打赏
  • 举报
回复
- -b 其实我想问的是,(void) i这种写法是怎样实现信号量的互斥的(见顶楼最后的代码)?
xuruichen 2009-01-20
  • 打赏
  • 举报
回复
用法是不是和void指针相似?
zjfhgdx 2009-01-20
  • 打赏
  • 举报
回复
受教!
beck_zhou 2009-01-20
  • 打赏
  • 举报
回复
顶这个啦 呵呵
[Quote=引用 8 楼 lbh2001 的回复:]
引用 1 楼 nineforever 的回复:
用来避免"unreferenced variable"的warning

这个解释是对的
如果声明一个变量且未赋初值,源程序中也一次都并未使用
编译器一般都会发出警告
int i; // 声明一个变量且未赋初值
(void)i; // 使用一次,并明确抛弃这个表达式语句的值
其实下面也可以达到目的
int i; // 声明一个变量且未赋初值
i; // 使用一次,返回这个表达式语句的值,但由于没有赋值的副作用,返回的…
[/Quote]
tanmeining 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lbh2001 的回复:]
引用 1 楼 nineforever 的回复:
用来避免"unreferenced variable"的warning

这个解释是对的
如果声明一个变量且未赋初值,源程序中也一次都并未使用
编译器一般都会发出警告
int i; // 声明一个变量且未赋初值
(void)i; // 使用一次,并明确抛弃这个表达式语句的值
其实下面也可以达到目的
int i; // 声明一个变量且未赋初值
i; // 使用一次,返回这个表达式语句的值,但由于没有赋值的副作用,返回的…
[/Quote]
受教了,我也是第一次见到这样的写法-_-b
maldini20040607 2009-01-20
  • 打赏
  • 举报
回复
说的有道理,学习了
lbh2001 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nineforever 的回复:]
用来避免"unreferenced variable"的warning
[/Quote]
这个解释是对的
如果声明一个变量且未赋初值,源程序中也一次都并未使用
编译器一般都会发出警告
int i; // 声明一个变量且未赋初值
(void)i; // 使用一次,并明确抛弃这个表达式语句的值
其实下面也可以达到目的
int i; // 声明一个变量且未赋初值
i; // 使用一次,返回这个表达式语句的值,但由于没有赋值的副作用,返回的结果没有任何作用,相当于被抛弃了
ForestDB 2009-01-20
  • 打赏
  • 举报
回复
好像确实没有加解锁--!!是不是代码还不完全或者只是个伪码。
DDGG 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 diaoni 的回复:]
- -b 其实我想问的是,(void) i这种写法是怎样实现信号量的互斥的(见顶楼最后的代码)?
[/Quote]

LZ贴的代码展开后变成这样:

static int OneTimeLock = 0;

static void one_time_init() {
(void) OneTimeLock;
// do something...
(void) OneTimeLock;
}


能加锁解锁吗?我也觉得奇怪。
一定是有人哪里搞错了。
踏岸寻柳 2009-01-20
  • 打赏
  • 举报
回复
用来欺骗编译器的,结果是什么都不做,但是编译器不会在报告变量未使用的警告信息。
nineforever 2009-01-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 waizqfor 的回复:]
引用 4 楼 hityct1 的回复:
避免编译器提示变量i未被使用。

第一个用途应该跟4L说的差不多 还有一个用途应该是改void类型 方便于以后在不能确定i的类型的时候 给它赋值
[/Quote]

void本身是不能作为存储类型的,你如何“在不能确定i的类型的时候 给它赋值”?
waizqfor 2009-01-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hityct1 的回复:]
避免编译器提示变量i未被使用。
[/Quote]
第一个用途应该跟4L说的差不多 还有一个用途应该是改void类型 方便于以后在不能确定i的类型的时候 给它赋值
hityct1 2009-01-19
  • 打赏
  • 举报
回复
避免编译器提示变量i未被使用。
brookmill 2009-01-19
  • 打赏
  • 举报
回复
这代码看起来像是linux的
(void) i; 能编译通过,是因为它除了做了个强制类型转换,别的什么都没干
waizqfor 2009-01-19
  • 打赏
  • 举报
回复
(void) i 是一个无类型的变量 可以随便给它 指定类型
nineforever 2009-01-19
  • 打赏
  • 举报
回复
用来避免"unreferenced variable"的warning

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧