
Welcome to the learn-c.org free interactive C tutorial. Whether you are an experienced programmer or not, this website is intended for everyone who wishes to learn the C programming language. There is…
Welcome to the learn-c.org free interactive C tutorial.
Whether you are an experienced programmer or not, this website is intended for everyone who wishes to learn the C programming language.
There is no need to download anything - Just click on the chapter you wish to begin from, and follow the instructions. Good luck!
learn-c.org is still under construction - If you wish to contribute tutorials, please click on Contributing Tutorials down below.
Read more here: Contributing Tutorials
As great as this looks, I think it should heavily emphasize moving on to using GCC (or maybe LLVM).
I learned C in the mid nineties using a copy of Visual C++ 1.0 that a friend had gotten from his father (and probably he got it from work). It was the only compiler I knew of and once I was ready to move beyond toy programs, I was seriously hampered by the fact that this compiler couldn't produce text mode executables (any call to printf opened its own new window that definitely wasn't cmd.exe) and it couldn't set the graphics mode for blitting pixels. It was heavily oriented around this new fangled MFC thing but I was a teenager so I wanted to program games not business apps or whatever. That meant I wanted text mode or graphics mode.
My high school CS class had Borland C++ and I could set mode 0x13 with that in DOS. But I had no way of obtaining this compiler as a kid. And it probably didn't work on Windows 95 anyway.
Anyways, it wasn't until the early 2000s that I finally learned about GCC, a free as in beer and freedom compiler and the simplicity of it would have been amazing for learning.. If only I had known.
> I was seriously hampered by the fact that this compiler couldn't produce text mode executables (any call to printf opened its own new window that definitely wasn't cmd.exe) and it couldn't set the graphics mode for blitting pixels.
This is incorrect. Visual C++ definitely could do all those things, it was in no way a toy. You probably had it mis-configured somehow.
I stole my copy of Borland C++ from school.
But as mesmerized as I was by C++ at the time, Borland Pascal was a lot more fun to play around with. I remember unsuccessfully trying to wrap my head around the different kinds of pointers, and the humble beginnings of std.
Even the first of Visual C++ was a professional C/C++ compiler. That's been the same Microsoft compiler they've been selling for years for $500. The previous version was just called Microsoft C/C++ 7.0.
It wasn't in any way a "toy". What I think you're talking about is that Microsoft was pushing the "Visual" aspect of the IDE that it was trying to copy from Visual Basic, but with MFC, and was doing a sucky job at it. You didn't have to use it. Most of us didn't.
Same here. Highschool programming class was a lot of fun, learning all the basics for the first time, but I too thought the first step of being a programmer was to obtain a Microsoft product.
Probably same years… whenever we got a new computer I was removing OS shipped and installing a previous MS OS. Win3.1? Nah I want DOS, win95 nah… I want 3.1. That’s where my tools were.
Funny thing I still use win10.
funny how much the tools you first get comfortable with shape everything after. even today, setting up a simple clean c environment is way harder than it should be for beginners. tutorials like this help, but eventually pointing people toward gcc or clang early on makes a huge difference long term.
I totally see what you mean but after 30 years of experience, I couldn’t put it that way. Even the simplest editor and a command line was enough for the “hello world!”.
Saw this mentioned in a HN comment and thought it deserved more attention: https://news.ycombinator.com/item?id=34106174
Skimming through the pages, there is some things that aren't really accurate.
> Integers - whole numbers which can be either positive or negative. Defined using char, int, short, long or long long
char is either signed or unsigned depending on the platform/implementation. Use signed char if you want signed integers.
Telling people who are new to C to define booleans with macros is not a good idea, as they have had a proper implementation since c99.
It also feels weird to treat structs and pointers as advanced topics. They are basically required to be productive in the language.
stdint.h was introduced in c99, not c11.
Explaining bitwise operators as "bitmasks" is also quite weird. Bitmasking is just one of the few things you can do with them.
> In C, functions must be first defined before they are used in the code. They can be either declared first and then implemented later on using a header file or in the beginning of the C file, or they can be implemented in the order they are used (less preferable).
This paragraph reads weird. I haven't found any place where the tutorial mentions how to properly write header files. It might be because of the interactive part, but if that is the case then this tutorial doesn't really teach you how to program in C because the tooling around it is an important part of actually using the language. It is also fairly common to declare functions in order of use. Discouraging that is like telling people they need to use tabs over spaces instead of actually focussing on language semantics.