mirror of https://github.com/encounter/SDL.git
3bf7994fe2
Case fallthrough warnings can be suppressed using the __fallthrough__ compiler attribute. Unfortunately, not all compilers have this attribute, or even have __has_attribute to check if they have the __fallthrough__ attribute. [[fallthrough]] is also available in C++17 and the next C2x, but not everyone uses C++17 or C2x. So define the SDL_FALLTHROUGH macro to deal with those problems - if we are using C++17 or C2x, it expands to [[fallthrough]]; else if the compiler has __has_attribute and has the __fallthrough__ attribute, then it expands to __attribute__((__fallthrough__)); else it expands to an empty statement, with a /* fallthrough */ comment (it's a do {} while (0) statement, because users of this macro need to use a semicolon, because [[fallthrough]] and __attribute__((__fallthrough__)) require a semicolon). Clang before Clang 10 and GCC before GCC 7 have problems with using __attribute__ as a sole statement and warn about a "declaration not declaring anything", so fall back to using the /* fallthrough */ comment if we are using those older compiler versions. Applications using SDL are also free to use this macro (because it is defined in begin_code.h). All existing /* fallthrough */ comments have been replaced with this macro. Some of them were unnecessary because they were the last case in a switch; using SDL_FALLTHROUGH in those cases would result in a compile error on compilers that support __fallthrough__, for having a __attribute__((__fallthrough__)) statement that didn't immediately precede a case label. |
||
---|---|---|
.. | ||
aaudio | ||
alsa | ||
android | ||
arts | ||
coreaudio | ||
directsound | ||
disk | ||
dsp | ||
dummy | ||
emscripten | ||
esd | ||
fusionsound | ||
haiku | ||
jack | ||
nacl | ||
nas | ||
netbsd | ||
openslES | ||
os2 | ||
paudio | ||
pipewire | ||
psp | ||
pulseaudio | ||
qsa | ||
sndio | ||
sun | ||
vita | ||
wasapi | ||
winmm | ||
SDL_audio.c | ||
SDL_audio_c.h | ||
SDL_audiocvt.c | ||
SDL_audiodev.c | ||
SDL_audiodev_c.h | ||
SDL_audiotypecvt.c | ||
SDL_mixer.c | ||
SDL_sysaudio.h | ||
SDL_wave.c | ||
SDL_wave.h |