|
|
|
|
|
by fexl
4478 days ago
|
|
I tend to go with: gcc -c -Wall -Werror -std=c99 -pedantic -O3
I use -std=c99 because I use these two features of C:1. Mixed declarations and code, e.g. double x = 4.8 * 5.3;
printf("x = %.15g\n", x);
double y = 8.7 * x;
printf("y = %.15g\n", y);
2. Flexible array members, e.g. for my safe string operations: struct str
{
long len;
char data[];
};
If I were to use -ansi (same as -std=c89), instead of -std=c99, then -pedantic would give me these errors: error: ISO C90 forbids mixed declarations and code [-Werror=edantic]
error: ISO C90 does not support flexible array members [-Werror=edantic]
(By the way, I have no idea why the error message omits the "p" from pedantic there. That doesn't smell right. I hope the gcc people fix that.)I use -O3 for optimization, and I chose level 3 because that enables -finline-functions. I typically avoid macros, even for simple one-liners like this: /* Increment the reference count. */
void hold(value f)
{
f->N++;
}
With -finline-functions enabled (via -O3), I can see that function being expanded inline, by examining the assembly output of gcc -S -O3. |
|