This page contains links to definitive (and authoritative) references on many topics covered in the course.
Note: These are usually the last word on a subject, not the first and unless the authors were especially good writers, the material is usually very dry.
Also, sadly, many (but not all) standards bodies charge for copies of standards. This is unfortunate, since like most academic publications, authors are not paid for these standards!
The IEEE Floating Point standard (754-2019) is available from the IEEE.
The Unicode standard describes how to encode text in all of the world's many languages, superseding many local encodings (including ASCII). If you write anything on modern computer (including emojis) you're using Unicode.
In particular, as part of A1, you learnt how to how to encode and decode UTF-8, which is the part of the standard that describes how to encode Unicode such that it is mostly compatible with older software written in C.
The C Standard has undergone multiple revisions. The first variant of C was K&R C. The most widely used C variant was the ANSI C standard. We are using C99 in this course, which has been obsoleted by C11 and C18.
The actual standards cannot be obtained unless you pay the ISO or ANSI.
However, you can obtain the final drafts of the standard from the people who wrote the standard.
For this course, the standard reference for C is the GNU C Reference Manual. This is not C99, but is freely available. It has GNU-specific extensions (so it is sometimes called gnu99). The following command:
gcc -std=c99 myfile.c
enable C99 and will warn you whenever you use a feature of the
language that is not C99. By default, gcc
uses C89 plus some
GNU-specific extensions.
The C language is accompanied by a library that provides most of the routines you will use in your day-to-day C code (input/output, mathematics, etc.). It is part of the C language standard.
In this course, we will refer to the GNU C Library.
Although this is a very large manual, it is worth reading it.
The IEEE Portable Operating System Interface (POSIX) standard defines the services provided by a Unix-like operating system. Windows also provides a basic set of POSIX services. It is maintained by the Austin Group.
Although Linux tries to be POSIX-compliant, it hasn't been officially certified.
Our reference will be the manual pages at the Linux man-pages project -- although the GNU C Library also complements this reference.
See Lecture 7, "Assembly Language", for a list of Intel manuals.
The GNU Project produces much of the software that is used on Linux (the kernel)-based systems.
Notable software that you will use:
The GNU Compiler Collection (GCC). Here are the GCC manuals.
The GNU Debugger (GDB), and the GDB manual. See especially the Sample Session
The GNU Binary Utilitis (binutils) is a collection of programs including the GNU Linker (ld
), the GNU assembler (gas
), objdump
, etc. Manuals for these programs.
The GNU Bourne (Again) Shell (aka bash), with its manual.
GNU Make, a venerable build system.
GNU Core utilities. These are the core utilities present on most Unix-like operating systems.
These are not part of this course, but it's helpful to know they're out there.
You can find all the standards used on the Internet for free at rfc-editor or at IETF.
See, for example, HTTP 1.1, the protocol you use to access the Web.
Most web standards are developed by the World Wide Web Consortium.