Bottom line - I think we should disallow -D
(or at least count its chars), and allow all the rest without counting.
-D
can be used to write 1-byte programs, so it must be either disallowed or counted.
I prefer to disallow it, to discourage people from replacing #define
with -D
(we want short programs, not short programs + compilation lines).
-include
should be treated the same (like -D
, it replaces things which should have been in the source).
A simple case is -std=c99
, -ansi
etc. I think it's agreed that these don't need to be counted. You might as well count 3 chars for gcc
(but I have c
as an alias...)
Other flags, however, don't offer a clear way to save chars. They may end up useful in some circumstances, but they don't automatically shorten the program.
Finding flag that allows you to shorten your program is often quite creative. So I think it should be encouraged. If anyone finds a way to save a couple of chars using -fallow-parameterless-variadic-functions
, I'm in favor. Adding 40 bytes makes it useless.
Some cases I actually saw on this site:
Using -O2
to optimize tail recursion:
I think it should be allowed for no charge. Also note that in most cases, the program could work without it, given a deep enough stack.
-msse3 -O3 -ffinite-math-only
used in this answer:
The program works without the flags, just terribly slowly. I see no reason to charge for them.
-nostartfiles
used in this answer:
The point here was not using the letter a
in the program. But this letter does appear in the flag, so if counting the flags you should count the a
.
I really don't know about this one. It surely is creative.
perl
/ruby -p
for example. In Ruby's case you can also write it into the shebang and Ruby will gladly go ahead and parse that itself. \$\endgroup\$