SQLite Forum

Which C standard does Sqlite's source code compatible?
Login

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.