Fact-checked by Grok 2 weeks ago

The C Programming Language

The C Programming Language is a foundational textbook on the C programming language, co-authored by Brian W. Kernighan and Dennis M. Ritchie and first published in 1978 by Prentice Hall. The book offers a concise tutorial introduction to programming in ANSI C, assuming some elementary prior knowledge, while also functioning as a comprehensive reference for the language's syntax, features, and best practices. Developed amid the language's evolution at Bell Labs for Unix system implementation, the first edition captured C's core design as a general-purpose, efficient tool for systems programming. The second edition, released in 1988, updated the content to align with the ANSI X3.159-1989 standard, incorporating formalized definitions of C's constructs and removing ambiguities from earlier implementations. Renowned for its clarity, brevity, and practical examples—including algorithms, data structures, and code snippets—this work has sold over two million copies and been translated into more than 20 languages, establishing it as the definitive guide that shaped generations of programmers and the widespread adoption of C.

Overview

Characteristics

The C programming language is a procedural and imperative programming paradigm that emphasizes structured programming through the use of functions, loops, and conditional statements to organize code into clear, modular blocks. This approach allows developers to express algorithms in a step-by-step manner, facilitating efficient problem-solving while maintaining readability and maintainability. A defining feature of C is its provision of low-level access to memory and hardware via pointers, which act as variables storing memory addresses and enable direct manipulation of data without built-in runtime bounds or type checks. This capability makes C particularly suited for systems programming, where fine-grained control over resources is essential, though it requires programmers to manage memory explicitly to avoid errors like buffer overflows. As a compiled language, C translates source code into efficient machine code through a compiler, resulting in executables that run with minimal overhead and superior performance compared to interpreted languages, which execute code line-by-line at runtime. C employs static typing, where variable types are determined and checked at compile time, but features weak type checking that permits implicit conversions and explicit casts between types, such as assigning an integer to a pointer. Developed at Bell Labs in the early 1970s specifically for implementing the Unix operating system, C has profoundly influenced low-level programming domains, including the development of operating system kernels like Unix and Linux, as well as embedded systems where resource constraints demand compact and performant code. Its portability across hardware platforms stems from this systems-oriented design, enabling the same codebase to be recompiled for diverse environments. The language's simplicity is exemplified by its canonical "Hello, World!" program, which demonstrates core elements like header inclusion, function definition, and output:
c
#include <stdio.h>

int main(void) {
    printf("hello, world\n");
    return 0;
}
This concise structure highlights C's economy of expression, requiring only a few lines to produce executable output while introducing fundamental syntax.

Design Philosophy

The design of the C programming language embodies a philosophy centered on simplicity and minimalism, aiming to provide a compact set of features that enable efficient and portable systems programming without unnecessary complexity. This approach results in a language that is "not a big language," as described in its foundational documentation, prioritizing clarity and ease of implementation over expansive constructs. By limiting built-in safety mechanisms, such as automatic bounds checking or garbage collection, C adopts a "trust the programmer" ethos, placing responsibility on developers for memory management and type safety to avoid runtime overhead and bloat. This deliberate restraint fosters a lightweight compiler-translatable structure, suitable for resource-constrained environments like early Unix systems. A core goal of C's design is portability, allowing code to compile and run across diverse hardware architectures with minimal modifications. This principle evolved to support Unix implementations on platforms ranging from the PDP-11 to the VAX, emphasizing machine-independent abstractions while retaining low-level access. C strikes a balance between high-level abstractions, such as functions and structured control flow, and low-level operations like bitwise manipulation and pointer arithmetic, enabling programmers to express algorithms fluently without sacrificing performance. Explicit memory management via manual allocation and deallocation, rather than automated collection, underscores this balance, granting fine-grained control essential for systems-level efficiency. By design, C eschews object-oriented features, remaining a procedural language focused on direct hardware interaction and modularity through functions, which aligns with its origins in displacing assembly code. Dennis Ritchie described C as evolving from typeless predecessors like B to include structured types for greater power and efficiency, while being efficient enough to displace assembly language and sufficiently abstracted from machine details to achieve portability and describe algorithms across environments. This philosophy retains the core tenet that "programmers know what they are doing," promoting flexibility over enforced safeguards.

History

Origins and Development

