Check out my first novel, midnight's simulacra!
ISO C: Difference between revisions
From dankwiki
(→Types) Tags: mobile web edit mobile edit |
|||
(No difference)
|
Revision as of 05:30, 24 February 2021
Compilers
- Intel's C/C++ Compiler (icc) is free for non-commercial development
- AMD's Open64 Compiler Suite is just plain free
gcc
- I'd like to further along gcc C99 support
Concurrency
- Hans Boehm's Threads and Memory Model for C++ page is awesome
Atomics
Introduced in C11, and exposed by stdatomic.h. Use _Atomic as a type specifier (ala volatile or const).
- Unlike other type specifiers, an atomic form of a base type might have different size/alignment than the base type.
- structs and unions may be declared atomic, but it is then undefined behavior to access any of their members.
- Implementations are "encouraged to ensure that representation of C and C++ atomic types is the same."
Aliasing
- See Compiler Design page
- -O2 implies -fstrict-aliasing, at least as of gcc 4.3
- -Wstrict-aliasing=2 warns about many constructions unsafe to use with -fstrict-aliasing
- How to use Berkeley sockets API? See http://archives.free.net.ph/message/20080529.200047.b40321b6.fi.html, etc
Types
stdint.h
An excellent addition in C99. Type constructions of the form u?int{variety}_t (u prefix denotes unsigned). Varieties include:
- ptr: Size sufficient to hold a pointer. This is useful for function type definitions, when it's unsure whether a pointer or integer type would be most appropriate for various instances (a void *'s size is not directly related to an int's size by the ANSI C standard).
- max: Size sufficient to hold any other integer type.
- fast{8,16,32,64}: Fastest integer type having at least the specified width.
- least{8,16,32,64}: Minimum native integer type having at least the specified width.
- {8,16,32,64}: Integer type having precisely this width.
tgmath.h
_Generic
C11 introduced the new keyword _Generic, allowing one of several type-tagged expressions to be chosen based on the type of a controlling expression.
static in array parameters
Beginning with C99, static can be inserted into array parameters ala:
void foo(int bararr[static 10]);
This indicates to the compiler that the array passed as bararr must have room for at least 10 elements. This ought help it produce diagnostics, and perhaps help code generation.