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 に答える