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 */
}
非常感谢有人可以对此有所了解。
答案 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_HANDLE
在windows.h
中定义,并且包括。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx