5 ms·
Did this compiler really support "auto" as a variable type, as seen in example fizzbuzz ?
by burstmode 5y ago
Did this compiler really support "auto" as a variable type, as seen in example fizzbuzz ?
- bawolff 5y agoAuto is not a type, it means local variable. I think its still a thing, just its the default so nobody uses it.
- captainmuon 5y ago"auto" probably is the storage class, it tells what kind of variable this is. Automatic as opposed to "register" which would force the variable to be a register, or "static" or "extern". The type is not given at all, I think by default it would be "int".
- dvt 5y ago> The type is not given at all, I think by default it would be "int". Yep, this is called the "implicit int" rule, and it was specifically outlawed[1] by C99 and onward. [1] https://herbsutter.com/2015/04/16/reader-qa-why-was-implicit-int-removed/ https://herbsutter.com/2015/04/16/reader-qa-why-was-implicit...
- ufo 5y agoOne of the unusual things in this early version of C is that "int" can be used for any word-sized value, including pointers. The type system was very loose.
- Blikkentrekker 5y ago> types of the function parameters are not checked, anything can be passed to any function Still a better type system than Twilight.
- Turing_Machine 5y agoEven back then this was considered poor practice, however. The first edition of K&R had a subsection entitled "Pointers are Not Integers" (I don't know if that's still in modern editions).
- rbanffy 5y agoNow I want a float to access individual bits.
- ufo 5y agoThe interesting thing for me is that a variable without a type annotation could potentially store anything. It kind of explains why the language used "int" as the default type of variables declared without a type annotation.
- LukeShu 5y agoIt looks to me like that section was removed in the 2nd edition. Some sections moved around, so maybe I'm just looking in the wrong place, but it's not nestled between "5.5 Character Pointers and Functions" and "5.7 Multi-Dimensional Arrays" like it is in the 1st edition.
- deleted 5y ago[deleted]
- layoutIfNeeded 5y agoHehe, “auto” used to mean “automatic storage” aka the stack. Then much later C++ repurposed the keyword for type deduction.
- 1ris 5y ago"auto" in c is a storage class specifier, like "register", "extern" or "static". https://en.cppreference.com/w/c/language/storage_duration https://en.cppreference.com/w/c/language/storage_duration It was considered pretty useless by most, so c++11 recycled the keyword to mean something different.
- jwilk 5y agoSee also: https://www.seebs.net/faqs/c-iaq.html#question-1.8 https://www.seebs.net/faqs/c-iaq.html#question-1.8
- mywittyname 5y agoAuto is the implicit default right? As in function scoped, stack allocated, and lives until the function is returned? K&R (Second Ed). Makes no mention of the auto keyword in Section 1.10, but it does say, > Each local variable in a function comes into existence only when the function is called, and disappears when the function is exited. This is why such variables are usually known as automatic [sic] variables[...]
- 1ris 5y agoyes, exactly. That's why there is no need for it in modern c. This compiler however is different: The type is optional (and assumed to be int). Say you have a variable declaration "auto int i;". Back then you could omit int, now you can omit auto.
- IncRnd 5y agoNo. "auto" is not a type but a storage class that means automatically allocated instead of being allocated to a register, extern-al to the file, or in the static code segment.