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
?
Author by
Fatmarik
Updated on July 05, 2022Comments
-
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 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 over 14 years+1. Now that's what my alias actually looks like:
alias gcc99=gcc -Wall -pedantic -ansi -std=c99
. Yes, withansi
as well. -
Fatmarik over 14 yearsOk 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 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 over 14 yearsFrom what I find on the Web, there is a global variable called
C_CCompiler
which designates the C compiler. It is normally set togcc
. Replace its contents withc99
and things should go fine. See the help file on: lug.fh-swf.de/vim/vim-doc/csupport.html -
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 over 14 yearsI 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 over 14 years@Steve Jessop: Maximize portability, minimize vendor implementations. Also, don't much like
alloca
kind of functions. So on ... -
Steve Jessop over 14 yearsAh, 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 over 14 years@Steve Jessop: The order of arguments does not matter. The combination does.
-
Steve Jessop over 14 yearsThe order certainly does matter. For example
int main() { // thing <newline> }
, where <newline> is a newline. Compiles withgcc -ansi -std=c99 -pedantic
, but not withgcc -std=c99 -ansi -pedantic
. -
dirkgently over 14 yearsSorry, 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 over 14 yearsI'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 about 12 yearsNote that using c99 on Mac may give you surprising results: stackoverflow.com/questions/4182413