The goal of this thread is to come up with good rules regarding the usage of integer types in Blender. Those will then be added to our code style guide.
Please read the “Arithmetic” section of the C++ Core Guidelines and the “Integer Types” section of the Google C++ Style Guide.
Below I formulate work-in-progress rules. I’ll update them according to the feedback I get.
Integer Types
Only use int
and char
of the builtin integer types. So, do not use short
, long
or long long
. Prefer fixed size integer types like int16_t
instead. You can assume that int
has at least 32 bits.
Use int64_t
for integers that we know can be “big”.
Use bool
with true
and false
to represent truth values (instead of int
with 0 and 1).
If your code is a container with a size, be sure its size-type is large enough for any possible usage. When in doubt, use a larger type like int64_t
.
Use unsigned integers in bit manipulations and modular arithmetic. When using modular arithmetic, mention that in a comment.
When using unsigned integers, always use uint8_t
, uint16_t
, uint32_t
or uint64_t
.
Don’t use unsigned integers to indicate that a value is non-negative, use assertions instead.
Since bit operations are used on flags, those should be unsigned integers with a fixed size.
If your code is using uint
already, try to avoid doing any arithmetic on values of that type. Additions of small positive constants are likely OK but avoid subtraction or arithmetic with any values that might be negative.
As with most new rules, our current code base does not make a good job of following them. Nevertheless, I think it is worth adding these rules to our style guide. This way, new code can follow better practices and we have justification for cleanup commits in existing code.
CC: @brecht @ideasman42 @mont29 @LazyDodo @julianeisel @Howard_Trickey @sergey @JeroenBakker @sybren