Cat*_*ann 4 c c++ const-correctness
我的库中有一个opaque类型定义为:
typedef struct MyOpaqueType* MyType; // easier to type for client code
Run Code Online (Sandbox Code Playgroud)
我不能使用typedef传递一个指向const的指针结构,所以有些函数看起来像:
void UsePointerToConst ( const struct MyOpaqueType * )
Run Code Online (Sandbox Code Playgroud)
代替:
void UserPointerToConst( const MyType ) // can't use, is really constant pointer
Run Code Online (Sandbox Code Playgroud)
所以,鉴于此,我有两个问题:参数列表中的struct关键字只在C中是必需的吗?有一个更好的方法吗?我应该创建一个typedef,例如:
typedef const struct MyOpaqueType* ConstantMyType; ?
Run Code Online (Sandbox Code Playgroud)
参数列表中的struct关键字只在C中是必需的吗?
是.见Jens Gustedt的回答.
有一个更好的方法吗?
只是typedef结构,而不是指针.这更好,因为
typedef,而不是一个为每个{ MyOpaqueType,MyOpaqueType *,MyOpaqueType const *,MyOpaqueType *const和MyOpaqueType const *const}以及涉及所有变体restrict(其中不存在C++)FILE *).也没有危险; 当有人忘记时*,他们会收到编译错误.