Description
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?
-
Keep the API similar to other units: make the
TThing
unavailable, and only usePThing
everywhere. This makes it clear thatPThing
is a pointer to some data the programmer isn't meant to touch. -
Keep the API close to the original C headers, and use
TThing
. This obscures the information thatTThing
is a pointer.