The origins of the C programming language, as documented in The C Programming Language, trace back to its development at Bell Laboratories starting in 1972, where Dennis Ritchie created it as a successor to Ken Thompson's B language, developed in 1969–1970 for the PDP-7 computer as part of the early Unix project. Ritchie initially worked on the PDP-11 minicomputer, extending B by introducing explicit data types such as int and char, unifying arrays and pointers, and establishing a more structured type system to support the growing needs of Unix system programming. This evolution marked the formal naming of the language as C, reflecting its position as the next step after B in the lineage from BCPL. As co-author of the book, Ritchie drew on these developments to provide a tutorial and reference that captured C's design principles. C drew significant influences from earlier languages, particularly Martin Richards's BCPL for its typeless design, array-pointer semantics, and concise syntax, as well as ALGOL 68 for ideas on type composition and declaration syntax. Unlike its predecessors, early C emphasized portability and efficiency for systems programming, though initial implementations in 1972 lacked advanced features such as unions, which were added later in the development process between 1973 and 1980. By summer 1973, Ritchie and Thompson had rewritten the entire Unix kernel in C on the PDP-11, replacing much of the previous assembly code and demonstrating the language's viability for operating system implementation. Key milestones in C's early evolution included the introduction of structs in 1972 as part of the core type system, enabling intuitive memory mapping for complex data; this feature was absent in B but became central to C's structured programming capabilities. Around 1973, dynamic memory management functions like malloc and free were incorporated into the standard library to support more flexible allocation, with further refinements appearing by 1975 in the first formal reference manual. The first edition of The C Programming Language, published in 1978 by Prentice Hall and co-authored by Brian Kernighan and Ritchie, provided the language's first comprehensive description, standardizing the syntax and semantics of what became known as "K&R C" and serving as the definitive reference for early adopters.

Standardization Efforts

The standardization of C, which the book helped popularize and later aligned with, began in 1983 when the American National Standards Institute (ANSI) established the X3J11 technical committee to develop a formal standard, aiming to codify existing practices—including those outlined in the first edition of The C Programming Language—and promote portability across implementations. Chaired by Jim Brodie, the committee's efforts culminated in the publication of ANSI X3.159-1989, commonly known as ANSI C or C89, in December 1989. This standard introduced features such as function prototypes, the void type, and qualifiers like const and volatile to enhance type safety and expressiveness. The second edition of The C Programming Language, released in 1988, was updated to reflect the emerging ANSI standard (based on drafts approved that year), incorporating these formalized definitions and removing ambiguities from K&R C. In 1990, the International Organization for Standardization (ISO) adopted the ANSI standard unchanged as ISO/IEC 9899:1990, referred to as C90, under the Joint Technical Committee 1 (JTC1), Subcommittee 22 (SC22), Working Group 14 (WG14). The standardization process continued with major revisions by WG14. The C99 standard (ISO/IEC 9899:1999), published in November 1999, represented a significant evolution, adding support for inline functions to optimize performance by embedding code at call sites, complex number types via the _Complex keyword and <complex.h> header for numerical computations, variable-length arrays for runtime-sized allocations within blocks, and a _Bool type with <stdbool.h> for clearer logical expressions. These changes were motivated by the need to incorporate lessons from C++ and address limitations in numerical and flexible programming, while the committee, chaired by Rex Jaeschke, emphasized compatibility with existing code. A key rationale for C99 was improved internationalization, including universal character names for non-ASCII identifiers, enhanced multibyte and wide-character support through headers like <wchar.h> and <wctype.h>, and locale-specific formatting in <locale.h> to handle diverse cultural conventions such as decimal separators and date formats. Subsequent updates focused on concurrency, safety, and refinements. The C11 standard (ISO/IEC 9899:2011), published in 2011, introduced atomic operations via the _Atomic qualifier and <stdatomic.h> for lock-free thread-safe access to shared data, basic multithreading support with <threads.h>, and the _Generic keyword for type-generic expressions that select behavior based on argument types at compile time. These additions addressed the growing demand for concurrent programming in systems software without relying on platform-specific libraries. The C17 standard (ISO/IEC 9899:2017), released in June 2018, was primarily a maintenance release correcting defects and ambiguities from C11, with no new language features. The most recent revision, C23 (ISO/IEC 9899:2024), ratified in 2024 and published in October 2024, standardized attributes like [[nodiscard]] for compiler hints on unused return values, introduced bit-precise integer types in <stdbit.h> for portable low-level bit manipulation (e.g., count leading zeros), and added keywords such as bool, true, and false as built-ins rather than macros. Overall, WG14's efforts have balanced innovation with backward compatibility, ensuring C's evolution supports modern hardware and global software needs, a progression reflected in the enduring relevance of The C Programming Language as a foundational text.

