22 ms·
How about just puts(“Hello, World!”) which has been in C since the dawn of time?
by accatyyc 7y ago
How about just
puts(“Hello, World!”)
which has been in C since the dawn of time?
- senozhatsky 7y agoLooks even better!
- robbyt 7y agoI think this is part of the problem with the language- a fragmented set of keywords, all with slightly different behavior.
- monocasa 7y agoputs and printf aren't keywords, they're regular functions.
- paulrpotts 7y agoWell, sort of. Specifically, printf is an oddball function because it uses the varargs mechanism, and the whole format strings mechanism is inherently risky because it effectively bypasses the type system and says "trust me." Back when I was learning C, on a Mac with THINK C, misusing printf was a sure-fire way to crash the computer very quickly, especially since misaligned accesses of 16-bit or 32-bit words caused crashes. Compilers now go to a great deal of trouble to try to do additional safety and consistency checks. Don't get my wrong, I grew up using printf, and it is massively useful. But it was designed when computers were much smaller and simpler, and design tradeoffs were made back then that probably wouldn't be chosen today. So printf, along with a whole family of related functions, has been a seething mess of a security and safety hole longer than most programmers have been alive.
- monocasa 7y agoSure, but that's varargs being the special cased but, not printf (I've written printf implementations for some ebedded systems, it's always just regular C code).
- dllthomas 7y agoFormat strings (... at least, static format strings) don't have to bypass the type system.
- a1369209993 7y agoNope, printf is a regular function - regular functions can use varargs just fine. And it's C; everything bypasses the type system and says "trust me". Memory allocation bypasses the type system and says "trust me". struct foo* foo = malloc(sizeof foo); // yep, this is definitely the right number of bytes If you want strong typing (!= static typing), C is not the language you should be using, printf or no printf.
- braindeath 7y agoNo. The popular C compilers have a feature where they will do some additional type checking on the arguments passed to "format" functions. You can mark your own functions with this attribute. See the format attribute https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attribute.... printf is not an oddball function. Also, typechecking format strings in general does not have to be that complicated. They are still used in golang. Of all the security pitfalls of C, the format string design of printf is way down the list. As others have noted, printf is not what makes the C type system weak.
- monocasa 7y agoGCC at least will compile a printf without special formatting characters as a pit, so it ends up being six of one in the end.