Published 2023-05-12.
Last modified 2023-05-14.
Time to read: 3 minutes.
Recently I decided to brush up on my C programming.
I first discovered C during a visit in 1978 to the Computer Science department of University of California, Berkeley, where I also encounted UNIX for the first time.
From about 1983 to 1985 I was the unofficial Canadian distributor of the Lattice C compiler. I used that compiler for most of the programming work I was doing on PCs at the time. FedEx Express Canada did not come into being until 1987, UPS was even worse with the Canadian border than it is now, and Canada Post took forever to bring packages across the border. I bought in bulk at a discount, and sold at list price. Distribution is all about time and place.
I also sold the first edition of the K&R book (“The C Programming Language”) via mail order, and I provided technical support, which brought in interesting consulting work.
The Borland Turbo C compiler, released in 1990, was the original IDE. It was eventually replaced by Borland C++ compiler, which also compiled C. In 2005 I became the product marketing manager for most of Borland’s compilers. One of my responsibilities was to give free copies to book authors and members of the trade press. Borland C++ shipped in a massive box that was responsible for a lot of dead trees.
The C language has evolved since K&R days.
The current and previous iterations are well summarized on
cppreference.com
,
which also provides an online C/C++ IDE for sample code.
Revision History
1978: K&R book first published.
1989: C89, also known as ANSI X3. 159-1989, or ANSI C.
1995: NA1 (aka C94 and C95) added support for wide-characters, wide-strings, and international keyboard layouts.
1999:
C99 added restricted pointers, variable-length arrays, flexible array members,
complex numbers support, type-generic math, long long int
, extended identifiers,
hexadecimal floating-point constants, compound literals, designated initializers,
single line comments, extended integer type, the ability to mix declarations and code,
variadic macros, new math functions, inline functions, boolean types,
_Pragma
and standard pragmas, and VA_COPY
.
C99 removed implicit function declaration.
2011: C11 added concurrency support, type-generic expressions, alignment-related facilities, static assertion, Unicode support, floating-point characteristic macros, no-return functions, anonymous structures and unions, bound-checking, and reentrancy functions.
2018: C18 addressed defects in C11 without introducing new language features.
2023:
The most recent publicly available draft of the next release,
C23,
was released on April 1, 2023.
Unfortunately, that document was written for insiders, and is very difficult to read.
Happily, JeanHeyd Meneide, the Project Editor for ISO/IEC JTC1 SC22 WG14 - Programming Languages, C, wrote an
easy-to-read
Linux Is Written in C
It has been reported that Linux was originally written in C89, but Linux moved to C11 in 2022. I am curious as to why C18 is not used, since C18 just contains bug fixes for C11. Most of the Linux kernel code is written using the GNU extensions of GCC.
Online IDEs
I pioneered online programming with SMX Explorer in 1994, JSP Explorer in 2000, and supported most available languages in 2002 with Zamples.com.
Now it seems that every day another online programming option becomes available. Many are free:
-
Coliru
is used by
cppreference.com
; GitHub project - GitHub Codespaces is tightly integrated with Microsoft Azure.
- JetBrains Space
- OnlineGDB claims to be to first Online IDE, but the WayBack Machine shows that this site was created in 2016.
- Programiz
- TutorialsPoint CodingGround
- Replit
- OneCompiler
- ... and many more ... even more!
Installing C/C++ on WSL/Ubuntu
Online programming is fine for learning, but I prefer to be independent and self-reliant whenever practical for doing actual work.
Command-Line Toolchain
To program in C or C++ on Ubuntu using the traditional Linux command-line toolchain,
install the build-essential
Debian meta-package on Ubuntu.
It includes the GNU Compiler Collection (GCC),
which is a collection of compilers and libraries for
C, C++, Objective-C, Fortran, Ada, Go, and D programming languages.
It also includes make
and
libc6.1-dev
,
the GNU C development libraries and header files.
You probably should also install
gdb
, the GNU Project Debugger,
and the manual pages
about using GNU/Linux for development.
$ yes | sudo apt install build-essential gdb manpages-dev
Now you are able to compile and run C programs at the command line:
$ mkdir test && cd test $ cat >test.c <<EOF #include <stdio.h> int main(void) { printf("Hello, World!\n"); } EOF $ gcc test.c -o test && ./test Hello, World!
Visual Studio Code
Visual Studio Code is a high-quality (and free) IDE. To work with C and C++ in Visual Studio Code, install the Microsoft C/C++ extension.