Influence and Legacy

The book The C Programming Language has left an indelible mark on computer science education and the propagation of C, serving as the authoritative reference that introduced the language to millions. Its first edition in 1978 codified the K&R dialect, which became the de facto standard for C implementations until the ANSI standardization, while the 1988 second edition incorporated the ANSI C specification, helping to unify the language's syntax and semantics across platforms. Widely adopted in universities and professional training, the book—affectionately known as K&R—has trained generations of programmers, contributing directly to C's dominance in systems programming and its influence on subsequent technologies.

Impact on Other Languages

The C programming language, as elucidated in the book, has profoundly shaped the design of subsequent languages through direct extensions and indirect syntactic and conceptual borrowings. Direct derivatives include C++, developed by Bjarne Stroustrup at Bell Labs in 1983 as "C with Classes" and first released in 1985, which extends C with object-oriented features like classes, inheritance, and polymorphism while maintaining full backward compatibility with C code. Objective-C, introduced in 1984 by Brad Cox and Tom Love at Stepstone, builds on C by adding Smalltalk-style dynamic messaging and object-oriented capabilities, serving primarily as a superset for developing graphical user interfaces and later becoming central to Apple's Cocoa framework. Similarly, C#, unveiled by Microsoft in 2000, draws its syntactic foundation from the C family, incorporating C-like control structures and operators but adding managed memory, type safety, and .NET integration for modern application development. Indirectly, C's influence permeates the syntax and paradigms of many contemporary languages, particularly through its widespread adoption of curly braces for block delimitation and semicolons for statement termination. Java, designed in the mid-1990s by James Gosling at Sun Microsystems, adopts C's lexical structure and expression syntax to ensure familiarity for C programmers, while simplifying object models and eliminating low-level pointers to enhance portability across platforms. The Go programming language, created at Google in 2007 by Robert Griesemer, Rob Pike, and Ken Thompson, intentionally mirrors C's procedural style and uses similar block structures and keywords to facilitate adoption by systems programmers, though it introduces garbage collection and concurrency primitives to address C's limitations. Rust, developed by Mozilla starting in 2006, inherits C's memory management concepts but innovates with an ownership and borrowing system to provide memory safety without a garbage collector, positioning itself as a safer alternative for systems programming. C's role in Unix development further extended its reach, as many core Unix tools written in C—such as utilities for file manipulation and process control—inspired the scripting paradigms of shells like the C shell (csh), introduced in 1978 by Bill Joy, which emulates C's syntax for control flow and variables to appeal to C-proficient developers. In embedded systems, C's efficiency influenced dialects like the one used in Arduino, which employs a simplified C++ subset since 2005, allowing direct hardware access while abstracting low-level details for prototyping interactive devices. These influences underscore C's enduring legacy as a foundational blueprint for both high-performance systems and accessible abstractions in later languages, amplified by the pedagogical impact of Kernighan and Ritchie's text.

Modern Relevance and Criticisms

Despite its age, C—as detailed in the book—continues to play a pivotal role in contemporary software development, particularly in domains requiring low-level control, high performance, and direct hardware interaction. The Linux kernel, powering a significant portion of servers, embedded systems, and mobile devices worldwide, is primarily implemented in C, leveraging its efficiency for managing system resources. In scientific computing, C underpins critical libraries such as the GNU Scientific Library (GSL), enabling high-performance numerical computations in fields like physics and engineering. Similarly, C is employed in security-critical applications, including cryptographic software like OpenSSL, where its speed is essential for real-time operations. According to the TIOBE Programming Community Index, C ranked second among programming languages as of November 2025, underscoring its enduring popularity in professional and academic settings. In game development, C remains relevant for performance-intensive components, with frameworks like raylib providing a lightweight foundation for 2D and 3D games written directly in C, facilitating cross-platform portability without the overhead of higher-level abstractions. This usage highlights C's strength in embedded and real-time systems, where its minimal runtime and predictable behavior are unmatched, even as higher-level languages handle user interfaces and scripting. Criticisms of C center on its inherent vulnerabilities stemming from manual resource management and limited built-in safeguards. The lack of automatic bounds checking on arrays and pointers frequently results in buffer overflows, allowing attackers to overwrite memory and execute arbitrary code; a notorious example is the Heartbleed vulnerability (CVE-2014-0160) in OpenSSL, caused by a buffer over-read in its C implementation that exposed private keys and sensitive data across millions of servers. Manual memory allocation via functions like malloc and free often leads to leaks, dangling pointers, and use-after-free errors, contributing to instability in long-running applications. Security analyses reveal that memory safety issues in C account for approximately 70% of severe vulnerabilities reported by organizations like Microsoft and Google. Furthermore, until the C23 standard, C lacked a native module system, forcing developers to rely on header files and macros for code organization, which exacerbates maintenance challenges in large projects. Efforts to mitigate these shortcomings include extensions like Checked C, a Microsoft Research project that adds checked pointers and bounds-safe interfaces to existing C codebases, enabling gradual adoption of spatial safety without full rewrites. Meanwhile, modern alternatives such as Rust address C's safety gaps by enforcing memory safety through its borrow checker at compile time, offering comparable performance for systems programming while reducing common errors; this has led to increasing adoption in kernels and embedded software.

