I am currently starting out with programming micro controllers using C30
(A C
compiler based on GCC
from microchip for their PIC24
devices) and I enabled Strict ANSI warnings
out of curiosity. First off, I did not know that in C11 comment markings like // are "wrong" and instead I should use /* blah blah */, but what really surprised me is this warning for a line of code.
"warning: use of non-standard binary prefix"
The line of code is:
OSCCONbits.COSC = 0b000;
I have looked online at one of the drafts of C11 (ISO/IEC 9899:2011) and can't find anything about binary prefixes in C. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
What is the correct binary notation for C according to C11?
C does not have binary constants. (Even in C11 they are not supported.)
They were proposed as an addition to C99 but the proposition was rejected.
From C99 Rationale document:
A proposal to add binary constants was rejected due to lack of precedent and insufficient utility.
You said you are using a compiler based gcc
and gcc
supports binary constants: they are a GNU extension to the C language.
Integer constants can be written as binary constants, consisting of a sequence of
0
and1
digits, prefixed by0b
or0B
. This is particularly useful in environments that operate a lot on the bit-level (like microcontrollers).
See gcc
page about binary constants for more information: