变量上带个括号写成一行有特殊用法吗?

jzg1234 2008-04-02 03:18:46
我看到ATL(vc8的)中好些代码都写成如下:

(hWnd);
(uMsg);
(wParam);
(lParam);
(lResult);
(bHandled);


把变量加个括号,或者不加括号直接写一行,这有什么意义吗?

还是防止在函数的参数中把这个变量给注释掉了呢??

对了这个代码在宏里~不过不在宏里的也有~
...全文
159 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzg1234 2008-04-02
  • 打赏
  • 举报
回复
vc 我就不知道了
但是使用GCC生成的汇编代码中把(变量)给优化掉了


void testfunc(int hwnd)
{
(hwnd);
}

用 gcc -S main.cc
生成的汇编代码是

.globl __Z8testfunci
.def __Z8testfunci; .scl 2; .type 32; .endef
__Z8testfunci:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret


即使加上 -g 参数 生成的汇编也没看到 (hwnd)行的代码,

所以这种写法应该不是语法上的事情,应该是有别的用处,当然了要是vc有特殊处理也请说一下~~~
jzg1234 2008-04-02
  • 打赏
  • 举报
回复
就是ATL中的消息影射宏,在ATL中代码如下:

#define BEGIN_MSG_MAP(theClass) \
public: \
BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult, DWORD dwMsgMapID = 0) \
{ \
BOOL bHandled = TRUE; \
(hWnd); \
(uMsg); \
(wParam); \
(lParam); \
(lResult); \
(bHandled); \
switch(dwMsgMapID) \
{ \
case 0:

看一下 这种写法到底是干啥的
写不写 有没有都OK~~

mimong_lin 2008-04-02
  • 打赏
  • 举报
回复

void testfunc(HWND /*hwnd*/)
{
(hwnd); //这样就能保证这个变量的正确性,防止名字冲突啥的
}


函数在声明的时候,可以只指定参数类型;但在定义的时候,就应该要加上形参了吧?
taodm 2008-04-02
  • 打赏
  • 举报
回复
就你现在这个代码能编译过?
另外,把(hwnd); 整个去掉,编译再试。
mimong_lin 2008-04-02
  • 打赏
  • 举报
回复
在宏里的好理解啊,就像#define Multi(A, B) (A * B), 为了正确性,都会写成#define Multi(A, B) ((A) * (B))
至于不是宏里的,就不知道了.
jzg1234 2008-04-02
  • 打赏
  • 举报
回复
编译没问题,我只是不明白这样用的用法,
在优化的时候这些代码会优化掉吧~

我觉得他可能是怕函数的参数忘了写了或者什么的比如:


void testfunc(HWND /*hwnd*/)
{
(hwnd); //这样就能保证这个变量的正确性,防止名字冲突啥的
}


但是我感觉这样做的必要没那么大,而且如果变量名字的话编译器会给提示的,所以才想知道他是不是还有别的原因~或者根本就不是我认为的那样,因为那样实在很难说通~~
taodm 2008-04-02
  • 打赏
  • 举报
回复
你把那个()去掉再编译试一下嘛。

64,654

社区成员

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

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