mirror of https://github.com/openssl/openssl.git
36 lines
1.6 KiB
Markdown
36 lines
1.6 KiB
Markdown
Notes on C-99
|
|
=============
|
|
|
|
This file contains a list of C-99 features we don't allow for OpenSSL.
|
|
Starting with 3.6 OpenSSL project is going to gradually adopt C-99 features.
|
|
The plan is to bring those features in small steps. Either with new
|
|
code where particular C-99 construct makes sense (think of designated initializers),
|
|
or when refactoring existing code and using C-99 language feature improves
|
|
readability/maintainability of the code. C-99 seems to be implemented by major
|
|
compilers ([clang](https://clang.llvm.org/c_status.html#c99), [gcc](https://gcc.gnu.org/c99status.html), [msvc](https://learn.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance?view=msvc-170)), therefore we can opt
|
|
for permissive policy to adopt C-99 standard. This approach means OpenSSL
|
|
project accepts all C-99 features except those explicitly listed here.
|
|
The list here is going to be updated by features we either
|
|
|
|
- find not useful (or not a good match) for OpenSSL
|
|
|
|
- the feature is not implemented by some non-mainstream compiler which
|
|
we need to keep supported for benefit of OpenSSL users
|
|
|
|
The list of C-99 features we don't support in OpenSSL project follows:
|
|
|
|
- do not use `//` for comments, stick to `/* ... */`
|
|
|
|
- do not use `<complex.h>`. MSVC doesn't quite implement it to standard.
|
|
|
|
- do not use variable length arrays, i.e. arrays where the size is
|
|
determined by another variable. MSVC doesn't implement it at all.
|
|
For clarity, this is an example of such an array:
|
|
|
|
``` C
|
|
int fun(size_t n)
|
|
{
|
|
char s[n]; /* variable size array */
|
|
...
|
|
```
|