0
gcc 4.7.2
c89

你好,

我正在审查某人的源代码,我遇到了这个。

我有这个声明和定义,我不明白它的作用。我知道静态意味着它不会从文件中导出。

static SERVICE_STATUS_HANDLE g_win_status_handle = NULL;

因为它被设置为 NULL 它看起来像一个指针。SERVICE_STATUS_HANDLE 没有在其他任何地方定义。只有这个文件。

它是这样使用的,这是比较 SERVICE_STATUS_HANDLE 转换为 0 或 NULL 后 g_win_status_handle 是否等于 NULL:

if(g_win_status_handle == (SERVICE_STATUS_HANDLE)0) {
    /* do something */
}

像这样:

if(!SetServiceStatus(g_win_status_handle, &g_win_status)) {
    /* do something */
}

非常感谢,如果有人可以对此有所了解。

4

1 回答 1

1

我做了小程序

#include<stdio.h>

static SERVICE_STATUS_HANDLE g_win_status_handle = NULL;
int main()
{
if(g_win_status_handle == (SERVICE_STATUS_HANDLE)0) {
        printf("ksdfbhdejkfb");
}
return 0;
}

编译于gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)

带有 c89 标志,例如

gcc -std=c89 temp.c

它的错误

temp.c:3:30: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_win_status_handle’
temp.c: In function ‘main’:
temp.c:6:4: error: ‘g_win_status_handle’ undeclared (first use in this function)
temp.c:6:4: note: each undeclared identifier is reported only once for each function it appears in
temp.c:6:28: error: ‘SERVICE_STATUS_HANDLE’ undeclared (first use in this function)
temp.c:6:50: error: expected ‘)’ before numeric constant

很明显,SERVICE_STATUS_HANDLE 必须在某个地方定义。如果没有定义,那么你的代码将如何编译?

可能会在某些头文件中定义..


更新了评论的答案

SERVICE_STATUS_HANDLE被定义windows.h并且它将会包括。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx

于 2012-10-05T04:52:02.540 回答