;,C IS THE MOST INFLUENTIAL PROGRAMMING LANGUAGE EVER CREATED4 ,DESIGNED BY ,DENNIS ,RITCHIE AT ,BELL ,LABS BETWEEN #AIFI AND #AIGC AS THE IMPLEMENTATION LANGUAGE FOR THE ,UNIX OPERATING SYSTEM1 IT OCCUPIES A POSITION IN COMPUTING THAT NO OTHER LANGUAGE HAS MATCHED3 NEARLY EVERY OPERATING SYSTEM KERNEL IN PRODUCTION ,LINUX1 ,WINDOWS1 MAC,O,S1 I,O,S1 ,ANDROID'S LOWER LAYERS1 THE ,B,S,DS1 AND MOST EMBEDDED FIRMWARE IS WRITTEN PRIMARILY IN ;,C4 ,NEARLY EVERY LANGUAGE CREATED SINCE #AIHJ EITHER COMPILES TO ;,C1 WAS IMPLEMENTED IN ;,C1 BORROWS ,C'S SYNTAX1 OR DEFINES ITSELF IN OPPOSITION TO ;,C4 ,THE SEMICOLONS1 THE CURLY BRACES1 THE FOR LOOPS1 THE IF_/ELSE BLOCKS1 THE PRINTF FORMAT STRINGS THESE ARE NOT FEATURES OF 8;,C-LIKE LANGUAGES40 ,THEY ARE FEATURES OF ;,C THAT THE REST OF THE WORLD ADOPTED4 ;,C IS FIFTY-FOUR YEARS OLD4 ,IT IS STILL THE SECOND MOST USED PROGRAMMING LANGUAGE ON ,EARTH " AND THE FIRST CHOICE FOR ANY SOFTWARE THAT MUST TALK DIRECTLY TO HARDWARE4 ,IT HAS BEEN STANDARDIZED FIVE TIMES ,C#HI1 ,C#II1 ,C#AA1 ,C#AG1 AND ,C#BC AND THE COMMITTEE IS ALREADY WORKING ON ,C#B;Y1 THE NEXT REVISION4 ,THE LANGUAGE THAT ,RITCHIE BUILT ON A ,,PDP-#AA IN A ,NEW ,JERSEY OFFICE IS STILL THE LANGUAGE THE WORLD RUNS ON4 ,THE ,,TIOBE ,INDEX1 ,STACK ,OVERFLOW SURVEYS1 AND ,GIT,HUB USAGE STATISTICS ALL PLACE ;,C IN THE TOP FIVE LANGUAGES YEAR AFTER YEAR4 ,IT RANKS FIRST OR SECOND AMONG LANGUAGES THAT SHIP PRODUCTS PEOPLE DEPEND ON WITHOUT KNOWING IT THE FIRMWARE IN THEIR CAR1 THE KERNEL OF THEIR PHONE1 THE DATABASE BEHIND THEIR BANK4 ;,C IS THE INVISIBLE INFRASTRUCTURE OF MODERN CIVILIZATION4 ,BEFORE ;,C3 THE ANCESTRY ;,C DID NOT EMERGE FROM NOTHING4 ,ITS FAMILY TREE RUNS THROUGH THREE LANGUAGES1 EACH STRIPPING AWAY A LAYER OF ABSTRACTION3 ,,BCPL "<#AIFG"> ,MARTIN ,RICHARDS DESIGNED ,,BCPL "<,BASIC ,COMBINED ,PROGRAMMING ,LANGUAGE"> AT ,CAMBRIDGE4 ,IT WAS TYPELESS3 EVERYTHING WAS A MACHINE WORD4 ,IT INTRODUCED THE _/_/ COMMENT " AND THE IDEA THAT A SYSTEMS LANGUAGE SHOULD COMPILE TO EFFICIENT CODE AND BE CLOSE TO THE MACHINE4 ;,B "<#AIFI"> ,KEN ,THOMPSON1 WORKING ON THE FIRST ,UNIX ON THE ,,PDP-#G AT ,BELL ,LABS1 NEEDED SOMETHING HIGHER-LEVEL THAN ASSEMBLY BUT LEANER THAN THE FULL ,,FORTRAN COMPILER HE TRIED AND ABANDONED AFTER ONE DAY4 ,HE WROTE ;,B1 DERIVED FROM ,,BCPL AND INFLUENCED BY ,THOMPSON'S OWN EARLIER LANGUAGE ,BON4 ;,B WAS ALSO TYPELESS EVERY VALUE WAS A WORD4 ,IT WORKED ON THE WORD-ORIENTED ,,PDP-#G1 BUT WHEN ,UNIX MOVED TO THE BYTE-ORIENTED ,,PDP-#AA1 THE LACK OF TYPES BECAME A CRITICAL PROBLEM4 ,YOU COULD NOT EXPRESS A CHARACTER1 A BYTE1 OR A POINTER TO A BYTE IN A LANGUAGE WHERE EVERYTHING WAS A WORD4 ,,NB _/ EARLY ;,C "<#AIGA#AIGB"> ,RITCHIE BEGAN ADDING A TYPE SYSTEM TO ;,B4 ,FOR A WHILE THE RESULT WAS CALLED 8,,NB0 "<,NEW ;,B">4 ,THE TYPE SYSTEM GREW CHAR1 INT1 POINTERS1 ARRAYS1 STRUCTURES AND AT SOME POINT ,,NB BECAME ;,C4 ,THE NAME IS SIMPLY THE NEXT LETTER AFTER ;,B1 THOUGH ,RITCHIE NOTED WITH CHARACTERISTIC UNDERSTATEMENT THAT THE NAMING WAS PARTLY COINCIDENCE AND PARTLY SEQUENCE4 ,THE TRANSITION WAS NOT A CLEAN BREAK3 EARLY ;,C RETAINED ,B'S OPERATOR SYNTAX "1 ITS TERSE VARIABLE NAMING CONVENTIONS1 AND ITS FUNDAMENTAL ORIENTATION TOWARD THE MACHINE4 ;,C ADDED TYPES ON TOP OF ,B'S EXISTING VOCABULARY RATHER THAN DESIGNING A NEW LANGUAGE FROM SCRATCH WHICH IS WHY ,C'S TYPE SYSTEM HAS ALWAYS FELT THIN COMPARED TO LANGUAGES DESIGNED WITH TYPES AS A FIRST PRINCIPLE4 ,THE RESULT WAS A LANGUAGE THAT SAT PRECISELY IN THE GAP BETWEEN ASSEMBLY AND THE 8HIGH-LEVEL0 LANGUAGES OF THE ERA4 ;,C GAVE YOU TYPES1 STRUCTURES1 FUNCTIONS1 AND A STANDARD LIBRARY BUT IT ALSO GAVE YOU POINTERS1 POINTER ARITHMETIC1 BIT MANIPULATION1 AND THE ABILITY TO CAST ANYTHING TO ANYTHING4 ,THIS DELIBERATE POSITIONING CLOSE ENOUGH TO THE MACHINE TO REPLACE ASSEMBLY1 ABSTRACT ENOUGH TO BE PORTABLE IS ,C'S DEFINING DESIGN CHOICE AND THE REASON FOR BOTH ITS SUCCESS AND ITS PROBLEMS4 8;,C CAME INTO BEING IN THE YEARS #AIFI#AIGC1 IN PARALLEL WITH THE EARLY DEVELOPMENT OF THE ,UNIX OPERATING SYSTEM2 THE MOST CREATIVE PERIOD OCCURRED DURING #AIGB40 ,DENNIS ,RITCHIE1 8,THE ,DEVELOPMENT OF THE ;,C ,LANGUAGE10 #AIIC ,THE BIRTH3 ,BELL ,LABS AND ,UNIX . AND ,DENNIS ,RITCHIE AT A ,,PDP-#AA1 CIRCA #AIGC4 ,PUBLIC DOMAIN4.> ,THE CRITICAL MOMENT CAME IN THE SUMMER OF #AIGC4 ,THOMPSON HAD TRIED TO REWRITE ,UNIX IN ;,C THE PREVIOUS SUMMER BUT GAVE UP THE LANGUAGE LACKED STRUCTURES1 AND THE GENERATED CODE WAS NOT EFFICIENT ENOUGH4 ,OVER THE INTERVENING YEAR1 ,RITCHIE ADDED STRUCT1 IMPROVED THE COMPILER'S CODE GENERATION1 AND SOLVED ENOUGH OF THE REMAINING PROBLEMS THAT A SECOND ATTEMPT SUCCEEDED4 ,BY THE END OF #AIGC1 THE ,UNIX KERNEL WAS WRITTEN IN ;,C4 ,THIS WAS REVOLUTIONARY4 ,OPERATING SYSTEMS HAD ALWAYS BEEN WRITTEN IN ASSEMBLY EACH ONE TIED TO ITS SPECIFIC HARDWARE4 ,A KERNEL WRITTEN IN A HIGH-LEVEL LANGUAGE COULD1 IN PRINCIPLE1 BE PORTED TO DIFFERENT MACHINES BY REWRITING ONLY A SMALL HARDWARE-DEPENDENT LAYER4 ,WHEN ,UNIX WAS PORTED TO THE ,INTERDATA #H_/#CB IN #AIGH1 THAT PRINCIPLE BECAME FACT4 ,UNIX AND THEREFORE ;,C BEGAN SPREADING TO EVERY ARCHITECTURE THAT EXISTED4 ,THE SYMBIOSIS BETWEEN ;,C AND ,UNIX CANNOT BE OVERSTATED4 ;,C WAS DESIGNED TO WRITE ,UNIX4 ,UNIX WAS DESIGNED TO BE WRITTEN IN ;,C4 ,THE ,UNIX PHILOSOPHY SMALL TOOLS THAT COMPOSE1 TEXT AS A UNIVERSAL INTERFACE1 THE FILE SYSTEM AS A NAMESPACE SHAPED ,C'S STANDARD LIBRARY4 ,THE STDIO4H FUNCTIONS " ARE A DIRECT REFLECTION OF ,UNIX'S FILE ,I_/,O MODEL4 ,THE MAIN" CONVENTION MIRRORS ,UNIX'S PROCESS MODEL4 ,THE ENTIRE ;,C ECOSYSTEM ASSUMES A ,UNIX-LIKE ENVIRONMENT1 WHICH IS WHY ,C'S INFLUENCE SPREAD EXACTLY AS FAR AS ,UNIX DID WHICH IS TO SAY1 EVERYWHERE4 ,THE ,UNIX SOURCE CODE LICENSE FROM ,,AT@&,T1 DISTRIBUTED TO UNIVERSITIES STARTING IN #AIGE1 WAS ONE OF THE MOST CONSEQUENTIAL LICENSING DECISIONS IN COMPUTING HISTORY4 ,IT PUT ;,C AND ,UNIX INTO THE HANDS OF THOUSANDS OF COMPUTER SCIENCE STUDENTS1 WHO LEARNED BOTH SIMULTANEOUSLY AND CARRIED THEM INTO INDUSTRY4 ,BERKELEY'S MODIFICATIONS "<,,BSD"> LED TO ,FREE,B,S,D1 ,OPEN,B,S,D1 ,NET,B,S,D1 AND EVENTUALLY MAC,O,S AND I,O,S4 ,THE ACADEMIC ,UNIX DIASPORA MADE ;,C THE DEFAULT LANGUAGE OF SYSTEMS PROGRAMMING WORLDWIDE4 ,K@&,R3 THE WHITE BOOK ,IN #AIGH1 ,BRIAN ,KERNIGHAN AND ,DENNIS ,RITCHIE PUBLISHED ,THE ;,C ,PROGRAMMING ,LANGUAGE UNIVERSALLY KNOWN AS ,K@&,R OR 8THE WHITE BOOK40 ,IT SERVED AS THE DE FACTO STANDARD FOR ;,C FOR OVER A DECADE1 UNTIL ,,ANSI STANDARDIZED THE LANGUAGE IN #AIHI4 ,K@&,R IS WIDELY REGARDED AS ONE OF THE BEST PROGRAMMING BOOKS EVER WRITTEN4 ,ITS CONCISENESS1 CLARITY1 AND TRUST IN THE READER SET A STANDARD THAT FEW TECHNICAL BOOKS HAVE MATCHED4 ,THE FAMOUS FIRST PROGRAM3 _?INCLUDE @ MAIN"<"> _< PRINTF"<8HELLO1 WORLD_*N0">2 _> APPEARED ON PAGE #F AND BECAME THE UNIVERSAL FIRST PROGRAM IN EVERY LANGUAGE TUTORIAL SINCE4 ,THE 8HELLO1 WORLD0 TRADITION IS ,K@&,R'S MOST VISIBLE CULTURAL CONTRIBUTION1 BUT THE BOOK'S REAL ACHIEVEMENT WAS DEMONSTRATING THAT A SYSTEMS LANGUAGE COULD BE EXPLAINED CLEARLY IN #BBH PAGES4 ,K@&,R ;,C HAD NO FORMAL STANDARD4 ,THE BOOK WAS THE STANDARD WHAT ,RITCHIE AND ,KERNIGHAN SAID THE LANGUAGE DID1 THAT IS WHAT THE LANGUAGE DID4 ,COMPILERS THAT DISAGREED WERE CONSIDERED WRONG4 ,THIS WORKED REMARKABLY WELL FOR A DECADE1 BUT AS ;,C SPREAD TO NON-,UNIX PLATFORMS "<,,MS-,,DOS1 ,,VMS1 MAINFRAMES">1 THE DIVERGENCES ACCUMULATED4 ,VENDORS ADDED THEIR OWN EXTENSIONS FAR AND NEAR POINTERS ON ,,MS-,,DOS FOR SEGMENTED MEMORY1 _?PRAGMA DIRECTIVES FOR PLATFORM-SPECIFIC BEHAVIOR1 NON-STANDARD LIBRARY FUNCTIONS AND BY THE MID-#AIHJ;S1 THE IDEA THAT 8;,C IS PORTABLE0 WAS BECOMING MORE ASPIRATION THAN FACT4 ,THE NEED FOR A FORMAL STANDARD WAS OBVIOUS4 ,THE ,K@&,R ERA ALSO ESTABLISHED THE PRACTICE OF THE COMPILER AS A REFERENCE IMPLEMENTATION4 ,WHEN THE BOOK WAS AMBIGUOUS AND IT SOMETIMES WAS PROGRAMMERS LOOKED AT WHAT ,RITCHIE'S COMPILER DID4 ,THE ,,PDP-#AA COMPILER'S BEHAVIOR BECAME THE DE FACTO DEFINITION OF EDGE CASES4 ,THIS PRACTICE PERSISTED WELL INTO THE ,,ANSI ERA3 WHEN THE STANDARD SAYS ONE THING AND THE COMPILER DOES ANOTHER1 WORKING PROGRAMMERS FOLLOW THE COMPILER4 ,THE TENSION BETWEEN THE ABSTRACT STANDARD AND CONCRETE IMPLEMENTATIONS IS ONE OF THE RECURRING THEMES OF ,C'S HISTORY4 ,THE STANDARDS3 ,,ANSI ;,C THROUGH ,C#BC ,C#HI _/ ,C#IJ THE FOUNDATION ,IN #AIHC1 ,,ANSI FORMED COMMITTEE ,X#C;,J#AA TO STANDARDIZE ;,C4 ,THE RESULT1 PUBLISHED IN #AIHI AS ,,ANSI ,X#C4AEI-#AIHI AND ADOPTED BY ,,ISO IN #AIIJ AS ,,ISO_/,,IEC #IHII3#AIIJ1 WAS THE FIRST FORMAL ;,C STANDARD4 ,IT IS KNOWN INTERCHANGEABLY AS ,C#HI " OR ,C#IJ "4 ,C#HI CODIFIED EXISTING PRACTICE AND ADDED GENUINELY NEW FEATURES3 ,FEATURE ,WHAT IT ADDED VOID ,AN EXPLICIT 8NO VALUE0 TYPE FUNCTIONS COULD FINALLY DECLARE THEY RETURNED NOTHING ENUM ,NAMED INTEGER CONSTANTS CONST ,BORROWED FROM ,C"6"6 READ-ONLY VARIABLES VOLATILE ,FOR HARDWARE REGISTERS AND SIGNAL HANDLERS TELLS THE COMPILER NOT TO OPTIMIZE AWAY READS SIGNED _/ UNSIGNED ,EXPLICIT SIGNEDNESS ,FUNCTION PROTOTYPES ,ALSO BORROWED FROM ,C"6"6 INT ADD"2 INSTEAD OF JUST INT ADD"<">2 @1 @1 @ ,STANDARD LIBRARY HEADERS ORGANIZED INTO A COHERENT SET ,C#HI ALSO FORMALIZED THE AS-IF RULE THE COMPILER MAY TRANSFORM THE PROGRAM IN ANY WAY1 AS LONG AS THE OBSERVABLE BEHAVIOR IS IDENTICAL TO THE ABSTRACT MACHINE'S EXECUTION4 ,THIS RULE IS THE FOUNDATION OF ALL MODERN ;,C OPTIMIZATION4 ,C#HI IS STILL THE TARGET OF SOME NEW CODE IN #BJBF4 ,THE .<.<,,ALB ;,C BACKEND.>.> EXPLICITLY GENERATES ,C#HI THE OLDEST1 MOST PORTABLE ;,C DIALECT BECAUSE ,C#HI COMPILES ON ESSENTIALLY EVERY COMPILER EVER MADE1 FROM TINY EMBEDDED TOOLCHAINS TO MODERN ,,GCC AND ,CLANG4 ,THE DELIBERATE CHOICE OF ,C#HI IS A FEATURE1 NOT A COMPROMISE4 ,C#II THE MODERNIZATION ,PUBLISHED IN #AIII1 ,C#II "<,,ISO_/,,IEC #IHII3#AIII"> WAS THE FIRST MAJOR REVISION IN A DECADE4 ,IT TRANSFORMED ;,C FROM A #AIGJ;S LANGUAGE WITH #AIHI FORMALIZATION INTO SOMETHING RECOGNIZABLY MODERN3 - _/_/ COMMENTS BROUGHT BACK FROM ,,BCPL VIA ,C"6"61 AFTER THIRTY YEARS OF _/ _/ ONLY - LONG LONG INT GUARANTEED #FD-BIT INTEGERS - @ AND @ FIXED-WIDTH INTEGER TYPES "1 ENDING DECADES OF 8HOW WIDE IS INT ON THIS PLATFORM80 - .-,BOOL _/ @ A PROPER BOOLEAN TYPE - RESTRICT A POINTER QUALIFIER TELLING THE COMPILER THAT NO OTHER POINTER ALIASES THIS ONE1 ENABLING AGGRESSIVE OPTIMIZATION - ,COMPOUND LITERALS "_<4X "7 #A1 4Y "7 #B_> INLINE - ,DESIGNATED INITIALIZERS 4FIELD "7 VALUE SYNTAX FOR STRUCTURES AND ARRAYS - ,VARIABLE-LENGTH ARRAYS "<,V,L,AS"> STACK-ALLOCATED ARRAYS WHOSE SIZE IS DETERMINED AT RUNTIME - ,INLINE FUNCTIONS INLINE KEYWORD1 FROM ,C"6"6 - ,MIXED DECLARATIONS AND CODE VARIABLES NO LONGER HAD TO BE DECLARED AT THE TOP OF A BLOCK " - @ FLOATING-POINT ENVIRONMENT CONTROL - SNPRINTF THE SAFE VERSION OF SPRINTF1 PREVENTING BUFFER OVERFLOWS - ,VARIADIC MACROS _?DEFINE ,,LOG" FPRINTF" - .-.-FUNC.-.- AUTOMATIC STRING CONTAINING THE CURRENT FUNCTION NAME ,C#II WAS A GENUINELY GOOD STANDARD4 ,ITS TRAGEDY WAS ,MICROSOFT3 ,,MSVC DID NOT FULLY SUPPORT ,C#II FOR NEARLY TWO DECADES1 WHICH FRACTURED THE ECOSYSTEM AND FORCED MANY PROJECTS TO STAY ON ,C#HI FOR PORTABILITY TO ,WINDOWS4 ,THIS CREATED AN ABSURD SITUATION WHERE THE MOST POPULAR DESKTOP OPERATING SYSTEM'S PRIMARY COMPILER DID NOT SUPPORT A #AIII LANGUAGE STANDARD WELL INTO THE #BJAJ;S4 ,THE CONSEQUENCES RIPPLE THROUGH THE ;,C ECOSYSTEM TO THIS DAY MANY WIDELY-USED LIBRARIES STILL TARGET ,C#HI OR A ,C#HI_/,C#II HYBRID BECAUSE THEY CANNOT ASSUME FULL ,C#II SUPPORT4 ,THE ,,VLA FEATURE1 IN PARTICULAR1 PROVED DIVISIVE4 ,WHILE CONCEPTUALLY USEFUL1 ,V,L,AS MADE STACK USAGE UNPREDICTABLE AND WERE CONSIDERED A SECURITY RISK "4 ,LINUS ,TORVALDS BANNED ,V,L,AS FROM THE ,LINUX KERNEL1 AND THE KERNEL TEAM SPENT YEARS ELIMINATING THEM FROM THE CODEBASE4 ,C#AA MADE ,V,L,AS OPTIONAL1 TACITLY ACKNOWLEDGING THE CONTROVERSY4 ,C#AA CONCURRENCY AND SAFETY ,PUBLISHED IN #BJAA1 ,C#AA "<,,ISO_/,,IEC #IHII3#BJAA"> ADDRESSED TWO MAJOR GAPS3 - @ A STANDARD THREADING ,,API "1 FINALLY GIVING ;,C PORTABLE MULTITHREADING WITHOUT REQUIRING ,,POSIX - @ ATOMIC TYPES AND OPERATIONS1 ESSENTIAL FOR LOCK-FREE PROGRAMMING - ,A THREAD-AWARE MEMORY MODEL SPECIFYING HOW THREADS INTERACT WITH MEMORY1 INCLUDING ACQUIRE_/RELEASE SEMANTICS - .-,STATIC.-ASSERT COMPILE-TIME ASSERTIONS - .-,ALIGNAS _/ .-,ALIGNOF ALIGNMENT CONTROL - ,ANONYMOUS STRUCTURES AND UNIONS STRUCT _< STRUCT _< INT ;X1 ;Y2 _>2 _>2 - @ ,UNICODE CHARACTER TYPES " - .-,GENERIC TYPE-GENERIC SELECTION1 ,C'S ANSWER TO FUNCTION OVERLOADING3 .-,GENERIC"<;X1 INT3 8INT01 FLOAT3 8FLOAT01 DEFAULT3 8OTHER0"> ,C#AA ALSO MADE ,V,L,AS OPTIONAL "1 INTRODUCED BOUNDS-CHECKING INTERFACES IN AN OPTIONAL ANNEX "<,ANNEX ;,K">1 AND DEPRECATED THE GETS FUNCTION "4 ,C#AG THE CLEANUP ,PUBLISHED IN #BJAH1 ,C#AG "<,,ISO_/,,IEC #IHII3#BJAH"> WAS A 8BUG-FIX0 RELEASE4 ,IT INTRODUCED NO NEW FEATURES ONLY DEFECT RESOLUTIONS AND CLARIFICATIONS4 ,ITS PRIMARY VALUE WAS ESTABLISHING A CLEAN1 UNAMBIGUOUS BASELINE FOR THE NEXT MAJOR REVISION4 ,C#BC THE PRESENT ,PUBLISHED IN ,OCTOBER #BJBD1 ,C#BC "<,,ISO_/,,IEC #IHII3#BJBD"> IS THE CURRENT STANDARD AND THE MOST SIGNIFICANT REVISION SINCE ,C#II4 ,IT MODERNIZES ,C'S SURFACE WHILE PRESERVING ITS CHARACTER3 ,TYPES AND CONSTANTS3 - NULLPTR AND NULLPTR.-T A PROPER NULL POINTER CONSTANT AND TYPE - TRUE1 FALSE1 BOOL AS KEYWORDS ""> - .-,BIT,INT"<;,N"> BIT-PRECISE INTEGERS OF ARBITRARY WIDTH - TYPEOF AND TYPEOF.-UNQUAL STANDARDIZED TYPEOF OPERATOR - CONSTEXPR COMPILE-TIME CONSTANTS ,SYNTAX3 - ATTRIBUTE SYNTAX UNIFIED ATTRIBUTES " - _?EMBED EMBED BINARY DATA " DIRECTLY INTO SOURCE AS INITIALIZER DATA - _?ELIFDEF _/ _?ELIFNDEF PREPROCESSOR SHORTHAND - .-.-HAS.-INCLUDE TEST FOR HEADER AVAILABILITY - .-.-,,VA.-,,OPT.-.- OPTIONAL VARIADIC MACRO ARGUMENT HANDLING - ,DIGIT SEPARATOR ' IN NUMERIC LITERALS "<#A'#JJJ'#JJJ"> - ,BINARY LITERAL PREFIX #J;;B "<#J;B#AJAJ"> ,LIBRARY3 - @ BIT MANIPULATION FUNCTIONS - @ CHECKED INTEGER ARITHMETIC " - MEMSET.-EXPLICIT GUARANTEED NOT TO BE OPTIMIZED AWAY " - STRDUP _/ STRNDUP FINALLY STANDARDIZED AFTER DECADES AS ,,POSIX EXTENSIONS ,AND ALREADY IN PROGRESS3 ,C#B;Y1 THE NEXT REVISION1 WITH THE LATEST DRAFT "<,N#CHHF"> PUBLISHED IN ,MAY #BJBF4 ,C#BC'S .*_?EMBED.* DIRECTIVE SOLVES A PROBLEM AS OLD AS ;,C ITSELF3 INCLUDING BINARY DATA IN A PROGRAM4 ,BEFORE .*_?EMBED.*1 THE STANDARD APPROACH WAS .*XXD -I.* TO CONVERT A FILE INTO A ;,C ARRAY INITIALIZER A GENERATED SOURCE FILE THAT COULD BE MILLIONS OF LINES LONG4 .*_?EMBED.* REPLACES THIS WITH A SINGLE PREPROCESSOR DIRECTIVE THAT COMPILERS CAN HANDLE INTERNALLY1 DRAMATICALLY IMPROVING COMPILE TIMES FOR PROGRAMS THAT INCLUDE FIRMWARE IMAGES1 TEXTURE DATA1 OR CERTIFICATE BUNDLES4 ,THE LANGUAGE ITSELF ,WHAT IT LOOKS LIKE IN #BJBF ,MODERN ;,C1 WRITTEN TO ,C#BC1 IS CLEANER THAN MOST PEOPLE EXPECT3 _?INCLUDE @ _?INCLUDE @ _?INCLUDE @ .<..> STATIC INT POPCOUNT.-AND.-CHECK" _< INT BITS "7 STDC.-COUNT.-ONES"<;N">2 IF " RETURN -#A2 RETURN BITS2 _> INT MAIN" _< CONSTEXPR UNSIGNED MAGIC "7 #JX,D,E,A,D',,BEEF2 INT BITS "7 POPCOUNT.-AND.-CHECK"2 PRINTF"<8#JX.0,X HAS .0D SET BITS_*N01 MAGIC1 BITS">2 _/_/ ,C#BC3 TYPEOF INFERENCE TYPEOF" COPY "7 MAGIC2 PRINTF"<8,COPY3 #JX.0,X_*N01 COPY">2 _/_/ ,C#BC3 NULLPTR INSTEAD OF ,,NULL INT "9P "7 NULLPTR2 IF "<;P "7"7 NULLPTR"> _< PRINTF"<8,POINTER IS NULL "_*N0">2 _> _> ,ATTRIBUTES1 CONSTEXPR1 DIGIT SEPARATORS1 NULLPTR1 TYPEOF1 @ ,C#BC BRINGS GENUINE QUALITY-OF-LIFE IMPROVEMENTS WHILE REMAINING RECOGNIZABLY ;,C4 ,THE TYPE SYSTEM ,C'S TYPE SYSTEM IS FAMOUSLY MINIMAL4 ,EVERY VALUE IS ULTIMATELY A SEQUENCE OF BYTES4 ,THE FUNDAMENTAL TYPES ARE3 ,TYPE ,WIDTH " ,PURPOSE CHAR #H BITS ,CHARACTERS1 RAW BYTES SHORT #AF BITS ,SMALL INTEGERS INT #CB BITS ,THE 8NATURAL0 INTEGER LONG #CB OR #FD BITS ,PLATFORM-DEPENDENT " LONG LONG #FD BITS ,GUARANTEED #FD-BIT "<,C#II"> FLOAT #CB BITS ,SINGLE-PRECISION ,,IEEE #GED DOUBLE #FD BITS ,DOUBLE-PRECISION ,,IEEE #GED .-,BOOL _/ BOOL #A BIT " ,TRUE_/FALSE .-,BIT,INT"<;,N"> ;,N BITS ,ARBITRARY-WIDTH INTEGERS "<,C#BC"> VOID #J BITS 8,NO VALUE0 OR 8ANY POINTER0 ,THE FIXED-WIDTH TYPES FROM @ INT#H.-T1 UINT#CB.-T1 INT#FD.-T ARE WHAT MODERN ;,C CODE ACTUALLY USES1 BECAUSE THEY REMOVE THE AMBIGUITY OF 8HOW WIDE IS LONG ON THIS ARCHITECTURE40 ,POINTERS ,POINTERS ARE ,C'S MOST POWERFUL AND MOST DANGEROUS FEATURE4 ,A POINTER IS AN ADDRESS IN MEMORY4 ,YOU CAN3 - ,DEREFERENCE IT "<"9P"> TO READ OR WRITE THE VALUE AT THAT ADDRESS - ,PERFORM ARITHMETIC ON IT "<;P "6 #C MEANS 8THREE ELEMENTS PAST ;P0"> - ,CAST IT TO ANY OTHER POINTER TYPE INCLUDING TYPES THAT ARE COMPLETELY WRONG - ,PASS IT TO A FUNCTION1 WHICH CAN THEN MODIFY THE ORIGINAL DATA VOID SWAP" _< INT TMP "7 "9A2 "9A "7 "9B2 "9B "7 TMP2 _> ,POINTERS ARE WHAT MAKE ;,C A SYSTEMS LANGUAGE4 ,THEY GIVE THE PROGRAMMER DIRECT ACCESS TO MEMORY TO HARDWARE REGISTERS1 TO ,,DMA BUFFERS1 TO NETWORK PACKET HEADERS1 TO KERNEL DATA STRUCTURES4 ,THEY ARE ALSO WHAT MAKE ;,C DANGEROUS3 A POINTER TO FREED MEMORY1 A POINTER PAST THE END OF AN ARRAY1 A NULL POINTER DEREFERENCE1 A POINTER TO THE WRONG TYPE ALL OF THESE COMPILE WITHOUT WARNING AND CRASH " AT RUNTIME4 ,THE ENTIRE PHILOSOPHY OF ,RUST CAN BE UNDERSTOOD AS3 8,WHAT IF WE COULD HAVE POINTERS1 BUT THE COMPILER VERIFIED THEY WERE ALWAYS VALID80 ,UNDEFINED BEHAVIOR ,C'S MOST CONTROVERSIAL FEATURE IS UNDEFINED BEHAVIOR "<,,UB">4 ,THE STANDARD DEFINES CERTAIN OPERATIONS AS HAVING NO REQUIRED BEHAVIOR THE COMPILER MAY DO ANYTHING1 INCLUDING PRODUCING APPARENTLY CORRECT CODE THAT BREAKS IN SUBTLE WAYS4 ,THE CLASSIC EXAMPLES3 - ,SIGNED INTEGER OVERFLOW "<,,INT.-,,MAX "6 #A"> UNDEFINED - ,DEREFERENCING A NULL POINTER UNDEFINED - ,ACCESSING AN ARRAY OUT OF BOUNDS UNDEFINED - ,USING A VARIABLE BEFORE INITIALIZING IT UNDEFINED - ,MODIFYING A VALUE TWICE BETWEEN SEQUENCE POINTS UNDEFINED ,THE RATIONALE IS PERFORMANCE3 BY LEAVING THESE CASES UNDEFINED1 THE COMPILER CAN ASSUME THEY NEVER HAPPEN1 ENABLING OPTIMIZATIONS THAT WOULD BE IMPOSSIBLE IF EVERY EDGE CASE HAD TO BE DEFINED4 ,A COMPILER THAT KNOWS SIGNED OVERFLOW CANNOT HAPPEN CAN OPTIMIZE "<;X "6 #A"> @> ;X TO TRUE WITHOUT CHECKING4 ,A COMPILER THAT KNOWS NULL DEREFERENCE CANNOT HAPPEN CAN ELIMINATE NULL CHECKS4 ,THE COST IS THAT ,,UB IS THE SOURCE OF A VAST NUMBER OF SECURITY VULNERABILITIES4 ,BUFFER OVERFLOWS " ARE THE SINGLE MOST EXPLOITED BUG CLASS IN THE HISTORY OF COMPUTING4 ,THE TENSION BETWEEN ,C'S PERFORMANCE AND ,C'S SAFETY IS THE CENTRAL DRAMA OF SYSTEMS PROGRAMMING1 AND IT HAS DRIVEN THE CREATION OF SAFER ALTERNATIVES ,RUST1 ,ZIG1 ,CARBON THAT TRY TO PRESERVE ,C'S PERFORMANCE WHILE ELIMINATING " ,,UB4 8;,C IS A RAZOR-SHARP TOOL WITH WHICH ONE CAN CREATE AN ELEGANT AND EFFICIENT PROGRAM OR CUT ONESELF IN WAYS THAT ARE EXQUISITELY DIFFICULT TO DIAGNOSE40 PARAPHRASED FROM NUMEROUS ;,C PRACTITIONERS ,WHERE ;,C RUNS STILL1 IN #BJBF ;,C IS NOT DECLINING4 ,IT OCCUPIES A DIFFERENT NICHE THAN IT DID IN #AIIJ IT IS NO LONGER THE DEFAULT CHOICE FOR APPLICATION PROGRAMMING BUT IN ITS DOMAIN1 IT REMAINS UNCHALLENGED3 ,OPERATING SYSTEM KERNELS ,LINUX "<#CJ"6 MILLION LINES OF ;,C">1 ,WINDOWS KERNEL1 MAC,O,S_/I,O,S "<,,XNU KERNEL">1 ,ANDROID'S HARDWARE ABSTRACTION LAYER1 THE ,B,S,DS1 ,ZEPHYR1 ,FREE,R,T,O,S1 EVERY ,,RTOS ON EVERY MICROCONTROLLER4 ,OPERATING SYSTEM KERNELS ARE ,C'S HOME TERRITORY1 AND WHILE ,RUST IS MAKING INROADS "<,LINUX NOW ACCEPTS ,RUST DRIVERS">1 THE VAST MAJORITY OF KERNEL CODE REMAINS AND WILL REMAIN ;,C FOR DECADES4 ,EMBEDDED SYSTEMS ,FROM THE @S#J4JC MICROCONTROLLER IN A WASHING MACHINE TO THE FLIGHT COMPUTER IN A SATELLITE1 EMBEDDED SOFTWARE IS OVERWHELMINGLY ;,C4 ,THE REASONS ARE PRACTICAL3 ;,C COMPILERS EXIST FOR EVERY ,,CPU ARCHITECTURE EVER MANUFACTURED1 THE LANGUAGE HAS NO HIDDEN ALLOCATIONS OR RUNTIME OVERHEAD1 AND THE GENERATED CODE MAPS PREDICTABLY TO MACHINE INSTRUCTIONS4 ,WHEN YOU HAVE #B,,KB OF ,,RAM AND A #AF,M,HZ CLOCK1 YOU CANNOT AFFORD A GARBAGE COLLECTOR1 A RUNTIME1 OR A VIRTUAL MACHINE4 ,,ARM1 ,,RISC-;,V1 ,,MIPS1 ,,AVR1 ,,PIC1 ,,MSP#DCJ1 ,XTENSA1 ,SUPER,H EVERY INSTRUCTION SET ARCHITECTURE SHIPS WITH A ;,C COMPILER1 USUALLY AS THE PRIMARY DEVELOPMENT TOOL4 ,THE EMBEDDED WORLD RUNS ON ;,C BECAUSE THERE IS LITERALLY NO ALTERNATIVE WITH EQUIVALENT HARDWARE SUPPORT4 ,COMPILERS AND INTERPRETERS ,,GCC1 ,CLANG_/,,LLVM'S ;,C FRONTEND1 ,C,PYTHON "1 THE ,RUBY INTERPRETER "<,C,RUBY_/,,MRI">1 ,,PHP1 ,PERL1 ,LUA1 ;,R ALL WRITTEN IN ;,C4 ,EVEN COMPILERS FOR LANGUAGES DESIGNED TO REPLACE ;,C ARE OFTEN WRITTEN IN ;,C THEMSELVES1 AT LEAST INITIALLY4 ,DATABASES ,S,Q,LITE "1 ,POSTGRE,S,Q,L1 ,MY,S,Q,L1 ,REDIS ALL ;,C4 ,NETWORKING ,THE ,LINUX NETWORKING STACK1 ,OPEN,S,S,L_/,LIBRE,S,S,L1 ,,NGINX1 CURL1 ,,DNS RESOLVERS1 PACKET PROCESSING FRAMEWORKS ;,C DOMINATES THE LAYER BETWEEN THE APPLICATION AND THE WIRE4 ,THE ;,C STANDARD LIBRARY ITSELF GLIBC1 MUSL1 BIONIC "<,ANDROID">1 NEWLIB " THESE ARE THE FOUNDATIONAL LIBRARIES THAT EVERY PROGRAM ON A ,UNIX-LIKE SYSTEM LINKS AGAINST1 AND THEY ARE WRITTEN IN ;,C4 ,S,Q,LITE1 WRITTEN IN ;,C1 IS ESTIMATED TO RUN ON OVER #D BILLION DEVICES4 ,IT IS IN EVERY I,PHONE1 EVERY ,ANDROID PHONE1 EVERY ,MAC1 EVERY ,WINDOWS #AJ"6 MACHINE "1 EVERY ,FIREFOX1 EVERY MAJOR WEB FRAMEWORK'S DEVELOPMENT MODE1 EVERY ,SKYPE CLIENT1 AND MOST TELEVISION FIRMWARE4 ,IT MAY BE THE MOST WIDELY DEPLOYED SOFTWARE COMPONENT IN HISTORY AND IT IS #AEC1JJJ LINES OF ;,C1 MAINTAINED BY THREE PEOPLE1 WITH #AJJ.0 BRANCH COVERAGE IN ITS TEST SUITE4 ,C'S LEGACY IN OTHER LANGUAGES ,C'S SYNTAX1 SEMANTICS1 AND PHILOSOPHY HAVE BEEN REPLICATED SO THOROUGHLY THAT 8;,C-FAMILY LANGUAGE0 IS A RECOGNIZED CATEGORY CONTAINING MOST OF THE WORLD'S PROGRAMMING LANGUAGES3 ,LANGUAGE ,YEAR ,RELATIONSHIP TO ;,C ,C"6"6 #AIHE 8;,C WITH ,CLASSES0 SUPERSET OF ;,C WITH ,,OOP1 TEMPLATES1 ,,RAII ,OBJECTIVE-;,C #AIHD ;,C WITH ,SMALLTALK-STYLE MESSAGE PASSING THE LANGUAGE OF MAC,O,S_/I,O,S UNTIL ,SWIFT ,JAVA #AIIE ,C'S SYNTAX WITH GARBAGE COLLECTION1 A VIRTUAL MACHINE1 AND NO POINTERS DESIGNED TO BE 8,C"6"6 WITHOUT THE GUNS0 ,JAVA,SCRIPT #AIIE ,C'S SYNTAX APPLIED TO A PROTOTYPE-BASED SCRIPTING LANGUAGE NOW THE MOST-USED LANGUAGE ON ,EARTH ,C_? #BJJJ ,MICROSOFT'S ANSWER TO ,JAVA ,C'S SYNTAX ON A MANAGED RUNTIME ,,PHP #AIIE ,C'S SYNTAX APPLIED TO SERVER-SIDE WEB SCRIPTING ,PERL #AIHG ,HEAVY ;,C INFLUENCE IN SYNTAX AND SEMANTICS ;,D #BJJA ,DESIGNED AS 8WHAT ,C"6"6 SHOULD HAVE BEEN0 ;,C-COMPATIBLE WITH A ,,GC OPTION ,GO #BJJI ,KEN ,THOMPSON AND ,ROB ,PIKE'S RETHINKING OF ;,C FOR NETWORKED SYSTEMS NO CLASSES1 NO EXCEPTIONS1 GARBAGE-COLLECTED ,RUST #BJAE ,DESIGNED TO REPLACE ;,C IN SYSTEMS PROGRAMMING BY SOLVING MEMORY SAFETY AT COMPILE TIME ,SWIFT #BJAD ,APPLE'S REPLACEMENT FOR ,OBJECTIVE-;,C ;,C-INFLUENCED BUT MEMORY-SAFE ,ZIG #BJAF ,A 8BETTER ;,C0 ;,C INTEROP1 NO HIDDEN CONTROL FLOW1 COMPTIME ,THE _<1 _>1 21 FOR"<22">1 IF"<">1 WHILE"<">1 RETURN1 INT1 VOID1 PRINTF THESE ARE ;,C4 ,EVERY PROGRAMMER IN THE WORLD KNOWS ,C'S SYNTAX1 WHETHER THEY KNOW ;,C OR NOT4 ,THE PEOPLE ,C'S CREATION WAS SHAPED BY A REMARKABLY SMALL GROUP OF PEOPLE1 ALL AT ,BELL ,LABS3 ,DENNIS ,RITCHIE "<#AIDA#BJAA"> DESIGNED AND IMPLEMENTED ;,C4 ,HE ALSO CO-DESIGNED ,UNIX WITH ,KEN ,THOMPSON4 ,HE RECEIVED THE ,TURING ,AWARD IN #AIHC " AND THE ,NATIONAL ,MEDAL OF ,TECHNOLOGY IN #AIIH4 ,HE DIED ON ,OCTOBER #AB1 #BJAA1 JUST DAYS AFTER ,STEVE ,JOBS A COINCIDENCE THAT DREW ATTENTION TO HOW MUCH OF THE TECHNOLOGY THAT ,JOBS MADE FAMOUS RAN ON ,RITCHIE'S SOFTWARE4 ,RITCHIE'S DEATH WAS BARELY NOTICED OUTSIDE THE TECHNICAL COMMUNITY1 WHICH MANY REGARDED AS A PROFOUND INJUSTICE4 ,KEN ,THOMPSON DESIGNED THE ;,B LANGUAGE AND THE ORIGINAL ,UNIX4 ,HE LATER CO-CREATED THE ,GO PROGRAMMING LANGUAGE AT ,GOOGLE A LANGUAGE THAT IS1 IN MANY WAYS1 A RETHINKING OF THE SAME SYSTEMS PROGRAMMING SPACE THAT ;,C AND ,UNIX OCCUPIED1 INFORMED BY DECADES OF HINDSIGHT4 ,BRIAN ,KERNIGHAN CO-AUTHORED ,THE ;,C ,PROGRAMMING ,LANGUAGE AND NAMED THE LANGUAGE'S FIRST PROGRAM4 ,HE DID NOT DESIGN ;,C1 BUT HIS WRITING MADE IT ACCESSIBLE TO A GENERATION OF PROGRAMMERS4 ,HE ALSO CO-DESIGNED ,,AWK AND CONTRIBUTED TO ,UNIX'S DOCUMENTATION AND CULTURE4 ,STEVE ,JOHNSON WROTE ,,PCC "<,PORTABLE ;,C ,COMPILER">1 WHICH BECAME THE STANDARD ;,C COMPILER ON MOST ,UNIX SYSTEMS AND DEMONSTRATED THAT ;,C COMPILERS COULD BE PORTED BETWEEN ARCHITECTURES CRITICAL EVIDENCE FOR ,C'S PORTABILITY PROMISE4 ,THE COMPILERS ,,GCC ,THE ,,GNU ,COMPILER ,COLLECTION1 STARTED BY ,RICHARD ,STALLMAN IN #AIHG1 BECAME THE DOMINANT ;,C COMPILER BY THE LATE #AIIJ;S AND REMAINED SO FOR OVER TWO DECADES4 ,,GCC'S OPTIMIZATION CAPABILITIES1 ITS SUPPORT FOR VIRTUALLY EVERY ,,CPU ARCHITECTURE1 AND ITS ROLE AS THE DEFAULT COMPILER FOR ,LINUX MADE IT THE DE FACTO STANDARD4 ,AS OF #BJBF1 ,,GCC SUPPORTS ,C#BC SUBSTANTIALLY4 ,CLANG _/ ,,LLVM ,CLANG1 THE ;,C FRONTEND FOR THE ,,LLVM COMPILER INFRASTRUCTURE1 EMERGED FROM ,APPLE AND THE ,UNIVERSITY OF ,ILLINOIS IN THE LATE #BJJJ;S4 ,ITS ADVANTAGES DRAMATICALLY FASTER COMPILE TIMES1 BETTER ERROR MESSAGES1 A MODULAR ARCHITECTURE1 AND A PERMISSIVE " LICENSE MADE IT THE DEFAULT COMPILER ON MAC,O,S1 I,O,S1 ,FREE,B,S,D1 AND ,ANDROID4 ,MANY ,LINUX DISTRIBUTIONS NOW OFFER ,CLANG AS AN ALTERNATIVE TO ,,GCC4 ,CLANG'S ,C#BC SUPPORT IS EXTENSIVE4 ,,MSVC ,MICROSOFT'S ,VISUAL ,C"6"6 COMPILER HISTORICALLY LAGGED BEHIND ,,GCC AND ,CLANG IN ;,C STANDARD SUPPORT4 ,,MSVC'S ;,C SUPPORT WAS FROZEN AT ,C#HI FOR NEARLY TWO DECADES THE COMPANY FOCUSED ON ,C"6"6 AND CONSIDERED ;,C A SECONDARY CONCERN4 ,THIS STANCE SOFTENED SIGNIFICANTLY IN THE #BJAJ;S1 AND ,,MSVC NOW SUPPORTS MOST OF ,C#AA AND ,C#AG1 WITH ,C#BC SUPPORT IN PROGRESS4 ,,TCC1 ,,PCC1 AND OTHERS ,,TCC "<,TINY ;,C ,COMPILER">1 WRITTEN BY ,FABRICE ,BELLARD1 COMPILES ;,C SO FAST THAT IT CAN BE USED AS A SCRIPTING INTERPRETER TCC -RUN HELLO4C COMPILES AND EXECUTES IN A SINGLE STEP4 ,,PCC HAS BEEN REVIVED AS A SMALL1 CLEAN1 STANDARDS-COMPLIANT COMPILER4 CPROC TARGETS ,,QBE4 CHIBICC1 BY ,RUI ,UEYAMA1 IS A DELIBERATELY EDUCATIONAL SMALL ;,C COMPILER THAT CAN COMPILE REAL ;,C PROGRAMS WHILE REMAINING READABLE ENOUGH TO SERVE AS A TEACHING TOOL4 ,THE ECOSYSTEM OF SMALL1 FOCUSED ;,C COMPILERS REMAINS VIBRANT A TESTAMENT TO THE LANGUAGE'S RELATIVE SIMPLICITY "4 ,THE DIVERSITY OF ;,C COMPILERS MATTERS PRACTICALLY3 IT MEANS ;,C CODE CAN BE COMPILED FOR ANY ,,CPU ARCHITECTURE1 ANY OPERATING SYSTEM1 AND ANY FORM FACTOR FROM A SMARTWATCH TO A SUPERCOMPUTER4 ,NO OTHER LANGUAGE IN #BJBF CAN CLAIM COMPILER SUPPORT AS BROAD AS ,C'S4 ;,C IN SAFETY-CRITICAL AND REAL-TIME SYSTEMS ;,C DOMINATES SAFETY-CRITICAL SOFTWARE THE CODE WHERE FAILURE MEANS PHYSICAL HARM4 ,AVIATION "<,,DO-#AGH;;,C">1 AUTOMOTIVE "<,,ISO #BFBFB">1 MEDICAL DEVICES "<,,IEC #FBCJD">1 NUCLEAR POWER1 AND RAILWAY SIGNALING ALL USE ;,C EXTENSIVELY1 GOVERNED BY CODING STANDARDS THAT RESTRICT THE LANGUAGE TO A SAFE SUBSET3 ,,MISRA ;,C THE ,MOTOR ,INDUSTRY ,SOFTWARE ,RELIABILITY ,ASSOCIATION'S GUIDELINES1 ORIGINALLY PUBLISHED IN #AIIH1 DEFINE A RESTRICTED SUBSET OF ;,C FOR SAFETY-CRITICAL AUTOMOTIVE SOFTWARE4 ,,MISRA ;,C BANS OR RESTRICTS DYNAMIC MEMORY ALLOCATION "1 RECURSION1 GOTO1 POINTER ARITHMETIC1 AND MUCH OF THE PREPROCESSOR4 ,THE RESULT IS A SUBSET OF ;,C THAT IS ANALYZABLE1 TESTABLE1 AND PREDICTABLE AT THE COST OF EXPRESSIVENESS4 ,,MISRA ;,C HAS BEEN ADOPTED FAR BEYOND AUTOMOTIVE3 MEDICAL DEVICES1 AVIONICS1 AND INDUSTRIAL CONTROL SYSTEMS ALL USE IT4 ,,CERT ;,C THE ,,,SEI CERT ;C,' ,CODING ,STANDARD FOCUSES ON SECURITY RATHER THAN SAFETY1 PROVIDING RULES FOR AVOIDING EXPLOITABLE VULNERABILITIES4 ,IT ADDRESSES BUFFER OVERFLOWS1 INTEGER OVERFLOWS1 RACE CONDITIONS1 AND THE MOST DANGEROUS UNDEFINED BEHAVIOR PATTERNS4 ,STATIC ANALYSIS TOOLS LIKE ,COVERITY1 ,POLYSPACE1 ,,PC-LINT1 AND THE ,CLANG ,STATIC ,ANALYZER PERFORM AUTOMATED CHECKING OF ;,C CODE FOR COMMON DEFECTS4 ,THE STATE OF THE ART CAN FIND NULL POINTER DEREFERENCES1 BUFFER OVERFLOWS1 RESOURCE LEAKS1 AND DEAD CODE AUTOMATICALLY BUT NO STATIC ANALYZER CAN CATCH ALL BUGS IN ;,C1 BECAUSE THE LANGUAGE'S SEMANTICS MAKE MANY INTERESTING PROPERTIES UNDECIDABLE4 ,THE IRONY IS CLEAR3 THE LANGUAGE MOST USED IN SAFETY-CRITICAL SYSTEMS IS THE LANGUAGE LEAST EQUIPPED TO PREVENT BUGS4 ,THE INDUSTRY COMPENSATES WITH PROCESS1 TESTING1 AND TOOLING CODING STANDARDS1 STATIC ANALYSIS1 ,,MC_/,,DC COVERAGE REQUIREMENTS1 FORMAL VERIFICATION PRECISELY BECAUSE THE LANGUAGE ITSELF PROVIDES NO SAFETY NET4 ,THIS IS THE FUNDAMENTAL TENSION THAT DRIVES THE ADOPTION OF MEMORY-SAFE LANGUAGES IN SAFETY-CRITICAL DOMAINS4 ;,C AND ,C"6"63 THE RELATIONSHIP ;,C AND ,C"6"6 ARE NOT THE SAME LANGUAGE4 ,C"6"6 WAS DESIGNED BY ,BJARNE ,STROUSTRUP STARTING IN #AIGI AS 8;,C WITH ,CLASSES10 AND IT SHARES ,C'S SYNTAX AND MUCH OF ITS SEMANTICS4 ,BUT THE LANGUAGES HAVE DIVERGED SIGNIFICANTLY3 - ,C"6"6 HAS TEMPLATES1 CLASSES1 VIRTUAL FUNCTIONS1 EXCEPTIONS1 ,,RAII1 MOVE SEMANTICS1 CONCEPTS1 MODULES1 COROUTINES1 AND A STANDARD LIBRARY THAT INCLUDES CONTAINERS1 ALGORITHMS1 AND SMART POINTERS - ;,C HAS NONE OF THESE AND THIS IS A FEATURE1 NOT A DEFICIT ,C'S SIMPLICITY IS ITS VALUE4 ,A ;,C PROGRAM'S BEHAVIOR MAPS PREDICTABLY TO MACHINE CODE4 ,THE LANGUAGE HAS NO HIDDEN CONSTRUCTORS1 NO IMPLICIT FUNCTION CALLS1 NO TEMPLATE INSTANTIATION1 NO EXCEPTION UNWINDING TABLES4 ,THIS PREDICTABILITY IS WHY ;,C REMAINS PREFERRED FOR KERNELS1 FIRMWARE1 AND SAFETY-CRITICAL SYSTEMS WHERE EVERY INSTRUCTION MUST BE ACCOUNTED FOR4 ,THE RELATIONSHIP IS SOMETIMES CONTENTIOUS4 ,C"6"6 PROGRAMMERS ARGUE THAT ,C'S LACK OF SAFETY FEATURES IS INEXCUSABLE IN #BJBF4 ;,C PROGRAMMERS ARGUE THAT ,C"6"6'S COMPLEXITY IS ITSELF A SOURCE OF BUGS4 ,THE ,LINUX KERNEL1 THE MOST IMPORTANT ;,C PROJECT IN THE WORLD1 EXPLICITLY PROHIBITS ,C"6"6 AND ALWAYS HAS ,LINUS ,TORVALDS' OPINIONS ON ,C"6"6 ARE WELL-DOCUMENTED AND UNPRINTABLE ON A FAMILY WIKI4 ,THE HONEST CRITIQUE ,C'S WEAKNESSES ARE WELL-KNOWN AND SERIOUS3 ,MEMORY SAFETY IS THE PROGRAMMER'S PROBLEM4 ;,C PROVIDES NO PROTECTION AGAINST BUFFER OVERFLOWS1 USE-AFTER-FREE1 DOUBLE-FREE1 NULL POINTER DEREFERENCES1 OR DATA RACES4 ,THE PROGRAMMER IS RESPONSIBLE FOR GETTING EVERY ALLOCATION1 EVERY BOUNDS CHECK1 AND EVERY FREE CORRECT4 ,IN LARGE CODEBASES1 THIS IS STATISTICALLY IMPOSSIBLE ,MICROSOFT1 ,GOOGLE1 AND ,APPLE ALL REPORT THAT ROUGHLY #GJ.0 OF THEIR SECURITY VULNERABILITIES ARE MEMORY SAFETY ISSUES IN ;,C AND ,C"6"6 CODE4 ,STRING HANDLING IS TERRIBLE4 ,NULL-TERMINATED STRINGS ARE A DESIGN DECISION FROM #AIGB THAT HAS CAUSED INCALCULABLE DAMAGE4 STRCPY DOESN'T CHECK BOUNDS4 GETS WAS SO DANGEROUS IT WAS REMOVED FROM THE STANDARD4 STRCAT REQUIRES THE PROGRAMMER TO TRACK BUFFER SIZES MANUALLY4 ,EVEN SNPRINTF1 THE 8SAFE0 ALTERNATIVE1 REQUIRES THE PROGRAMMER TO PASS THE CORRECT BUFFER SIZE4 ,THE PREPROCESSOR IS A BLUNT INSTRUMENT4 _?DEFINE1 _?INCLUDE1 _?IFDEF THE ;,C PREPROCESSOR OPERATES ON TEXT1 NOT ON THE LANGUAGE'S SYNTAX OR TYPE SYSTEM4 ,IT ENABLES MACROS THAT LOOK LIKE FUNCTIONS BUT DON'T RESPECT SCOPING1 _?INCLUDE THAT COPIES ENTIRE FILES TEXTUALLY INTO EACH TRANSLATION UNIT "1 AND CONDITIONAL COMPILATION THAT CREATES AN EXPONENTIAL SPACE OF POSSIBLE PROGRAMS THAT ARE IMPOSSIBLE TO TEST EXHAUSTIVELY4 ,UNDEFINED BEHAVIOR IS A LOADED GUN4 ,THE LIST OF ,,UB IN ;,C IS ENORMOUS1 AND MODERN OPTIMIZING COMPILERS EXPLOIT IT AGGRESSIVELY4 ,CODE THAT 8WORKS0 IN DEBUG MODE CAN BREAK SILENTLY IN RELEASE MODE BECAUSE THE OPTIMIZER REMOVED A NULL CHECK THAT THE PROGRAMMER THOUGHT WAS A SAFETY NET4 ,THE GAP BETWEEN WHAT ;,C PROGRAMMERS THINK THEIR CODE DOES AND WHAT THE STANDARD SAYS IT DOES IS THE SOURCE OF SOME OF THE MOST SUBTLE AND DANGEROUS BUGS IN SYSTEMS SOFTWARE4 ,THE BUILD SYSTEM IS CHAOS4 ;,C HAS NO STANDARD BUILD SYSTEM1 NO STANDARD PACKAGE MANAGER1 NO STANDARD DEPENDENCY RESOLUTION4 ,PROJECTS USE ,MAKE1 ,C,MAKE1 ,MESON1 ,AUTOTOOLS1 ,NINJA1 OR CUSTOM SCRIPTS4 ,THERE IS NO CARGO BUILD1 NO GO BUILD1 NO NPM INSTALL4 ,THIS IS ,C'S MOST SIGNIFICANT PRACTICAL DISADVANTAGE COMPARED TO MODERN LANGUAGES4 ,THESE ARE NOT THEORETICAL CONCERNS4 ,THEY ARE THE DAILY REALITY OF ;,C PROGRAMMING IN #BJBF1 AND THEY ARE WHY LANGUAGES LIKE ,RUST EXIST4 ,BUT THEY ARE ALSO WHY ;,C PERSISTS3 EVERY ALTERNATIVE THAT ELIMINATES ,C'S DANGERS ALSO ELIMINATES SOME OF ,C'S CAPABILITIES4 ,THE LANGUAGE THAT LETS YOU DO ANYTHING1 INCLUDING SHOOT YOURSELF1 IS ALSO THE LANGUAGE THAT LETS YOU BUILD ANYTHING4 ,THE TRADE-OFF IS INHERENT1 AND FIFTY-FOUR YEARS OF HISTORY SUGGEST THAT THE INDUSTRY WILL ACCEPT THE DANGER IN EXCHANGE FOR THE POWER AT LEAST FOR THE CODE THAT RUNS CLOSEST TO THE HARDWARE4 ,DENNIS ,RITCHIE ON ,C'S PHILOSOPHY3 8;,C IS QUIRKY1 FLAWED1 AND AN ENORMOUS SUCCESS4 ,WHILE ACCIDENTS OF HISTORY SURELY HELPED1 IT EVIDENTLY SATISFIED A NEED FOR A SYSTEM IMPLEMENTATION LANGUAGE EFFICIENT ENOUGH TO DISPLACE ASSEMBLY LANGUAGE1 YET SUFFICIENTLY ABSTRACT AND FLUENT TO DESCRIBE ALGORITHMS AND INTERACTIONS IN A WIDE VARIETY OF ENVIRONMENTS40 FROM 8,THE ,DEVELOPMENT OF THE ;,C ,LANGUAGE10 #AIIC4 ,THE FUTURE OF ;,C ;,C IS NOT DYING1 BUT ITS ROLE IS SHIFTING4 ,THREE TRENDS ARE RESHAPING ,C'S POSITION IN #BJBF3 ,THE MEMORY SAFETY MANDATE4 ,GOVERNMENTS AND MAJOR CORPORATIONS ARE NOW EXPLICITLY RECOMMENDING AGAINST NEW ;,C CODE IN CONTEXTS WHERE MEMORY-SAFE ALTERNATIVES EXIST4 ,THE ,,US ,NATIONAL ,SECURITY ,AGENCY1 THE ,WHITE ,HOUSE ,OFFICE OF THE ,NATIONAL ,CYBER ,DIRECTOR1 ,,CISA1 AND THE ,,FBI HAVE ALL PUBLISHED GUIDANCE RECOMMENDING MEMORY-SAFE LANGUAGES4 ,GOOGLE1 ,MICROSOFT1 AND ,APPLE HAVE ALL PUBLICLY COMMITTED TO REDUCING THE AMOUNT OF NEW ;,C " CODE THEY WRITE4 ,THE ,LINUX KERNEL'S ADOPTION OF ,RUST IS THE MOST VISIBLE EXAMPLE OF THIS TREND4 ;,C AS A COMPILATION TARGET4 ,INCREASINGLY1 ;,C IS USED NOT AS A LANGUAGE THAT HUMANS WRITE1 BUT AS A PORTABLE ASSEMBLY LANGUAGE THAT COMPILERS TARGET4 ,LANGUAGES FROM ,HASKELL "<,,GHC CAN TARGET ;,C"> TO ,NIM TO ,CYTHON TO THE ,,ALB ;,C BACKEND ALL COMPILE TO ;,C1 LEVERAGING ,C'S UNIVERSAL COMPILER SUPPORT AND DECADES OF OPTIMIZATION INFRASTRUCTURE4 ,IN THIS ROLE1 ,C'S READABILITY AND ERGONOMICS DON'T MATTER WHAT MATTERS IS THAT EVERY PLATFORM HAS A ;,C COMPILER AND THAT THE GENERATED CODE RUNS FAST4 ,C#B;Y AND BEYOND4 ,THE ;,C STANDARDS COMMITTEE "<,,WG#AD"> CONTINUES ACTIVE DEVELOPMENT4 ,THE NEXT REVISION1 INFORMALLY CALLED ,C#B;Y1 HAS ITS LATEST WORKING DRAFT "<,N#CHHF"> FROM ,MAY #BJBF4 ,THE COMMITTEE IS CONSIDERING FEATURES THAT WOULD HAVE BEEN UNTHINKABLE A DECADE AGO IMPROVED TYPE INFERENCE1 BETTER GENERICS1 AND FURTHER SAFETY-ORIENTED FEATURES4 ;,C IS EVOLVING1 SLOWLY AND CAREFULLY1 IN THE SAME DIRECTION THE REST OF THE INDUSTRY IS MOVING BUT ON ITS OWN TERMS1 AT ITS OWN PACE1 PRESERVING THE BACKWARD COMPATIBILITY THAT IS ITS GREATEST STRENGTH4 ,THE MOST LIKELY FUTURE IS COEXISTENCE4 ,NEW SAFETY-CRITICAL AND HIGH-PERFORMANCE SYSTEMS WILL INCREASINGLY BE WRITTEN IN ,RUST OR OTHER MEMORY-SAFE LANGUAGES4 ,EXISTING ;,C CODEBASES HUNDREDS OF BILLIONS OF LINES1 REPRESENTING DECADES OF INVESTMENT WILL CONTINUE TO RUN AND BE MAINTAINED IN ;,C4 ,THE TWO LANGUAGES WILL COEXIST AT THE ,,FFI BOUNDARY1 WITH ,RUST CALLING ;,C LIBRARIES AND ;,C KERNELS HOSTING ,RUST DRIVERS4 ;,C WILL REMAIN INDISPENSABLE NOT BECAUSE IT IS THE BEST LANGUAGE1 BUT BECAUSE IT IS THE MOST UNIVERSAL1 THE MOST PORTABLE1 AND THE MOST DEEPLY EMBEDDED IN THE INFRASTRUCTURE OF THE WORLD4 ;,C AND ,,ALB ,THE ,,ALB ;,C BACKEND IS ,ADA,LOGIC ,,BASIC'S MOST COMPLETE EMITTER3 IT TURNS AN ,,ALB PROGRAM INTO ,C#HI SOURCE CODE1 WHICH THEN COMPILES ON ESSENTIALLY ANY PLATFORM WITH ANY COMPILER4 ,THE DELIBERATE TARGETING OF ,C#HI THE OLDEST1 MOST PORTABLE DIALECT REFLECTS ,C'S UNIQUE POSITION AS THE UNIVERSAL COMPILATION TARGET4 ,WHERE NEWER LANGUAGES DEBATE WHICH STANDARD TO REQUIRE1 ,C#HI REMAINS THE ONE DIALECT THAT EVERY ;,C COMPILER IN EXISTENCE CAN HANDLE4 ,THE ,,ALB PROJECT INCLUDES ;,C IN ITS DOWNLOAD DISTRIBUTION AND USES ;,C AS THE PROOF THAT 8WRITE ONCE1 COMPILE ANYWHERE0 IS ACHIEVABLE EXACTLY THE SAME PROMISE THAT ,RITCHIE AND ,THOMPSON DEMONSTRATED WHEN THEY PORTED ,UNIX TO THE ,INTERDATA #H_/#CB IN #AIGH4 ,SEE ALSO - ,,ALB ;,C BACKEND ,ADA,LOGIC ,,BASIC'S ,C#HI EMITTER - ,RUST THE LANGUAGE DESIGNED TO PREVENT ,C'S MEMORY SAFETY PROBLEMS - ,,FORTRAN ,,COBOL ,,LISP ,,ALGOL ,C'S CONTEMPORARIES AND PREDECESSORS - ,HISTORY OF ,PROGRAMMING ,C'S PLACE IN THE ARC - ,ADA,LOGIC ,,BASIC ,REFERENCES .<#A.> ;,D4 ;,M4 ,RITCHIE1 8,THE ,DEVELOPMENT OF THE ;,C ,LANGUAGE10 ,,HOPL-,,II3 ,PROCEEDINGS OF THE ,SECOND ,,ACM ,,SIGPLAN ,CONFERENCE ON ,HISTORY OF ,PROGRAMMING ,LANGUAGES1 ,CAMBRIDGE1 ,,MA1 ,APRIL #AIIC4 ,ALSO3 CS4BELL-LABS4COM_/WHO_/DMR_/CHIST4HTML4 .<#B.> ;,B4 ;,W4 ,KERNIGHAN AND ;,D4 ;,M4 ,RITCHIE1 ,THE ;,C ,PROGRAMMING ,LANGUAGE1 ,PRENTICE-,HALL1 #AIGH4 ,SECOND EDITION1 #AIHH4 .<#C.> ,,ISO_/,,IEC #IHII3#BJBD1 8,INFORMATION TECHNOLOGY ,PROGRAMMING LANGUAGES ;,C0 "<,C#BC">1 PUBLISHED ,OCTOBER #BJBD4 ,FREELY AVAILABLE DRAFT3 ,N#CBBJ "<,FEBRUARY #BJBD">4 .<#D.> ,,ISO_/,,IEC #IHII3#AIII1 8,PROGRAMMING LANGUAGES ;,C0 "<,C#II">4 ,,ISO_/,,IEC #IHII3#BJAA "<,C#AA">4 ,,ISO_/,,IEC #IHII3#BJAH "<,C#AG">4 .<#E.> CPPREFERENCE4COM1 8,HISTORY OF ;,C10 EN4CPPREFERENCE4COM_/C_/LANGUAGE_/HISTORY4 .<#F.> ,,WG#AD PROJECT STATUS1 OPEN-STD4ORG_/,,JTC#A_/,,SC#BB_/,,WG#AD_/WWW_/PROJECTS4HTML4 .<#G.> ,NOKIA ,BELL ,LABS1 8,THE ,CREATION OF THE ,,UNIX ,OPERATING ,SYSTEM10 NOKIA4COM_/BELL-LABS_/UNIX-HISTORY4 .<#H.> 8,C#BC "<;,C STANDARD REVISION">10 ,WIKIPEDIA4 ,ACCESSED ,OCTOBER #BJBF4