Use your compiler, use it well with all its warnings. Run your programs under valgrind or some such.
For learning, you could also add -ansi, as it will make your compiler be stricter about standards.
Fun post. Now I know why everyone was raving about the clang error-messages:
echo "void main() {}" > main.c
gcc -Wall -Werror --std=c99 main.c
main.c:1:6: error: return type of ‘main’ is not ‘int’ [-Werror=main]
cc1: all warnings being treated as errors
clang -Wall -Werror --std=c99 main.c
main.c:1:1: error: 'main' must return 'int'
void main() {}
^
1 error generated.
(not showing clangs pretty colours)http://i.imgur.com/BjWj7h6.png
FWIW, I have:
COLORTERM=gnome-terminal
TERM=screen
and Debian takes care of my termcap etc, afaik.http://i.imgur.com/0Hzze9G.png
Thats me on osx running tmux with TERM=xterm-256color.
C is insecure by design and IT is still paying for its widespread, when used by developers that don't use the best practices for secure C coding.
So when learning how to use it, the best way is to learn those best practices from day one.
Writing secure code is always harder than not, and developers love to take shortcuts.
For example, many of the IO functions like gets() are no longer valid in C11 exactly because how unsafe they are.
When you're writing the kind of software that's an invitation to hackers, like a web application, you should favor a language like PHP or Ruby, which takes things like buffer overflows out of the equation, and even then, you should know what you're doing.
Which if you follow my posts, you will see that I defend C and C++ should be replaced by safer systems programming languages, that exist since Modula-2 days.
Having said this, C and C++ are still used everywhere and will outlive most of us.
So when using them, for whatever reasons, at least one should take care to use the best practices regarding how to write secure and safe code in those languages.
No, Joe average user does not compile code.
-std=c99 -Wall -Wextra -Werror -pedantic-errors