patch 8.0.1730: no configure check for the used C99 features

Problem:    No configure check for the used C99 features.
Solution:   Add a compilation check.  Tentatively document C99 features.
This commit is contained in:
Bram Moolenaar
2018-04-17 22:02:45 +02:00
parent ea3ece405a
commit 561f8a5a46
4 changed files with 102 additions and 3 deletions

View File

@ -1,4 +1,4 @@
*develop.txt* For Vim version 8.0. Last change: 2017 Jul 31
*develop.txt* For Vim version 8.0. Last change: 2018 Apr 17
VIM REFERENCE MANUAL by Bram Moolenaar
@ -185,9 +185,49 @@ The basic steps to make changes to the code:
C COMPILER *style-compiler*
The minimal C compiler version supported is C89, also known as ANSI C.
Later standards don't add much and C89 is the widest supported.
Later standards, such as C99, are not widely supported, or at least not 100%
supported. Therefore we use only some of the C99 features and disallow some
(at least for now).
One restriction that this implies: no // comments, only /* comments */.
Please don't make changes everywhere to use the C99 features, it causes merge
problems for existing patches. Only use them for new and changed code.
Comments ~
Traditionally Vim uses /* comments */. We intend to keep it that way,
especially for file and function headers. For new code or lines of code that
change, it is allowed to use // comments. Especially when it comes after
code:
int some_var; // single line comment useful here
Enums ~
The last item in an enum may have a trailing comma. C89 didn't allow this.
Types ~
"long long" is allowed and can be expected to be 64 bits. Use %lld in printf
formats. Also "long long unsigned" with %llu.
Flexible array members ~
This is an array without size, used as the last member of a struct. Vim used
to have an array of size one, which causes trouble with FORTIFY_SOURCE. Using
an "unsized array" is the intended use, we will change all of them.
struct some_stuff {
size_t length;
char payload[]; // will have size "length"
};
Not to be used ~
These C99 features are not to be used, because not enough compilers support
them:
- Declaration after Statements (MSVC 2012 does not support it). All
declarations need to be at the start of the block.
- Variable length arrays (even in C11 this is an optional feature).
- _Bool and _Complex types.
- "inline" (it's hardly ever needed, let the optimizer do its work)
USE OF COMMON FUNCTIONS *style-functions*