Skip to content

Opaque structs and SDL_net #140

Open
@suve

Description

@suve

In most of SDL headers, opaque structs use the following kind of typedef:

typedef struct SDL_Thing SDL_Thing;

As such, when writing C code, the following variable declaration:

SDL_Thing thing;

Is resolved by the compiler into:

struct SDL_Thing thing;

Which causes a compilation failure, as struct SDL_Thing is an opaque struct with unknown size. Hence, to declare a pointer variable, the programmer must explicitly declare the variable as a pointer:

SDL_Thing *thing;

However, for whatever reason, SDL_net does things differently, and uses the following kind of typedef:

typedef struct _Thing *Thing;

As such, when writing C code, the following variable declaration:

Thing thing;

Is resolved by the compiler into:

struct _Thing *thing;

Which compiles fine, as this creates a pointer variable - unbeknown to the programmer (unless they actually look at the typedef).


So now, my question: how should we handle this in sdl2_net.pas in terms of type naming?

  1. Keep the API similar to other units: make the TThing unavailable, and only use PThing everywhere. This makes it clear that PThing is a pointer to some data the programmer isn't meant to touch.

  2. Keep the API close to the original C headers, and use TThing. This obscures the information that TThing is a pointer.

Metadata

Metadata

Assignees

No one assigned

    Labels

    discussionDiscuss an idea/feature/PR/issue...

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions