C (Programming Language)
C (Programming Language)
There is a small, xed number of keywords, including a full set of ow of control primitives: for,
if/else, while, switch, and do/while. There is one
namespace, and user-dened names are not distinguished from keywords by any kind of sigil.
There are a large number of arithmetical and logical
operators, such as +, +=, ++, &, ~, etc.
More than one assignment may be performed in a
single statement.
Design
Despite its low-level capabilities, the language was designed to encourage cross-platform programming. A
standards-compliant and portably written C program
can be compiled for a very wide variety of computer
platforms and operating systems with few changes to
its source code. The language has become available
on a very wide range of platforms, from embedded
microcontrollers to supercomputers.
Overview
3 HISTORY
Enumerated types are possible with the enum
keyword. They are not tagged, and are freely
interconvertible with integers.
Strings are not a separate data type, but
are conventionally implemented as nullterminated arrays of characters.
Low-level access to computer memory is possible by
converting machine addresses to typed pointers.
Procedures (subroutines not returning values) are a
special case of function, with an untyped return type
void.
Ken Thompson (left) with Dennis Ritchie (right, the inventor of
Functions may not be dened within the lexical
scope of other functions.
assembly language on a PDP-7 by Ritchie and Thomp Function and data pointers permit ad hoc run-time son, incorporating several ideas from colleagues. Eventupolymorphism.
ally, they decided to port the operating system to a PDP11. The original PDP-11 version of Unix was developed
A preprocessor performs macro denition, source
in assembly language. The developers were considering
code le inclusion, and conditional compilation.
rewriting the system using the B language, Thompsons
[9]
There is a basic form of modularity: les can be simplied version of BCPL. However Bs inability to
compiled separately and linked together, with con- take advantage of some of the PDP-11s features, notably
trol over which functions and data objects are visible byte addressability, led to C.
to other les via static and extern attributes.
Complex functionality such as I/O, string manipulation, and mathematical functions are consistently
delegated to library routines.
Unix was one of the rst operating system kernels implemented in a language other than assembly. (Earlier
instances include the Multics system (written in PL/I),
and MCP (Master Control Program) for the Burroughs
B5000 written in ALGOL in 1961.) Circa 1977, Ritchie
and Stephen C. Johnson made further changes to the language to facilitate portability of the Unix operating system. Johnsons Portable C Compiler served as the basis
for several implementations of C on new platforms.[10]
3.2 K&R C
History
3.3
3
test2 = other_function(); return test2; }
The int type speciers which are commented out could
be omitted in K&R C, but are required in later standards.
Since K&R function declarations did not include any information about function arguments, function parameter
type checks were not performed, although some compilers would issue a warning message if a local function was
called with the wrong number of arguments, or if multiple calls to an external function used dierent numbers or
types of arguments. Separate tools such as Unixs lint utility were developed that (among other things) could check
for consistency of function use across multiple source
les.
In the years following the publication of K&R C, several
features were added to the language, supported by compilers from AT&T (in particular PCC[15] ) and some other
vendors. These included:
void functions (i.e., functions with no return value)
functions returning struct or union types (rather than
pointers)
The cover of the book, The C Programming Language, rst edition by Brian Kernighan and Dennis Ritchie
3 HISTORY
__STDC__ macro can be used to split the code into Standard and K&R sections to prevent the use on a K&R Cbased compiler of features available only in Standard C.
After the ANSI/ISO standardization process, the C language specication remained relatively static for several
years. In 1995 Normative Amendment 1 to the 1990 C
standard (ISO/IEC 9899/AMD1:1995, known informally
as C95) was published, to correct some details and to add
more extensive support for international character sets.
3.4 C99
Main article: C99
The C standard was further revised in the late 1990s,
leading to the publication of ISO/IEC 9899:1999 in 1999,
which is commonly referred to as "C99". It has since been
amended three times by Technical Corrigenda.[16]
C99 introduced several new features, including inline
functions, several new data types (including long long
int and a complex type to represent complex numbers),
The cover of the book, The C Programming Language, second variable-length arrays and exible array members, imedition by Brian Kernighan and Dennis Ritchie covering ANSI C proved support for IEEE 754 oating point, support for
variadic macros (macros of variable arity), and support
for one-line comments beginning with //, as in BCPL or
ANSI, like other national standards bodies, no longer C++. Many of these had already been implemented as
develops the C standard independently, but defers to extensions in several C compilers.
the international C standard, maintained by the working C99 is for the most part backward compatible with C90,
group ISO/IEC JTC1/SC22/WG14. National adoption but is stricter in some ways; in particular, a declaration
of an update to the international standard typically occurs that lacks a type specier no longer has int implicitly aswithin a year of ISO publication.
sumed. A standard macro __STDC_VERSION__ is deOne of the aims of the C standardization process was
to produce a superset of K&R C, incorporating many
of the subsequently introduced unocial features. The
standards committee also included several additional features such as function prototypes (borrowed from C++),
void pointers, support for international character sets and
locales, and preprocessor enhancements. Although the
syntax for parameter declarations was augmented to include the style used in C++, the K&R interface continued
to be permitted, for compatibility with existing source
code.
C89 is supported by current C compilers, and most C
code being written today is based on it. Any program
written only in Standard C and without any hardwaredependent assumptions will run correctly on any platform
with a conforming C implementation, within its resource
limits. Without such precautions, programs may compile
only on a certain platform or with a particular compiler,
due, for example, to the use of non-standard libraries,
such as GUI libraries, or to a reliance on compiler- or
platform-specic attributes such as the exact size of data
types and byte endianness.
3.5 C11
Main article: C11 (C standard revision)
In 2007, work began on another revision of the C standard, informally called C1X until its ocial publication on 2011-12-08. The C standards committee adopted
guidelines to limit the adoption of new features that had
not been tested by existing implementations.
4.1
Character set
3.6
Embedded C
Syntax
5
tion, testing, and reinitialization expressions, any or all of
which can be omitted. break and continue can be used
to leave the innermost enclosing loop statement or skip
to its reinitialization. There is also a non-structured goto
statement which branches directly to the designated label
within the function. switch selects a case to be executed
based on the value of an integer expression.
Expressions can use a variety of built-in operators and
may contain function calls. The order in which arguments
to functions and operands to most operators are evaluated
is unspecied. The evaluations may even be interleaved.
However, all side eects (including storage to variables)
will occur before the next "sequence point"; sequence
points include the end of each expression statement, and
the entry to and return from each function call. Sequence
points also occur during evaluation of expressions containing certain operators (&&, ||, ?: and the comma operator). This permits a high degree of object code optimization by the compiler, but requires C programmers
to take more care to obtain reliable results than is needed
for other programming languages.
backspace, and carriage return. Run-time support for extended character sets has increased with each revision of
the C standard.
4.2
Reserved words
C89 has 32 reserved words, also known as keywords, C uses the = operator, reserved in mathematics to express
which are the words that cannot be used for any purposes equality, to indicate assignment, following the precedent
of Fortran and PL/I, but unlike ALGOL and its derivaother than those for which they are predened:
tives. The similarity between Cs operator for assignC99 reserved ve more words:
ment and that for equality (==) has been criticized as it
makes it easy to accidentally substitute one for the other.
C11 reserved seven more words:[22]
In many cases, each may be used in the context of the
Most of the recently reserved words begin with an unother without a compilation error (although some comderscore followed by a capital letter, because identiers
pilers produce warnings). For example, the conditional
of that form were previously reserved by the C standard
expression in if(a=b+1) is true if a is not zero after the
for use only by implementations. Since existing proassignment.[24] Additionally, Cs operator precedence is
gram source code should not have been using these idennon-intuitive, such as == binding more tightly than & and
tiers, it would not be aected when C implementations
| in expressions like x & 1 == 0, which would need to be
started supporting these extensions to the programming
written (x & 1) == 0 to be properly evaluated.[25]
language. Some standard headers do dene more convenient synonyms for underscored identiers. The language
previously included a reserved word called entry, but this
was seldom implemented, and has now been removed as 5 Hello, world example
a reserved word.[23]
The "hello, world" example, which appeared in the rst
edition of K&R, has become the model for an introduc4.3 Operators
tory program in most programming textbooks, regardless
of programming language. The program prints hello,
Main article: Operators in C and C++
world to the standard output, which is usually a terminal
or screen display.
C supports a rich set of operators, which are symbols used The original version was:[26]
within an expression to specify the manipulations to be
performed while evaluating that expression. C has oper- main() { printf(hello, world\n); }
ators for:
A standard-conforming hello, world program
is:[lower-alpha 1]
arithmetic: +, -, *, /, %
#include <stdio.h> int main(void) { printf(hello,
assignment: =
world\n); }
augmented assignment: +=, -=, *=, /=, %=, &=, |=,
^=, <<=, >>=
The rst line of the program contains a preprocessing di bitwise logic: ~, &, |, ^
bitwise shifts: <<, >>
boolean logic: !, &&, ||
conditional evaluation: ? :
equality testing: ==, !=
calling functions: ( )
increment and decrement: ++, - member selection: ., ->
object size: sizeof
order relations: <, <=, >, >=
6.1
Pointers
as a parameter list indicates that this function takes no integers of equal width requires a conversion of the signed
arguments.[lower-alpha 2]
value to unsigned. This can generate unexpected results
The opening curly brace indicates the beginning of the if the signed value is negative.
denition of the main function.
The next line calls (diverts execution to) a function named
printf, which is supplied from a system library. In this
call, the printf function is passed (provided with) a single
argument, the address of the rst character in the string
literal hello, world\n. The string literal is an unnamed
array with elements of type char, set up automatically by
the compiler with a nal 0-valued character to mark the
end of the array (printf needs to know this). The \n is an
escape sequence that C translates to a newline character,
which on output signies the end of the current line. The
return value of the printf function is of type int, but it is
silently discarded since it is not used. (A more careful
program might test the return value to determine whether
or not the printf function succeeded.) The semicolon ;
terminates the statement.
The closing curly brace indicates the end of the code
for the main function. According to the C99 specication and newer, the main function, unlike any other function, will implicitly return a status of 0 upon reaching
the } that terminates the function. This is interpreted by
the run-time system as an exit code indicating successful
execution.[27]
Data types
6.1 Pointers
C supports the use of pointers, a type of reference that
records the address or location of an object or function in memory. Pointers can be dereferenced to access data stored at the address pointed to, or to invoke
a pointed-to function. Pointers can be manipulated using assignment or pointer arithmetic. The run-time representation of a pointer value is typically a raw memory address (perhaps augmented by an oset-within-word
eld), but since a pointers type includes the type of the
thing pointed to, expressions including pointers can be
type-checked at compile time. Pointer arithmetic is automatically scaled by the size of the pointed-to data type.
Pointers are used for many purposes in C. Text strings
are commonly manipulated using pointers into arrays of
characters. Dynamic memory allocation is performed using pointers. Many data types, such as trees, are commonly implemented as dynamically allocated struct objects linked together using pointers. Pointers to functions
are useful for passing functions as arguments to higherorder functions (such as qsort or bsearch) or as callbacks
to be invoked by event handlers.[27]
A null pointer value explicitly points to no valid location. Dereferencing a null pointer value is undened, often resulting in a segmentation fault. Null pointer values
are useful for indicating special cases such as no next
pointer in the nal node of a linked list, or as an error
indication from functions returning pointers. In appropriate contexts in source code, such as for assigning to a
pointer variable, a null pointer constant can be written as
0, with or without explicit casting to a pointer type, or as
the NULL macro dened by several standard headers. In
conditional contexts, null pointer values evaluate to false,
while all other pointer values evaluate to true.
7 MEMORY MANAGEMENT
6.2
Arrays
9
Dynamic memory allocation: blocks of memory of
arbitrary size can be requested at run-time using
library functions such as malloc from a region of
memory called the heap; these blocks persist until
subsequently freed for reuse by calling the library
function realloc or free
These three approaches are appropriate in dierent situations and have various tradeos. For example, static
memory allocation has little allocation overhead, automatic allocation may involve slightly more overhead, and
dynamic memory allocation can potentially have a great
deal of overhead for both allocation and deallocation. The
persistent nature of static objects is useful for maintaining state information across function calls, automatic allocation is easy to use but stack space is typically much
more limited and transient than either static memory or
heap space, and dynamic memory allocation allows convenient allocation of objects whose size is known only
at run-time. Most C programs make extensive use of all
three.
8 Libraries
The C programming language uses libraries as its primary method of extension. In C, a library is a set of
functions contained within a single archive le. Each
library typically has a header le, which contains the prototypes of the functions contained within the library that
may be used by a program, and declarations of special
data types and macro symbols used with these functions.
In order for a program to use a library, it must include the
librarys header le, and the library must be linked with
the program, which in many cases requires compiler ags
Where possible, automatic or static allocation is usually (e.g., -lm, shorthand for link the math library).[27]
simplest because the storage is managed by the compiler, freeing the programmer of the potentially error- The most common C library is the C standard library,
prone chore of manually allocating and releasing storage. which is specied by the ISO and ANSI C standards and
However, many data structures can change in size at run- comes with every C implementation (implementations
time, and since static allocations (and automatic alloca- which target limited environments such as embedded systions before C99) must have a xed size at compile-time, tems may provide only a subset of the standard library).
there are many situations in which dynamic allocation is This library supports stream input and output, memory alnecessary.[27] Prior to the C99 standard, variable-sized location, mathematics, character strings, and time values.
arrays were a common example of this. (See the article Several separate standard headers (for example, stdio.h)
on malloc for an example of dynamically allocated ar- specify the interfaces for these and other standard library
rays.) Unlike automatic allocation, which can fail at run facilities.
time with uncontrolled consequences, the dynamic allo- Another common set of C library functions are those used
cation functions return an indication (in the form of a null by applications specically targeted for Unix and Unixpointer value) when the required storage cannot be allo- like systems, especially functions which provide an intercated. (Static allocation that is too large is usually de- face to the kernel. These functions are detailed in various
tected by the linker or loader, before the program can standards such as POSIX and the Single UNIX Specieven begin execution.)
cation.
Unless otherwise specied, static objects contain zero or
null pointer values upon program startup. Automatically
and dynamically allocated objects are initialized only if
an initial value is explicitly specied; otherwise they initially have indeterminate values (typically, whatever bit
pattern happens to be present in the storage, which might
not even represent a valid value for that type). If the program attempts to access an uninitialized value, the results
are undened. Many modern compilers try to detect and
warn about this problem, but both false positives and false
negatives can occur.
9 Language tools
Automated source code checking and auditing are benecial in any language, and for C many such tools exist,
10
11
such as Lint. A common practice is to use Lint to detect questionable code when a program is rst written.
Once a program passes Lint, it is then compiled using the
C compiler. Also, many compilers can optionally warn
about syntactically valid constructs that are likely to actually be errors. MISRA C is a proprietary set of guidelines
to avoid such questionable code, developed for embedded
systems.[34]
RELATED LANGUAGES
Tools such as Purify or Valgrind and linking with libraries containing special versions of the memory allocation functions can help uncover runtime errors in memory
usage.
C is sometimes used as an intermediate language by implementations of other languages. This approach may
be used for portability or convenience; by using C as
an intermediate language, it is not necessary to develop
machine-specic code generators. C has some features,
such as line-number preprocessor directives and optional
superuous commas at the end of initializer lists, which
support compilation of generated code. However, some
of Cs shortcomings have prompted the development of
other C-based languages specically designed for use as
intermediate languages, such as C--.
10
C has also been widely used to implement end-user applications. However, such applications can also be written
in newer, higher-level languages.
Uses
11 Related languages
C has directly or indirectly inuenced many later languages such as C#, D, Go, Java, JavaScript, Limbo, LPC,
Perl, PHP, Python, and Unixs C shell. The most pervasive inuence has been syntactical: all of the languages
mentioned combine the statement and (more or less recognizably) expression syntax of C with type systems, data
models and/or large-scale program structures that dier
from those of C, sometimes radically.
Several C or near-C interpreters exist, including Ch and
CINT, which can also be used for scripting.
When object-oriented languages became popular, C++
and Objective-C were two dierent extensions of C that
provided object-oriented capabilities. Both languages
C is widely used for "system programming", including were originally implemented as source-to-source compilimplementing operating systems and embedded system ers; source code was translated into C, and then compiled
applications, due to a combination of desirable charac- with a C compiler.
teristics such as code portability and eciency, ability to
The C++ programming language was devised by Bjarne
access specic hardware addresses, ability to pun types to Stroustrup as an approach to providing object-oriented
match externally imposed data access requirements, and functionality with a C-like syntax.[38] C++ adds greater
low run-time demand on system resources. C can also typing strength, scoping, and other tools useful in objectbe used for website programming using CGI as a gate- oriented programming, and permits generic programway for information between the Web application, the ming via templates. Nearly a superset of C, C++ now
server, and the browser.[36] Some reasons for choosing supports most of C, with a few exceptions.
C over interpreted languages are its speed, stability, and
Objective-C was originally a very thin layer on top of
near-universal availability.[37]
C, and remains a strict superset of C that permits objectOne consequence of Cs wide availability and eciency oriented programming using a hybrid dynamic/static typis that compilers, libraries and interpreters of other pro- ing paradigm. Objective-C derives its syntax from both
gramming languages are often implemented in C. The C and Smalltalk: syntax that involves preprocessing, exprimary implementations of Python, Perl 5 and PHP, for pressions, function declarations, and function calls is inexample, are all written in C.
herited from C, while the syntax for object-oriented feaDue to its thin layer of abstraction and low overhead, C tures was originally taken from Smalltalk.
The TIOBE index graph from 2002 to 2015, showing a comparison of the popularity of various programming languages[35]
11
In addition to C++ and Objective-C, Ch, Cilk and Unied
Parallel C are nearly supersets of C.
12
See also
13
Notes
14
References
[1] Kernighan, Brian W.; Ritchie, Dennis M. (February 1978). The C Programming Language (1st ed.).
Englewood Clis, NJ: Prentice Hall. ISBN 0-13-1101633. Regarded by many to be the authoritative reference on
C.
[2] Ritchie (1993): Thompson had made a brief attempt to
produce a system coded in an early version of Cbefore
structuresin 1972, but gave up the eort.
[3] Ritchie (1993): The scheme of type composition
adopted by C owes considerable debt to Algol 68, although
it did not, perhaps, emerge in a form that Algols adherents
would approve of.
[4] Verilog HDL (and C)" (PDF). The Research School of
Computer Science at the Australian National University.
2010-06-03. Retrieved 2013-08-19. 1980s: ; Verilog rst
introduced ; Verilog inspired by the C programming language
[5] Ritchie (1993)
[6] Lawlis, Patricia K. (August 1997). Guidelines for
Choosing a Computer Language: Support for the Visionary Organization. Ada Information Clearinghouse. Retrieved 18 July 2006.
in
C++".
[25] Schultz, Thomas (2004). C and the 8051 (3rd ed.). Otsego, MI: PageFree Publishing Inc. p. 20. ISBN 158961-237-X. Retrieved 10 February 2012.
12
16
16 External links
[14]
15
EXTERNAL LINKS
Further reading
13
17
17.1
14
17
BenoniBot~enwiki, Frappucino, Yuzhong, Torchwoodwho, Sen Mon, The751, Pianoman320, Nn123645, HairyWombat, Dlrohrer2003,
Chcampb, YSSYguy, Martarius, ClueBot, Fidori, Rumping, PipepBot, The Thing That Should Not Be, Alksentrs, Garyzx, Adrianwn, JJIG,
Enrique r25, Orthoepy, Getyoursuresh, Gavenko a, Shaan myself, ChandlerMapBot, Ftdftd, Pointillist, DragonBot, Awickert, Excirial, HostileFork, Alexbot, Jusdafax, Leontios, Monobi, PixelBot, Ybenharim, Alejandrocaro35, Sin Harvest, Jotterbot, Brianbjparker, Tjholowaychuk, Dekisugi, Frederico1234, DanielPharos, Thingg, Ewok18, Versus22, MelonBot, Johnuniq, Steveozone, Darkicebot, Aj00200, InternetMeme, XLinkBot, Baudway, Paulsheer, Nepenthes, C. A. Russell, Mitch Ames, WikHead, CapnZapp, KenshinWithNoise, MustafaeneS,
Mikeloco14, Abilina, Gazimo, Dsimic, Dowsiewuwu, ColtM4, IsmaelLuceno, Johndci, Addbot, Xp54321, JPINFV, Mortense, Ennui93,
Ghettoblaster, Md3l3t3, DougsTech, Corkbob, CanadianLinuxUser, MrOllie, Download, Ollydbg, CarsracBot, LAAFan, Glane23, Bassbonerocks, ViskonBot, ACM2, Peti610botH, AgadaUrbanit, Delibebek, Shekure, Frank4ever, Cadae, Trachtemacht, , Gail,
Zorrobot, MuZemike, Jarble, Hgabor, Dnikitin, Quantumobserver, Legobot, Luckas-bot, Yobot, Fraggle81, TaBOT-zerem, THEN WHO
WAS PHONE?, KamikazeBot, AnomieBOT, 1exec1, Jim1138, Wickorama, RandomAct, NauarchLysander, Materialscientist, Citation
bot, LilHelpa, Xqbot, Albertgenii12, Afog, 4twenty42o, Nasnema, HHBones, Teddks, Hard Backrest, Miym, Thegroove, Xan2, Shirik,
DAndC, Prunesqualer, Arcnova, Stratocracy, Taylornate, Bstarynk, Shadowjams, Methcub, E0steven, Xemnas 5 7, Erik9, Oxygens, Josemanimala, A.amitkumar, Apwestern, Jordandanford, FrescoBot, Tobby72, Mark Renier, Cjworden, Sebastiangarth, HJ Mitchell, MTizz1,
Jamesooders, Tetraedycal, Notyourhoom, WiltonPyle, Ajrisi, I dream of horses, Notedgrant, LittleWink, Captain Virtue, Xcvista, A8UDI,
Auroreon, Rosa67, Jschnur, Rahinreza, Serols, Rainier002, Nullw0rm, Lainproliant, MertyWiki, RandomStringOfCharacters, Utility Monster, Tados, FoxBot, NeoAdonis, Retired user 0001, Lotje, Yogeendra, Zvn, Diannaa, Melnakeeb, SUCKISSTAPLES, DARTH SIDIOUS
2, Siripuramrk, Whisky drinker, Mean as custard, Lakshmitharun, RjwilmsiBot, Abbyjoe45, Galois fu, DRAGON BOOSTER, Quimn,
Charlesjia, Richw33, Skamecrazy123, Rollins83, B20180, EmausBot, Orphan Wiki, Lbraglia, WikitanvirBot, Jwzxgo, ScottyBerg, Super48paul, Saggammahesh, WirlWhind, Marco Guzman, Jr, ThePCKid, Solarra, The Mysterious El Willstro, Tommy2010, Wikipelli,
Dcirovic, K6ka, AsceticRose, CrazyLemur13, Jasonanaggie, AaronLLF, Mybestpalonline, Spolstra, Pripat2001, Kkm010, Shuipzv3,
Yang, Andyman1125, Babkock, OnePt618, Zhelmcleod, Sbmeirow, OllieWilliamson, Rcorcs, L Kensington, Alonzia, Donner60, HerbEA6, Ipsign, Andershp, ChuispastonBot, ClamDip, VictorianMutant, Tss f66, Mister Mormon, Sven Manguard, Amruth M D, Cgt,
Ibmarul, Xanchester, ClueBot NG, Jack Greenmaven, A520, Strcat, Feedintm, Julesmazur, Ashraftsy, Snotbot, Hindustanilanguage, Frietjes, Old wombat, Washim.bari, O.Koslowski, ScottSteiner, Widr, Guidjos, Mcandre, CasualVisitor, Theopolisme, Helpful Pixie Bot,
Ycubed100, MarilynConant, HMSSolent, , Strike Eagle, Tr10d, Lowercase sigmabot, Murry1975, Bmusician, Mathwhiz5,
Briantgross, Unixunited, Hz.tiang, Firesofmay, Kouhi, Vanangamudiyan, Wiki13, Bhaaradwaaj, MusikAnimal, Zerbu, Yashdatt, Ishwar
Gajanan Kurwade, Jobin RV, Wiki-art-name, Garsd, Exercisephys, Anujbnsl, Eman2129, Minopret, Yogidreamss, Boshomi, Chmarkine,
DPL bot, Nedeljko Stefanovic, United States Man, Rajshree.jk, Losine, Klilidiplomus, Achowat, Jasonthephilus, Vikrant manore, EdwardH,
Alguienconganasdeayudar, Priyankbhardwaj.007, Walterkelly-dms, BattyBot, Scialex~enwiki, Nwoebcke, David.moreno72, Boeing720,
Abhilash Mhaisne, Ferdaw, Amitkumargarg88, ChrisGualtieri, Jazzy Prinker, Codeh, Drkamilz, EuroCarGT, EditorE, JYBot, Johnandgac,
Jimmymander, Dexbot, Rezonansowy, Mn4080, Kunal1438, Bcmallesh, Yanpas, Rajisveer, Umesh kumar choukse, Isarra (HG), Santosh.m75, Lolo Lympian, Sowlos, Linuxgeek01, Zziccardi, , Wateresque, Darvii, Carrot Lord, Franois Robere, Ruman12, Richie765,
Daveohlsson, Tljplslc, Ratna Chaudhary, NYBrook098, Myconix, Soham, Mthinkcpp, Wamiq, Babitaarora, Comp.arch, Haminoon, Blackbombchu, My name is not dave, Emarobert, Kdp747, Quenhitran, Surendren23, Maiahmac, Tronedit, Bob60506, Afzaalahmadzeeshan,
Himmsrathorewiki, Maahi.geete, I3roly, Armistice588, AdamPro, Rtandle, Betseg, Monkbot, JasonEB77, Stefenev, Kukkar99, Kieranmcgr, Master aakash, Pranjali jadhav, Jawad Rocky, Akashr007, AnishaV, Sarang007, Aliraza2332, Hima sravya, Aadarsh sojitra,
DEnterpriser, OMPIRE, 555akarsh, TerryAlex, Unician, Sophie.grothendieck, DissidentAggressor, Royarunava, Hawkenfall, Thelegender, Iokevins, Dilip1990, Nelsonkam, Thetechgirl, Janmanuel, ChamithN, Ammu Agnes, ThePhoenixAP, Vengalavinnay, Crystallizedcarbon, Lennyitb, Qzekrom, Nhisha, Amay Agrawal, Buercode, I8086, Speed57, Sizeont, Gowthammk007, XSventsex, WhirlWind,
CV9933, Mdhaseenkhan, GeneralizationsAreBad, Wishva de Silva, KasparBot, 3 of Diamonds, Ashleyfta, Praveensingh8344, AmericanLion13, Avanish20, Pajacobsen, GSS-1987, Rifat Hasan Jihan, Bhanu13, Varun Tokas, Abhinay jain vats, Nickkie15, Dricce, Fmadd,
MisterRandomized, Aman.hot38, Roobanm2 and Anonymous: 1767
17.2
Images
17.3
Content license
15
https://upload.wikimedia.org/wikipedia/en/5/5e/The_C_Programming_
File:The_C_Programming_Language_logo.svg
Source:
https://upload.wikimedia.org/wikipedia/commons/3/35/The_C_
Programming_Language_logo.svg License: Public domain Contributors: This le was derived from: The C Programming Language, First Edition Cover.svg
Original artist: Rezonansowy
File:Tiobe_index.png Source: https://upload.wikimedia.org/wikipedia/commons/d/d3/Tiobe_index.png License: Attribution Contributors: www.tiobe.com Original artist: TIOBE
File:Wikibooks-logo-en-noslogan.svg Source: https://upload.wikimedia.org/wikipedia/commons/d/df/Wikibooks-logo-en-noslogan.
svg License: CC BY-SA 3.0 Contributors: Own work Original artist: User:Bastique, User:Ramac et al.
File:Wikibooks-logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/f/fa/Wikibooks-logo.svg License: CC BY-SA 3.0
Contributors: Own work Original artist: User:Bastique, User:Ramac et al.
File:Wikinews-logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/2/24/Wikinews-logo.svg License: CC BY-SA 3.0
Contributors: This is a cropped version of Image:Wikinews-logo-en.png. Original artist: Vectorized by Simon 01:05, 2 August 2006 (UTC)
Updated by Time3000 17 April 2007 to use ocial Wikinews colours and appear correctly on dark backgrounds. Originally uploaded by
Simon.
File:Wikiquote-logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/f/fa/Wikiquote-logo.svg License: Public domain
Contributors: Own work Original artist: Rei-artur
File:Wikiversity-logo-Snorky.svg Source: https://upload.wikimedia.org/wikipedia/commons/1/1b/Wikiversity-logo-en.svg License:
CC BY-SA 3.0 Contributors: Own work Original artist: Snorky
17.3
Content license