diff options
author | Chris Robinson <chris.kcat@gmail.com> | 2022-02-26 07:42:28 -0800 |
---|---|---|
committer | Chris Robinson <chris.kcat@gmail.com> | 2022-02-26 07:42:28 -0800 |
commit | ab8b828c57c9b239a58634c470a35b282a879cbb (patch) | |
tree | 94e3ec3ef79598c645d7297ea6a6fa53d3603aed /examples/alconvolve.c | |
parent | f9c45eac1a52b85cd8dbbf46ecf4f4a9b7918674 (diff) |
Use a more C99-compliant function cast
Diffstat (limited to 'examples/alconvolve.c')
-rw-r--r-- | examples/alconvolve.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/examples/alconvolve.c b/examples/alconvolve.c index d719abdb..8979e7a3 100644 --- a/examples/alconvolve.c +++ b/examples/alconvolve.c @@ -84,6 +84,17 @@ static LPALGETAUXILIARYEFFECTSLOTIV alGetAuxiliaryEffectSlotiv; static LPALGETAUXILIARYEFFECTSLOTF alGetAuxiliaryEffectSlotf; static LPALGETAUXILIARYEFFECTSLOTFV alGetAuxiliaryEffectSlotfv; +/* C doesn't allow casting between function and non-function pointer types, so + * with C99 we need to use a union to reinterpret the pointer type. Pre-C99 + * still needs to use a normal cast and live with the warning (C++ is fine with + * a regular reinterpret_cast). + */ +#if __STDC_VERSION__ >= 199901L +#define FUNCTION_CAST(T, ptr) (union{void *p; T f;}){ptr}.f +#else +#define FUNCTION_CAST(T, ptr) (T)(ptr) +#endif + /* This stuff defines a simple streaming player object, the same as alstream.c. * Comments are removed for brevity, see alstream.c for more details. @@ -438,7 +449,7 @@ int main(int argc, char **argv) } /* Define a macro to help load the function pointers. */ -#define LOAD_PROC(T, x) ((x) = (T)alGetProcAddress(#x)) +#define LOAD_PROC(T, x) ((x) = FUNCTION_CAST(T, alGetProcAddress(#x))) LOAD_PROC(LPALGENFILTERS, alGenFilters); LOAD_PROC(LPALDELETEFILTERS, alDeleteFilters); LOAD_PROC(LPALISFILTER, alIsFilter); |