了解一些源代码

时间:2012-10-05 04:22:47

标签: c windows

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 */
}

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

1 个答案:

答案 0 :(得分: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_HANDLEwindows.h中定义,并且包括。

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