Setting std=c99 flag in GCC

152,635

Solution 1

Instead of calling /usr/bin/gcc, use /usr/bin/c99. This is the Single-Unix-approved way of invoking a C99 compiler. On an Ubuntu system, this points to a script which invokes gcc after having added the -std=c99 flag, which is precisely what you want.

Solution 2

How about alias gcc99= gcc -std=c99?

Share:
152,635
Fatmarik
Author by

Fatmarik

Updated on July 05, 2022

Comments

  • Fatmarik
    Fatmarik almost 2 years

    I was wondering if there were any files in which I could set the -std=c99 flag, so that I would not have to set it for every compilation. I am using GCC 4.4 on Ubuntu.

  • Admin
    Admin over 14 years
    +1 That's what I do. And while you are at it add the -Wall and -pedantic flags to the alias.
  • dirkgently
    dirkgently over 14 years
    +1. Now that's what my alias actually looks like: alias gcc99=gcc -Wall -pedantic -ansi -std=c99. Yes, with ansi as well.
  • Fatmarik
    Fatmarik over 14 years
    Ok I am new to programming on linux (learning at college), how do I use /usr/bin/c99 ? I am using Vim-Gnome with C plugin in which I just do \rr to compile and run.
  • Steve Jessop
    Steve Jessop over 14 years
    @dirkgently: so what standard (if any) is GCC implementing with -std=c99 -ansi? You've enabled C99, and then disabled anything not in C89, does that result in the common subset of both?
  • Thomas Pornin
    Thomas Pornin over 14 years
    From what I find on the Web, there is a global variable called C_CCompiler which designates the C compiler. It is normally set to gcc. Replace its contents with c99 and things should go fine. See the help file on: lug.fh-swf.de/vim/vim-doc/csupport.html
  • dirkgently
    dirkgently over 14 years
    @Steve Jessop: GCC manual -- This turns off certain features of GCC that are incompatible with ISO C90(when compiling C code), or of standard C++ (when compiling C++ code), such as the asm and typeof keywords, and predefined macros such as unix and vax that identify the type of system you are using. It also enables the undesirable and rarely used ISO trigraph feature. For the C compiler, it disables recognition of C++ style //' comments as well as the inline keyword. ` Reading that section may be helpful: gcc.gnu.org/onlinedocs/gcc/…
  • Steve Jessop
    Steve Jessop over 14 years
    I did read that, but it tells me what GCC does, not why it's useful ;-). In particular, how and why is -ansi -std=c99 -pedantic better than -std=c89 -pedantic?
  • dirkgently
    dirkgently over 14 years
    @Steve Jessop: Maximize portability, minimize vendor implementations. Also, don't much like alloca kind of functions. So on ...
  • Steve Jessop
    Steve Jessop over 14 years
    Ah, no, I see what I misunderstood now. The -std=c99 overrides the -std=c89, because it occurs after it in the arguments. Or maybe only mostly overrides it. Is alloca disabled by -ansi -std=c99, but not by -std=c99 alone?
  • dirkgently
    dirkgently over 14 years
    @Steve Jessop: The order of arguments does not matter. The combination does.
  • Steve Jessop
    Steve Jessop over 14 years
    The order certainly does matter. For example int main() { // thing <newline> }, where <newline> is a newline. Compiles with gcc -ansi -std=c99 -pedantic, but not with gcc -std=c99 -ansi -pedantic.
  • dirkgently
    dirkgently over 14 years
    Sorry, yes the order matters when they are of the same type. I stand corrected. gcc.gnu.org/onlinedocs/gcc/Invoking-GCC.html para#6
  • Jonathan Leffler
    Jonathan Leffler over 14 years
    I'd add -Wmissing-prototypes and -Wstrict-prototypes (and maybe -Wextra). If I am confident the code will support it, I'd use -Werror too, for good measure; that treats any warnings as fatal errors. It is great discipline; it can be harsh, too.
  • dubiousjim
    dubiousjim about 12 years
    Note that using c99 on Mac may give you surprising results: stackoverflow.com/questions/4182413