Package: src/packages/cheaders.fdoc

C Headers

Headers

To use the facilities of C conveniently we first define some classes naming the standard header files.

The class construction provides a namespace.

The contained header specification provides a tag name for a C include line. A use of a type or function lifted from C depending on the inclusion of the header text causes the Felix compiler to emit the header text.

C Standards.

Each newer C Standard adds some header files. The inherit statement is used to include the headers from the previous standard into a more recent one.

C89 Standard.

The original ANSI Standard blessed as an ISO Standard.

// reference: Wikipedia: http://en.wikibooks.org/wiki/C_Programming/Reference_Tables#List_of_Standard_Headers

// ANSI C89 = ISO C90
class C89_headers
{
  header assert_h =   "#include <assert.h>";
  header ctype_h =    "#include <ctype.h>";
  header errno_h =    "#include <errno.h>";
  header float_h =    "#include <float.h>";
  header limits_h =   "#include <limits.h>";
  header locale_h =   "#include <locale.h>";
  header math_h =     "#include <math.h>";
  header setjmp_h =   "#include <setjmp.h>";
  header signal_h =   "#include <signal.h>";
  header stdarg_h =   "#include <stdarg.h>";
  header stddef_h =   "#include <stddef.h>";
  header stdio_h =    "#include <stdio.h>";
  header stdlib_h =   "#include <stdlib.h>";
  header string_h =   "#include <string.h>";
  header time_h =     "#include <time.h>";
}

C95 Amendment

Added support for wide characters.

// ISO C94/95 Amendment 1
class C95_headers
{
  inherit C89_headers;
  header iso646_h =   "#include <iso646.h>";
  header wchar_h =    "#include <wchar.h>";
  header wctype_h =   "#include <wctype.h>";
}

C99 Standard

Added support for complex, exact integer types and bool.

// ISO C99
class C99_headers
{
  inherit C95_headers;
  header complex_h =  "#include <complex.h>";
  header fenv_h =     "#include <fenv.h>";
  header inttypes_h = "#include <inttypes.h>";
  header wctype_h =   "#include <wctype.h>";
  header stdbool_h =  "#include <stdbool.h>";
  header stdint_h =   "#include <stdint.h>";
  header tgmath_h =   "#include <tgmath.h>";
}

C++ Standards.

Each newer C++ Standard adds some header files. The inherit statement is used to include the headers from the previous standard into a more recent one.

C++90 Standard

The original C++ Standard.

class Cxx_headers
{
  header exception = '#include <exception>';
  header limits = '#include <limits>';
  header new = '#include <new>';
  header typeinfo = '#include <typeinfo>';
  header stdexcept = '#include <stdexcept>';
  header utility = '#include <utility>';
  header memory = '#include <memory>';
  header string = '#include <string>';
  header locale = '#include <locale>';

// STL
  header functional = '#include <functional>';
  header algorithm = '#include <algorithm>';
  header bitset = '#include <bitset>';
  header deque = '#include <deque>';
  header iterator = '#include <iterator>';
  header list = '#include <list>';
  header map = '#include <map>';
  header set = '#include <set>';
  header stack = '#include <stack>';
  header vector = '#include <vector>';
  header complex = '#include <complex>';
  header numeric = '#include <numeric>';
  header valarray = '#include <valarray>';

// I/O
  header fstream = '#include <fstream>';
  header iomanip = '#include <iomanip>';
  header ios = '#include <ios>';
  header iosfwd = '#include <iosfwd>';
  header iostream = '#include <iostream>';
  header istream = '#include <istream>';
  header ostream = '#include <ostream>';
  header streambuf = '#include <streambuf>';
  header sstream = '#include <sstream>';

// ISO C wrappers
  header cassert = '#include <cassert>';
  header cctype = '#include <cctype>';
  header cerrno = '#include <cerrno>';
  header cfloat = '#include <cfloat>';
  header ciso646 = '#include <ciso646>';
  header climits = '#include <climits>';
  header clocale = '#include <clocale>';
  header cmath = '#include <cmath>';
  header csetjmp = '#include <csetjmp>';
  header csignal = '#include <csignal>';
  header cstdarg = '#include <cstdarg>';
  header cstdio = '#include <cstdio>';
  header cstdlib = '#include <cstdlib>';
  header cstring = '#include <cstring>';
  header ctime = '#include <ctime>';
  header cwchar = '#include <cwchar>';
  header cwctype = '#include <cwctype>';
}

C++11 Standard.

A more recent standard from 2011. Added a huge number of new features.

