Which C standard does Sqlite's source code compatible?
(1) By anonymous on 2020-06-29 09:54:13 [link]
Hey, I just want to know which C standard (I guess C99?) does sqlite's code compatible?
(2) By Stephan Beal (stephan) on 2020-06-29 09:58:26 in reply to 1 [link]
> I just want to know which C standard (I guess C99?) does sqlite's code compatible? It's mostly C89 compatible, but at least one construct (`long long`) is not strictly C89 but is supported in non-strict C89 mode on all (or almost all) known compilers. It does not require any C standard published this century.
(3) By anonymous on 2020-06-29 10:02:31 in reply to 2 [link]
Ok, thank you for your reply.
(4) By Warren Young (wyoung) on 2020-06-29 20:59:31 in reply to 2 [link]
The [official statement][1] says C99 without qualifications. [1]: https://sqlite.org/qmplan.html#software_development_environment
(5.1) By Keith Medcalf (kmedcalf) on 2020-06-29 21:41:48 edited from 5.0 in reply to 4 [link]
Deleted(6) By Keith Medcalf (kmedcalf) on 2020-06-29 21:44:56 in reply to 4 [link]
The minimum appears to be gnu89 and/or c99. That is, with GCC -std=gnu89 (or later) works, as does -std=c99 (or later).
(7) By Keith Medcalf (kmedcalf) on 2020-06-29 21:54:00 in reply to 4
The minimum appears to be gnu89 and/or c99. That is, with GCC -std=gnu89 (or later) works, as does -std=c99 (or later).
(8.1) By Stephan Beal (stephan) on 2020-07-01 15:26:20 edited from 8.0 in reply to 7 [link]
For completeness's sake: the sqlite3 amalgamation compiles fine with gcc using `-std=c89 -Wall -Werror -Wextra -Wpedantic`, so long as a couple other flags are passed along with it: - `-Wno-long-long` because C89/C90 doesn't specify long long. - `-Wno-implicit-fallthrough` because gcc's devs broke a great many real-world builds when they "deprecated" implicit switch fall-through. *Grrrrrrr.* e.g.: ``` gcc -g -Wpedantic -Werror -Wall -Wextra \ -Wsign-compare -fPIC -std=c89 -Wno-long-long \ -Wno-implicit-fallthrough \ -c -o sqlite3.o sqlite3.c ``` Edit: depending on the build options and gcc version, it may also need: - `-Wno-cast-function-type` because sqlite apparently casts between (`void (*)(void)`) and (`int (*)(void)`) - `-Wno-unused-parameter` for interface-level parameters which may not be used by certain concrete implementations of the interface.