References

  1. [1]
  2. [2]
    The Development of the C Language - Nokia
    This paper is about the development of the C programming language, the influences on it, and the conditions under which it was created.
  3. [3]
    Brian W. Kernighan - American Academy of Arts and Sciences
    Oct 20, 2025 · His twelve books and many papers have had a profound impact on the field of software. In particular, his book, The C Programming Language (1978 ...<|separator|>
  4. [4]
    C Language - Overview - Tutorials Point
    C is a general−purpose, high−level language that was originally developed by Dennis M. Ritchie to develop the UNIX operating system at Bell Labs.<|separator|>
  5. [5]
    Compiled versus interpreted languages - IBM
    For this reason, interpreted programs are usually less efficient than compiled programs. Some programming languages, such as REXX™ and Java™, can be either ...
  6. [6]
    [PDF] 1 Semantic Analysis What Are Types? How to Ensure Type-Safety ...
    Static and dynamic typing refer to type ... : when to define/check types? • Strong vs weak typing ... • Type system: defines types for language.
  7. [7]
    [PDF] Programming Languages Lecture 18 Static vs. Dynamic Typing
    Why weak typing (C/C++). Weak typing: There exist programs that, by definition, must pass static checking but then when run can “set the computer on fire”?
  8. [8]
  9. [9]
    None
    Below is a merged summary of the preface sections from "The C Programming Language" by Kernighan and Ritchie, consolidating all information from the provided segments into a single, dense response. To maximize detail and clarity, I’ll use a structured format with tables where appropriate, followed by a narrative summary. All unique details, design philosophies, key principles, relevant details, direct quotes, and URLs are retained.
  10. [10]
    The Development of the C Language - Nokia
    This paper is about the development of the C programming language, the influences on it, and the conditions under which it was created.Missing: philosophy | Show results with:philosophy
  11. [11]
    [PDF] The development of the C programming language - Brent Hailpern
    ABSTRACT. The C programming language was devised in the early 1970s as a system implementation language for the nascent Unix operating system.
  12. [12]
    The Origin of ANSI C and ISO C
    C was developed at Bell Labs in 1972. ANSI standardized it in 1989, and it became ISO C when adopted internationally in 1990.Missing: C99 C23
  13. [13]
    [PDF] The Journal of C Language Translation
    Jim Brodie is the convener and Chairman of the ANSI C standards commit- tee, X3J11. He is also President of Brodie and Associates, a consulting company based in ...
  14. [14]
    Standards (Using the GNU Compiler Collection (GCC))
    The original ANSI C standard (X3.159-1989) was ratified in 1989 and published in 1990. This standard was ratified as an ISO standard (ISO/IEC 9899:1990) later ...<|control11|><|separator|>
  15. [15]
    ISO/IEC JTC1/SC22/WG14 - C: Approved standards
    Mar 5, 2013 · The latest publically available version of the C11 standard is the document WG14 N1570, dated 2011-04-12. This is a WG14 working paper, but ...<|control11|><|separator|>
  16. [16]
    None
    Below is a merged summary of the key rationales and features of the C99 Standard (ISO/IEC 9899:1999) based on the provided segments from the C99 Rationale V5.10 (April 2003). To retain all information in a dense and organized manner, I will use a combination of narrative text and tables in CSV format where appropriate. The response consolidates ratification info, internationalization improvements, major new features, and useful URLs, ensuring no detail is lost.
  17. [17]
    The C9X Charter as revised at the June 1995 meeting in Copenhagen
    C - The C9X Charter. Rex Jaeschke Chair X3J11 ... While some features of C++ may well be embraced, it is not the committee's intention that C become C++.
  18. [18]
  19. [19]
    ISO/IEC JTC1/SC22/WG14 - C - Open Standards
    Mar 10, 2025 · The rationale for the C99 standard is available. Other information available is: The WG document register including the documents; Information ...WG 14 Document log · WG meetings · The C Standard charter · ContactsMissing: C11 | Show results with:C11
  20. [20]
  21. [21]
    [PDF] ISO/IEC 9899:2024 (en) — N3220 working draft - Open Standards
    This document specifies the form and establishes the interpretation of programs expressed in the programming language C. Its purpose is to promote portability, ...
  22. [22]
    [PDF] The C Programming Language Ritchie & kernighan
    precise and more contemporary definition of the language than the first edition of this book provided. In 1983, the American National Standards Institute ...
  23. [23]
  24. [24]
  25. [25]
  26. [26]
  27. [27]
    [PDF] ISO/IEC 9899:yyyy - Open Standards
    This document specifies the form and establishes the interpretation of programs expressed in the programming language C. Its purpose is to promote portability, ...
  28. [28]
  29. [29]
    errno - cppreference.com
    Feb 2, 2025 · C23 standard (ISO/IEC 9899:2024):. 7.5 Errors <errno.h> (p: TBD). K.3.1.3 Use of errno (p: TBD). K.3.2 Errors <errno.h> (p: TBD). C17 standard ...
  30. [30]
    perror - cppreference.com
    Jun 20, 2021 · The `perror` function prints a textual description of the error code stored in `errno` to stderr, including a user-provided string and the ...
  31. [31]
  32. [32]
  33. [33]
    fopen, fopen_s - cppreference.com
    ### Summary of `fopen` Modes and Text vs Binary
  34. [34]
  35. [35]
    setvbuf - cppreference.com
    ### Buffering Modes Summary for `setvbuf`
  36. [36]
    [PDF] Contents - Open Standards
    C. 1. Scope. 1. This International ... C. 2. This International Standard does not specify. — the mechanism by which ...
  37. [37]
    History - GCC Wiki
    A brief history of GCC. The very first (beta) release of GCC (then known as the "GNU C Compiler") was made on 22 March 1987.
  38. [38]
    [PDF] Clang/LLVM
    Jun 6, 2010 · For many years the GNU Compiler Collection (GCC) was the de facto standard complier of the open source community. In 2007 the Free. Software ...
  39. [39]
    Microsoft C++ (MSVC) compiler versioning
    A brief history of Microsoft C++ compiler versioning. Visual Studio 6.0 through Visual Studio 2015 (14.0). For major releases, _MSC_VER increases by 100.
  40. [40]
    Optimize Options (Using the GNU Compiler Collection (GCC))
    ... debug information in the prologue and epilogue of functions better than -O0 . ... The default is -fguess-branch-probability at levels -O , -O2 , -O3 , -Os .
  41. [41]
    Make - GNU Project - Free Software Foundation
    GNU Make is a tool which controls the generation of executables and other non-source files of a program from the program's source files.Manual · Index of /gnu/make · GNU Mirror List
  42. [42]
    Valgrind Home
    Official Home Page for valgrind, a suite of tools for debugging and profiling. Automatically detect memory management and threading bugs, ...Current Releases · The Valgrind Quick Start Guide · Tool Suite · Code Repository
  43. [43]
    [PDF] Programming languages — C - Open Standards
    May 6, 2016 · (This cover sheet to be replaced by ISO.) This document specifies the form and establishes the interpretation of programs expressed in the.Missing: key | Show results with:key
  44. [44]
    [PDF] Programming languages — a common C/C++ core specification
    May 10, 2020 · ... language specification common to the programming languages C and C++. Its purpose is to promote portability, reliability, maintainability ...
  45. [45]
    mingw-w64
    Mingw-w64 is an advancement of the original mingw.org project, which was created to support the GCC compiler on Windows systems. It was forked in 2007 in order ...Pre-built Toolchains · MSYS2 (GCC) · Source Code · Arch Linux
  46. [46]
    FreeRTOS™ - FreeRTOS™
    FreeRTOS is a market-leading embedded system RTOS supporting 40+ processor architectures with a small memory footprint, fast execution times, and cutting-edge ...Download FreeRTOS · About FreeRTOS · Supported Devices · Forums
  47. [47]
    Get started with the NDK - Android Developers
    Oct 12, 2022 · The Native Development Kit (NDK) is a set of tools that allows you to use C and C++ code with Android, and provides platform libraries you can use to manage ...The ndk-build script · Native APIs · Use existing libraries · Build your project
  48. [48]
    How to write endian-independent code in C - IBM Developer
    May 15, 2007 · This article explains how endianness affects code, how to determine endianness at run time, and how to write code that can reverse byte order.Missing: challenges | Show results with:challenges<|control11|><|separator|>
  49. [49]
    Integer Variations (GNU C Language Manual)
    To be completely sure of the size of an integer type, use the types int16_t , int32_t and int64_t . Their corresponding unsigned types add ' u ' at the front: ...
  50. [50]
    D. Portability Considerations (Informative)
    D.1.9 C-Language Extensions. Certain functions in the C language must be extended to support the additional capabilities provided by POSIX.1-2017.
  51. [51]
    Has C++ Just Become More Popular than C? - Embedded
    Jun 26, 2024 · Looking back over a decade at survey data, C was used in over 80% of embedded systems projects! Today, those numbers are in the range of 60 ...
  52. [52]
    Bjarne Stroustrup's FAQ
    May 26, 2024 · The current standard is C++17, but C++20 has been approved and will become official late 2020. ... C++ a proper subset of C++ with the C++/CLI ...
  53. [53]
    About Objective-C - Apple Developer
    Sep 17, 2014 · Objective-C is the primary programming language you use when writing software for OS X and iOS. It's a superset of the C programming language ...
  54. [54]
    The origins of Objective-C at PPI/Stepstone and its evolution at NeXT
    Jun 12, 2020 · The roots of Objective-C began at ITT in the early 1980s in a research group led by Tom Love investigating improving programmer productivity.
  55. [55]
    .NET programming languages - C#, F#, and Visual Basic - Microsoft
    C# (pronounced "C sharp") is a simple, modern, object-oriented, and type-safe programming language. Its roots in the C family of languages makes C# immediately ...
  56. [56]
    [PDF] The Java® Language Specification - Oracle Help Center
    Jan 21, 1996 · ... language. Chapter 3 describes the lexical structure of the Java programming language, which is based on C and C++. The language is written ...
  57. [57]
    Go at Google: Language Design in the Service of Software ...
    Unlike C and Java and especially C++, Go can be parsed without type information or a symbol table; there is no type-specific context. The grammar is easy to ...Missing: influence | Show results with:influence
  58. [58]
    Influences - The Rust Reference
    Influences. Rust is not a particularly original language, with design elements coming from a wide range of sources. Some of these are listed below ...
  59. [59]
    History of UNIX Shells - Learning the bash Shell, Second Edition ...
    The C shell gets its name from the resemblance of its commands to statements in the C Programming Language, which makes the shell easier for programmers on UNIX ...
  60. [60]
    Language Reference | Arduino Documentation
    Arduino programming language can be divided in three main parts: functions, values (variables and constants), and structure. Functions. Variables. Structure.digitalRead() · Serial · pinMode() · digitalWrite()<|control11|><|separator|>
  61. [61]
    Linux kernel coding style — The Linux Kernel documentation
    ### Extracted Statements Confirming the Linux Kernel is Written in C
  62. [62]
    TIOBE Index - TIOBE - TIOBE Software
    The TIOBE Programming Community index is an indicator of the popularity of programming languages. The index is updated once a month.TIOBE Programming · Schedule a demo · Coding Standards · TiCS Framework
  63. [63]
    Heartbleed Bug
    The Heartbleed Bug is a serious vulnerability in the popular OpenSSL cryptographic software library. This weakness allows stealing the information protected, ...
  64. [64]
    Can memory-safe programming languages kill 70% of security bugs?
    70% of severe security bugs are actually memory safety issues. Widely used programming languages such as C and C++ are often the culprit for many of the issues.
  65. [65]
    NSA Releases Guidance on How to Protect Against Software ...
    Nov 10, 2022 · Microsoft and Google have each stated that software memory safety issues are behind around 70 percent of their vulnerabilities. Poor memory ...
  66. [66]
    C23: a slightly better C - Daniel Lemire's blog
    Jan 21, 2024 · It is relatively easy to learn, and highly practical. Maybe surprisingly, the C programming language keeps evolving, slowly and carefully. If ...
  67. [67]
    Checked C - Microsoft Research
    May 15, 2015 · The Checked C project is extending the C programming language so that programmers can write more secure and reliable C programs.
  68. [68]
    Why Rust for safe systems programming - Microsoft
    Jul 22, 2019 · What separates Rust from C and C++ is its strong safety guarantees. Unless explicitly opted-out of through usage of the “unsafe” keyword, Rust ...