On Thu, Jul 6, 2017, at 11:07 AM, Alfred Schilken wrote:
> Hi all,
> 
> I installed the arm-none-eabi-gcc via brew as proposed in the 1.0.0
> mynewt documentation for Mac.
> 
> So I have the version 4.9.3:
> 
> arm-none-eabi-gcc --version
> arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.9.3 20150529
> (release) [ARM/embedded-4_9-branch revision 227977]
> Copyright (C) 2014 Free Software Foundation, Inc.
> 
> 
> This old compiler uses the gnu89 "C-standard" as default. To check this I
> just included a nonsense for loop in  /apps/blinky/src/main.c:
> ...
>     for(int i=0; i < 3; i++){
>       rc += i;
>     }
>     while (1) {
> ...
> 
> When running a "newt build" the compiler complains and proposes to use
> the option -std=gnu99 
> 
> newt build my_blinky_microbit
> Building target targets/my_blinky_microbit
> Compiling apps/blinky/src/main.c
> Error: apps/blinky/src/main.c: In function 'main':
> apps/blinky/src/main.c:58:5: error: 'for' loop initial declarations are
> only allowed in C99 or C11 mode
>      for(int i=0; i < 3; i++){
>      ^
> apps/blinky/src/main.c:58:5: note: use option -std=c99, -std=gnu99,
> -std=c11 or -std=gnu11 to compile your code
> 
> 
> My question:
> 
> Is the mynewt documentation outdated and I should use a newer version of
> arm-none-eabi-gcc, which maybe has gnu99 (or gnu11) as default?
> 
> Or are there any side effects which prevents us using the gnu99-Standard?
> 
> If gnu99 is not evil in any kind I would prefer it over gnu89, which is
> now 28 years old and not even can define a variable in the for-loop.
> After many years of java, python and Swift my C is a bit rusty.
> So I have read Ben Klemens’ book „21 st Century C“ and he describes a lot
> of advantages in c99, like:
> compound literals for arrays and structs, variable-length macros,
> designated initializers, definition of variables not only at the top of a
> function, ...
> 
> 
> I appended the option -std=gnu99 to compiler.flags.default: in
> repos/apache-mynewt-core/compiler/arm-none-eabi-m0/compiler.yml 
> and had no obvious negative side-effects with that.
> 
> Maybe this -std=gnu99 should be set in the apache-mynewt-core repo or at
> least put as a hint in the documentation about "Installing the Cross
> Tools for ARM“.

Hello Alfred,

Since you're using homebrew you can:

$ brew cask install gcc-arm-embedded

Which will get the latest version (6.3.1) already built.

If you want to add the option you suggested you can always add it to
"compiler.flags.base" key in your compiler.yml (there is one for each
ARCH in compiler/ARCH/compiler.yml). I've moved away from gcc 4.x a very
long time ago and only built Mynewt with 5.x and 6.x so I'll leave the
specific answer of using "std=gnu99" to someone else. My recommendation
would be to upgrade! :P

Cheers,
Fabio Utzig

Reply via email to