References

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!

IEEE Floating Point

The IEEE Floating Point standard (754-2019) is available from the IEEE.

Unicode

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.

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.

C Standard Library

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.

POSIX

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.

Intel Manuals

See Lecture 7, "Assembly Language", for a list of Intel manuals.

GNU Manuals

The GNU Project produces much of the software that is used on Linux (the kernel)-based systems.

Notable software that you will use:

  1. The GNU Compiler Collection (GCC). Here are the GCC manuals.

  2. The GNU Debugger (GDB), and the GDB manual. See especially the Sample Session

  3. 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.

  4. The GNU Bourne (Again) Shell (aka bash), with its manual.

  5. GNU Make, a venerable build system.

  6. GNU Core utilities. These are the core utilities present on most Unix-like operating systems.

Other standards

These are not part of this course, but it's helpful to know they're out there.

Internet Standards

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.

Web Standards

Most web standards are developed by the World Wide Web Consortium.