C:只将结构初始化为指针?

Lem*_*ons 5 c struct

有没有办法确保创建时的struct对象始终是指针?

例如:

typedef struct
{
  int foo;
} blah;

blah a; // error
blah* b; // ok
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 8

当然 - 你只需要隐藏struct自己的翻译单元的定义,远离窥探.然后,在其他地方(以及更多公共场所),只需向前声明结构:

typedef struct x blah;
Run Code Online (Sandbox Code Playgroud)

blah在这种情况下是一个不完整的类型,因此任何只能访问该声明的人只能创建blah *对象,而不能创建完整的blah对象.

另一种选择是更改你的typedef:

typedef struct
{
    int foo;
} *blah;
Run Code Online (Sandbox Code Playgroud)

现在,blah本质上是一个指针类型,以及任何声明:

blah b;
Run Code Online (Sandbox Code Playgroud)

实际上只创建一个指针.由于它struct本身是匿名的,除了通过指针之外没有办法创建一个typedef.

  • +1*不完整类型*是OP问题的确切解决方案. (2认同)