gpt4 book ai didi

c - 这段代码定义是否明确(Casting HANDLE)

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:49 25 4
gpt4 key购买 nike

我最近工作的代码库中有很多类似的代码实例。这是一个围绕 OS API 的瘦 C 包装器。

// From the OS
HANDLE CreateObject();
void CloseHandle(HANDLE);

typedef struct tagFOO {} FOO;

FOO* Foo_New()
{
return (FOO*)CreateObject();
}

void Foo_Delete(FOO* foo)
{
if(foo != NULL)
{
CloseHandle((HANDLE)foo);
}
}

void Foo_Bar(FOO* foo)
{
if(foo != NULL)
{
HANDLE h = (HANDLE)foo;
// Do something interesting with h
}
}

这似乎可行,我想尽可能避免触摸它,但这是否定义明确?我觉得很可疑

最佳答案

C99 标准说:

6.7.2.1 Structure and union specifiers

Syntax

struct-or-union-specifier:
struct-or-union identifieropt { struct-declaration-list }
struct-or-union identifier
struct-or-union:
struct
union
struct-declaration-list:
struct-declaration
struct-declaration-list struct-declaration

正式地,这排除了您的空结构定义(C89 标准中的 §6.5.2.1 也是如此);该结构中至少应有一名成员。但是,您必须相当努力地插入 GCC 才能让它提示;我使用了 -std=c99 -pedantic 并且只有在使用 -pedantic 时它才警告“struct has no members”。

在我看来,你会更好(更严格地便携):

typedef struct tagFOO FOO;

或者,甚至使用:

typedef struct FOO FOO;

关于c - 这段代码定义是否明确(Casting HANDLE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6820774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com