summaryrefslogtreecommitdiffstats
path: root/runtime/doc/develop.txt
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-04-17 22:02:45 +0200
committerBram Moolenaar <Bram@vim.org>2018-04-17 22:02:45 +0200
commit561f8a5a4612751c2a4ebd6bf918cbc3be867350 (patch)
tree7842c46ff65ffe1b1367e001cea0f0b3bfd5340c /runtime/doc/develop.txt
parentea3ece405ab55f44018257bd2f5021231af8e87f (diff)
patch 8.0.1730: no configure check for the used C99 featuresv8.0.1730
Problem: No configure check for the used C99 features. Solution: Add a compilation check. Tentatively document C99 features.
Diffstat (limited to 'runtime/doc/develop.txt')
-rw-r--r--runtime/doc/develop.txt46
1 files changed, 43 insertions, 3 deletions
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*