class Cxx11_headers  // http://en.cppreference.com/w/cpp/header
{
  inherit Cxx_headers;
  header system_error = '#include <system_error>'; // std=?
  header typeidex = '#include <typeindex>';
  header type_traits = '#include <type_traits>';
  header chrono = '#include <chrono>';
  header initialiser_list = '#include <initialiser_list>';
  header tuple = '#include <tuple>';
  header scope_allocator = '#include <tuple>';
  header cuchar = '#include <cuchar>';
  header array = '#include <array>';
  header forward_list = '#include <forward_list>';
  header unordered_set = '#include <unordered_set>';
  header unordered_map = '#include <unordered_map>';
  header ratio = '#include <ratio>';
  header cfenv= '#include <ratio>';
  header codecvt = '#include <codecvt>';
  header regex = '#include <regex>';
  header random = '#include <random>';
  header atomic = '#include <atomic>';
  header thread = '#include <thread>';
  header mutex = '#include <mutex>';
  header future = '#include <future>';
  header condition_variable = '#include <condition_variable>';
  header ctgmath = '#include <ctgmath>';
  header cstdalign = '#include <cstdalign>';
  header cstdbool = '#include <cstdbool>';
}

Posix

There are multiple Posix standards but we just include headers from the most recent, most final one.

class Posix_headers {
  header aio_h = "#include <aio.h>";
  header arpa_inet_h = "#include <arpa/inet.h>";
  header cpio_h = "#include <cpio.h>";
  header dirent_h = "#include <dirent.h>";
  header dlfcn_h = "#include <dlfcn.h>";
  header fcntl_h = "#include <fcntl.h>";
  header fmtmsg_h = "#include <fmtmsg.h>";
  header fnmatch_h = "#include <fnmatch.h>";
  header ftw_h = "#include <ftw.h>";
  header glob_h = "#include <glob.h>";
  header grp_h = "#include <grp.h>";
  header iconv_h = "#include <iconv.h>";
  header langinfo_h = "#include <langinfo.h>";
  header libgen_h = "#include <libgen.h>";
  header monetary_h = "#include <monetary.h>";
  header mqueue_h = "#include <mqueue.h>";
  header ndbm_h = "#include <ndbm.h>";
  header net_if_h = "#include <net/if.h>";
  header netdb_h = "#include <netdb.h>";
  header netinet_in_h = "#include <netinet/in.h>";
  header netinet_tcp_h = "#include <netinet/tcp.h>";
  header nl_types_h = "#include <nl_types.h>";
  header poll_h = "#include <poll.h>";
  header pthread_h = "#include <pthread.h>";
  header pwd_h = "#include <pwd.h>";
  header regex_h = "#include <regex.h>";
  header sched_h = "#include <sched.h>";
  header search_h = "#include <search.h>";
  header semaphore_h = "#include <semaphore.h>";
  header spawn_h = "#include <spawn.h>";
  header strings_h = "#include <strings.h>";
  header stropts_h = "#include <stropts.h>";
  header sys_ipc_h = "#include <sys/ipc.h>";
  header sys_mman_h = "#include <sys/mman.h>";
  header sys_msg_h = "#include <sys/msg.h>";
  header sys_resource_h = "#include <sys/resource.h>";
  header sys_select_h = "#include <sys/select.h>";
  header sys_sem_h = "#include <sys/sem.h>";
  header sys_shm_h = "#include <sys/shm.h>";
  header sys_socket_h = "#include <sys/socket.h>";
  header sys_stat_h = "#include <sys/stat.h>";
  header sys_statvfs_h = "#include <sys/statvfs.h>";
  header sys_time_h = "#include <sys/time.h>";
  header sys_times_h = "#include <sys/times.h>";
  header sys_types_h = "#include <sys/types.h>";
  header sys_uio_h = "#include <sys/uio.h>";
  header sys_un_h = "#include <sys/un.h>";
  header sys_utsname_h = "#include <sys/utsname.h>";
  header sys_wait_h = "#include <sys/wait.h>";
  header syslog_h = "#include <syslog.h>";
  header tar_h = "#include <tar.h>";
  header termios_h = "#include <termios.h>";
  header trace_h = "#include <trace.h>";
  header ulimit_h = "#include <ulimit.h>";
  header unistd_h = "#include <unistd.h>";
  header utime_h = "#include <utime.h>";
  header utmpx_h = "#include <utmpx.h>";
  header wordexp_h = "#include <wordexp.h>";
}

Windows

The name win32 for the original 32 bit Windows has stuck, even for 64 bit Windows.

class Win32_headers {
  header windows_h = "#include <windows.h>";
  header io_h = "#include <io.h>";
  header direct_h = "#include <direct.h>";
  header sys_timeb_h = "#include <sys/timeb.h>";
  header sys_utime_h = "#include <sys/utime.h>";
  header process_h = "#include <process.h>";
}