[swift-users] Importing empty C structs

Joe Groff jgroff at apple.com
Tue Apr 18 11:11:05 CDT 2017


> On Apr 17, 2017, at 6:19 PM, Rick Mann via swift-users <swift-users at swift.org> wrote:
> 
> I'm trying to make a module out of a C library and header file. It has at least one empty struct:
> 
> struct lgs_context_t {};
> 
> and a function:
> 
> LGS_EXPORT struct lgs_context_t* lgs_init(const lgs_context_params_t* params);
> 
> Swift sees the function, I can call it and assign the result to a variable, but Xcode (as usual) fails to show me what it thinks the type is. So I can't declare a class member to hold the returned pointer.
> 
> I'm trying to declare the member like this:
> 
>    var	ctx: lgs_context_t?		//  Use of undeclared type 'lgs_context_t'
> 
> I finally tried calling it like this:
> 
>    let ctx: UnsafeMutablePointer = lgs_init(...)
> 
> and the resulting error message gave me OpaquePointer. But couldn't it just typealias lgs_context_t to OpaquePointer?
> 
> Is there any way to do this in the modulemap?
> 
> Thanks!

The compiler uses OpaquePointer for pointers to incomplete types in C. It sounds like you left lgs_context_t declared but not defined in your header, in other words you wrote 'struct lgs_context_t;' without braces. If it were truly defined to be empty, then the type should have been imported.

-Joe


More information about the swift-users mailing list