diff options
Diffstat (limited to 'static/freebsd/man7/c.7')
| -rw-r--r-- | static/freebsd/man7/c.7 | 532 |
1 files changed, 532 insertions, 0 deletions
diff --git a/static/freebsd/man7/c.7 b/static/freebsd/man7/c.7 new file mode 100644 index 00000000..c95bab1c --- /dev/null +++ b/static/freebsd/man7/c.7 @@ -0,0 +1,532 @@ +.\" Copyright (C) 2007, 2010 Gabor Kovesdan. All rights reserved. +.\" Copyright (C) 2021 Faraz Vahedi <kfv@kfv.io> +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.Dd November 4, 2024 +.Dt C 7 +.Os +.Sh NAME +.Nm c , +.Nm c78 , +.Nm c89 , +.Nm c90 , +.Nm c95 , +.Nm c99 , +.Nm c11 , +.Nm c17 , +.Nm c23 , +.Nm c2y +.Nd The C programming language +.Sh DESCRIPTION +C is a general purpose programming language, which has a strong connection +with the UNIX operating system and its derivatives, since the vast +majority of those systems were written in the C language. +The C language contains some basic ideas from the BCPL language through +the B language written by Ken Thompson in 1970 for the DEC PDP-7 machines. +The development of the UNIX operating system was started on a PDP-7 +machine in assembly language, but it made very difficult to port the existing +code to other systems. +.Pp +In 1972 Dennis M. Ritchie worked out the C programming language for +further development of the UNIX operating system. +The idea was to implement only the C compiler for different +platforms, and implement most part of the operating system +in the new programming language to simplify the portability between +different architectures. +It follows that C is very eligible for (but not limited to) writing +operating systems and low-level applications. +.Pp +The C language did not have a specification or standardized version for +a long time. +It went through a lot of changes and improvements for ages. +In 1978, Brian W. Kernighan and Dennis M. Ritchie published the +first book about C under the title "The C Programming Language". +We can think of this book as the first specification of the language. +This version is often referred as K&R C after the names of the authors. +Sometimes it is referred as C78, as well, after the publishing year of +the first edition of the book. +.Pp +It is important to notice, that the instruction set of the language is +limited to the most fundamental elements for simplicity. +Handling of the standard I/O and such common functions are implemented in +the libraries shipped with the compiler. +As these functions are also widely used, it was demanded to include into +the description what requisites the library should conform to, not just +strictly the language itself. +Accordingly, the aforementioned standards cover the library elements, as well. +The elements of this standard library is still not enough for more +complicated tasks. +In this case the provided system calls of the given operating system can be +used. +To not lose the portability by using these system calls, the POSIX +(Portable Operating System Interface) standard evolved. +It describes what functions should be available to keep portability. +Note, that POSIX is not a C standard, but an operating system standard +and thus is beyond the scope of this manual. +The standards discussed below are all C standards and only cover +the C programming language and the accompanying library. +All listed improvements for each standard edition are taken from the official +standard drafts. +For further details, check the publicly available drafts or +purchase the published standards \(em from either ISO or IEC resources. +.Pp +After the publication of the book mentioned before, +the American National Standards Institute (ANSI) started to work on +standardizing the language, and they announced ANSI X3.159-1989 +in 1989. +It is usually referred to as ANSI C or C89. +The main difference in this standard were the function prototypes, +which is a new way of declaring functions. +With the old-style function declarations, the compiler was unable to +check the sanity of the actual parameters at a function call. +The old syntax was highly error-prone because incompatible parameters +were hard to detect in the program code and the problem only showed up +at run-time. +.Pp +In 1990, the International Organization for Standardization (ISO) adopted +the ANSI standard as ISO/IEC 9899:1990 in 1990. +This is also referred to as ISO C or C90. +It only contains negligible minor modifications against ANSI C, +so the two standards often considered to be fully equivalent. +This was a very important milestone in the history of the C language, but the +development of the language did not stop. +.Pp +The ISO C standard was later extended with an amendment as +ISO/IEC 9899/AMD1 in 1995. +This contained, for example, the wide-character support in +.In wchar.h +and +.In wctype.h , +and also restricted character set support via diagraphs and +.In iso646.h . +This amendment is usually referred to as C95. +Two technical corrigenda were also published: Technical Corrigendum 1 as +ISO/IEC 9899/COR1 in 1994 and Technical Corrigendum 2 as ISO/IEC 9899/COR2 +in 1996. +The continuous development and growth made it necessary to work out a new +standard, which contains the new features and fixes the known defects and +deficiencies of the language. +As a result, ISO/IEC 9899:1999 was born in 1999 as the second edition of the +standard. +Similarly to the other standards, this is informally named after the +publication year as C99. +The improvements include (but are not limited to) the following: +.Bl -bullet -offset indent +.It +digraphs, trigraphs, and alternative spellings for the operators that +use non-ISO646 characters in +.In iso646.h +.It +extended multibyte and wide character library support in +.In wchar.h +and +.In wctype.h +.It +variable length arrays +.It +flexible array members +.It +complex (and imaginary) number arithmetic support in +.In complex.h +.It +type-generic math macros in +.In tgmath.h +.It +the long long int type and library functions +.It +remove implicit int type +.It +universal character names (\eu and \eU) +.It +compound literals +.It +remove implicit function declaration +.It +BCPL style single-line comments +.It +allow mixed declarations and code +.It +the +.Fn vscanf +family of functions in +.In stdio.h +and +.In wchar.h +.It +allow trailing comma in enum declaration +.It +inline functions +.It +the +.Fn snprintf +family of functions in +.In stdio.h +.It +boolean type and macros in +.In stdbool.h +.It +empty macro arguments +.It +_Pragma preprocessing operator +.It +__func__ predefined identifier +.It +va_copy macro in +.In stdarg.h +.It +additional strftime conversion specifiers +.El +.Pp +Later in 2011, the third edition of the standard, ISO/IEC 1989:2011, +commonly referred to as C11 (formerly C1x), came out and replaced the +second edition by ISO/IEC 9899:1999/COR1:2001, ISO/IEC 9899:1999/COR2:2004, +and ISO/IEC 9899:1999/COR3:2007. +The improvements include (but are not limited to) the following: +.Bl -bullet -offset indent +.It +support for multiple threads of execution and atomic operations in +.In threads.h +and +.In stdatomic.h +.It +additional floating-point characteristic macros in +.In float.h +.It +querying and specifying alignment of objects in +.In stdalign.h +and +.In stdlib.h +.It +Unicode character types and functions in +.In uchar.h +.It +type-generic expressions +.It +static assertions in +.In assert.h +.It +anonymous structures and unions +.It +remove the gets function from +.In stdio.h +.It +add the aligned_alloc, at_quick_exit, and quick_exit functions in +.In stdlib.h +.El +.Pp +C11 was later superseded by ISO/IEC 9899:2018, also known as C17 which was +prepared in 2017 and published in June 2018 as the fourth edition. +It incorporates the Technical Corrigendum 1 (ISO/IEC 9899:2011/COR1:2012) +which was published in 2012. +It addressed defects and deficiencies in C11 without introducing new features, +only corrections and clarifications. +.Pp +C23, formally ISO/IEC 9899:2024, is the current standard with significant +updates that supersede C17 (ISO/IEC 9899:2018). +The standardization effort began in 2016, informally as C2x, with the first +WG14 meeting in 2019, and was officially published on October 31, 2024. +C23 was originally anticipated for an earlier release, but the timeline was +extended due to COVID-19 pandemic. +With C23, the value of __STDC_VERSION__ has been updated from 201710L to +202311L. +Key changes include (but are not limited to) the following: +.Bl -bullet -offset indent +.It +Add null pointer type nullptr_t and the nullptr keyword +.It +Add constexpr keyword as a storage-class specifier for objects +.It +Redefine the usage of the auto keyword to support type inference while also +retaining its previous functionality as a storage-class specifier when used +with a type +.It +Add %b binary conversion specifier to the +.Fn printf +and +.Fn scanf +function families +.It +Add binary conversion support (0b and 0B) to the +.Fn strtol +and +.Fn wcstol +function families +.It +Add the #embed directive for binary resource inclusion and __has_embed to +check resource availability with preprocessor directives +.It +Add the #warning directive for diagnostics +.It +Add the #elifdef and #elifndef directives +.It +Add the u8 prefix for character literals to represent UTF-8 encoding, +compatible with C++17 +.It +Add the char8_t type for UTF-8 encoded data and update the types of u8 +character constants and string literals to char8_t +.It +Add functions +.Fn mbrtoc8 +and +.Fn c8rtomb +to convert between narrow multibyte +characters and UTF-8 encoding +.It +Define all char16_t strings and literals as UTF-16 encoded and char32_t +strings and literals as UTF-32 encoded unless specified otherwise +.It +Allow storage-class specifiers within compound literals +.It +Support the latest IEEE 754 standard, ISO/IEC 60559:2020, with binary and +(optional) decimal floating-point arithmetic +.It +Add single-argument _Static_assert for compatibility with C++17 +.It +Add _Decimal32, _Decimal64, _Decimal128 keywords for (optional) decimal +floating-point arithmetic +.It +Add digit separator ' (the single quote character) for literals +.It +Enable specification of the underlying type of an enum +.It +Standardize the +.Fn typeof +operator +.It +Add +.Fn memset_explicit +in +.In string.h +to securely erase sensitive data +regardless of optimizations +.It +Add +.Fn memccpy +in +.In string.h +for efficient string concatenation +.It +Add +.Fn memalignment +in +.In stdlib.h +to determine pointer alignment +.It +Add +.Fn strdup +and +.Fn strndup +in +.In string.h +to allocate string copies +.It +Introduce bit utility functions, macros, and types in the new header +.In stdbit.h +.It +Add +.Fn timegm +in +.In time.h +for converting time structures to calendar time +values +.It +Add __has_include for header availability checking via preprocessor +directives +.It +Add __has_c_attribute to check attribute availability via preprocessor +directives +.It +Add _BitInt(N) and unsigned _BitInt(N) for bit-precise integers, and +BITINT_MAXWIDTH for maximum bit width +.It +Elevate true and false to proper keywords (previously macros from +.In stdbool.h ) +.It +Add keywords alignas, alignof, bool, static_assert, thread_local; previously +defined keywords remain available as alternative spellings +.It +Enable zero initialization with {} (including initialization of VLAs) +.It +Introduce C++11 style attributes using [[]], with adding [[deprecated]], +[[fallthrough]], [[maybe_unused]], [[nodiscard]], and [[noreturn]] +.It +Deprecate _Noreturn, noreturn, header +.In stdnoreturn.h +features introduced +in C11 +.It +Remove trigraph support +.It +Remove K&R function definitions and declarations +.It +Remove non-two's-complement representations for signed integers +.El +.Pp +The next version of the C Standard, informally named C2y, is anticipated +to release within the next six years, targeting 2030 at the latest. +A charter for C2y is still being drafted and discussed, with several +papers under debate from the January 2024 meeting in Strasbourg, France +indicating that this new version may address long-standing requests and +deficiencies noted by the C community, while preserving its core strengths. +.Pp +ISO/IEC JTC1/SC22/WG14 committee is responsible for the ISO/IEC 9899, +C Standard. +.Sh SEE ALSO +.Xr c89 1 , +.Xr c99 1 , +.Xr cc 1 +.Sh STANDARDS +.Rs +.%A ANSI +.%T X3.159-1989 (aka C89 or ANSI C) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:1990 (aka C90) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:1990/AMD 1:1995, Amendment 1: C Integrity (aka C95) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:1990/COR 1:1994, Technical Corrigendum 1 +.Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:1990/COR 2:1996, Technical Corrigendum 2 +.Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:1999 (aka C99) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:1999/COR 1:2001, Technical Corrigendum 1 +.Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:1999/COR 2:2004, Technical Corrigendum 2 +.Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:1999/COR 3:2007, Technical Corrigendum 3 +.Re +.Pp +.Rs +.%A ISO/IEC +.%T TR 24731-1:2007 (aka bounds-checking interfaces) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T TS 18037:2008 (aka, embedded C) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T TR 24747:2009 (aka mathematical special functions) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T TR 24732:2009 (aka decimal floating-point) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T TR 24731-2:2010 (aka dynamic allocation functions) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:2011 (aka C11) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:2011/COR 1:2012, Technical Corrigendum 1 +.Re +.Pp +.Rs +.%A ISO/IEC +.%T TS 17961:2013 (aka C secure coding rules) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T TS 18861-1:2014 (aka binary floating-point) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T TS 18861-2:2015 (aka decimal floating-point) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T TS 18861-3:2015 (aka interchange and extended types) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T TS 18861-4:2015 (aka supplementary functions) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T TS 17961:2013/COR 1:2016 (aka C secure coding rules TC1) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T TS 18861-5:2016 (aka supplementary attributes) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:2018 (aka C17) +.Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:2024 (aka C23) +.Re +.Sh HISTORY +This manual page first appeared in +.Fx 9.0 . +.Sh AUTHORS +.An -nosplit +This manual page was originally written by +.An Gabor Kovesdan Aq Mt gabor@FreeBSD.org . +It was updated by +.An Faraz Vahedi Aq Mt kfv@kfv.io +with information about more recent C standards. |
