From 561f8a5a4612751c2a4ebd6bf918cbc3be867350 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 17 Apr 2018 22:02:45 +0200 Subject: 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. --- runtime/doc/develop.txt | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) (limited to 'runtime/doc/develop.txt') diff --git a/runtime/doc/develop.txt b/runtime/doc/develop.txt index ed4e9e38ba..d90e4a3dd2 100644 --- a/runtime/doc/develop.txt +++ b/runtime/doc/develop.txt @@ -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* -- cgit v1.2.3