Useful Modern C resources to
consider
(Updated
2024-Feb-15th)
Websites:
- Mike Acton, "Three Big Lies [of Software Development]", Article, March 2008.
- Mike Acton, "Branch-free Implementation of Half-precision (16-bit) Floating Point", Article, July 2006.
- Mike Acton, "Understanding Strict Aliasing", Article, June 2006.
- Mike Acton, "Demystifying the restrict Keyword", Article, May 2006.
- Mike Acton, "Benefits to Branch Elimination", Article, April 2006.
- Mike Acton, "Background on Branching", Article, April 2006.
- Tony Albrecht, "Optimisation Lesson 1: Profiling", Blog Article, Oct
2011.
- Tony Albrecht, "Optimisation Lesson 2: The Pipeline", Blog Article, Nov
2011.
- Tony Albrecht, "Optimisation Lesson 3: The Memory Bottleneck", Blog
Article, March 2012.
- Tony Albrecht, "Visualization of Performance of L1 Cache vs. L2 Cache vs.
RAM", Interactive Demo.
- Sean Eron Anderson, "Bit Twiddling Hacks", Code Snippet Collection,
1997-2005.
- Jeff Atwood, "The Infinite Space Between Words", Blog Entry, May
2014.
- Florian Behr, "A Tour through Xlib and Related Technologies", Handmade
Network wiki article, 2018. (CODE -- public domain)
- Walter Bright, "C's Biggest Mistake", Blog Entry, 2009.
- Jerry Cain, "Programming
Paradigms", Stanford CS107 Course, 2008. (Lectures 2-8 & 12-14)
- Albert Chan, dtoa-fast, GitHub repo.
- Elnar Dakeshov, "C11 and C17 Standard Support Arriving in MSVC [Visual
Studio 2019 v16.8 Preview 3]", MS C++ Team Blog Entry, Sep 2020.
- Travis Downs, "Performance Speed Limits", Blog Article, June 2019.
- Reuben Dunnington, Direct3D12 Hello Triangle, GitHub repo.
- Saeed Falahat, "Using enum
with Function Pointers in C", Handmade Network wiki article, 2018.
- Glenn Fiedler, "Floating Point Determinism", Blog Entry, Feb 2010.
- Glenn Fiedler, "UDP vs. TCP", Blog Entry, Oct 2008.
- Glenn Fiedler, "Fix Your Timestep!", Blog Entry, June 2004.
- Glenn Fiedler, "Integration Basics", Blog Entry, June 2004.
- Robin Green, "Faster Math Functions", GDC Talk, 2003.
- Jens Gustedt, (C23) "Whitespace Does Matter in C23", Article, Jan 2024.
- Jens Gustedt, (C23) "The [[deprecated]] Attribute in C23 Does Much More Than Marking Obsolescence", Article, Jan 2024.
- Jens Gustedt, (C23) "The New __VA_OPT__ Feature in C23", Article, Aug 2023.
- Jens Gustedt, (C23) "Enforced Bounds Checking for Frozen Function Interfaces", Article, June 2023.
- Jens Gustedt, (C23) "Dealing with Overflow", Article, Dec 2022.
- Jens Gustedt, (C23) "Checked Integer Arithmetic in the Prospect of C23", Article, Dec 2022.
- Jens Gustedt, (C23) "C23 Implications for C Libraries", Article, Dec 2022.
- Jens Gustedt, (C23) "Improve Type Generic Programming", Article, Jan
2021.
- Jens Gustedt, (C11) "Compare Exchange Compares Memory and Not Value",
Article, Aug 2018.
- Jens Gustedt, (C11) "Spurious Failures of Thread Functions", Article, Aug
2018.
- Jens Gustedt, (C11) "Unicode Operators for C", Article, March 2017.
- Jens Gustedt, (C11) "The
Controlling Expression of _Generic",
Article, May 2015.
- Jens Gustedt, (C11) "Defects:
Initialization of Padding", Article, Oct 2012.
- Jens Gustedt, (C11) "Defects: C Threads are Not Realizable with POSIX
Threads", Article, Oct 2012.
- Jens Gustedt, (C99) "Effective Types and Aliasing", Article, Aug 2016.
- Jens Gustedt, (C99) "Demystify Undefined Behavior", Article, April 2015.
- Jens Gustedt, (C99) "Don't Use Fake Matrices", Article, Sep 2014.
- Jens Gustedt, (C99) "Don't Use Casts", Article, April 2014.
- Jens Gustedt, (C99) "A Praise of size_t
and Other Unsigned Types", Article, July 2013.
- Jens Gustedt, (C99) "C Data Model, Simplified View", Article, March
2012.
- Jens Gustedt, (C99) "The C Data Model", Article, March 2012.
- Jens Gustedt, (C99) "Socket Programming and C99", Article, Oct 2011.
- Jens Gustedt, (C99) "Don't Use NULL",
Article, Nov 2010.
- Jens Gustedt, (C99) "Consistent Initialization of static
and auto
Variables", Article, June 2010.
- Jens Gustedt, (C99) "Default Arguments for C99", Article, June 2010.
- Daniel Hardman, "Variadic Macro Tricks", Article, Nov 2014.
- Christian Hujer, "Suppressing Warnings in GCC & Clang", Article, Nov
2017.
- Brian W. Kernighan, "Why
Pascal is Not My Favorite Programming Language", Paper, April 1981.
- Evan Klitzke, "Beware of strncopy()
and strncat()",
Blog Entry, June 2018.
- Evan Klitzke, "Declaring C String Constants the Right Way", Blog
Entry, May 2017.
- Evan Klitzke, "All About Linkers", Blog Entry, February 2017.
- Evan Klitzke, "A
Funny Thing about C and C++", Blog Entry, June 2016.
- Evan Klitzke, "C
Functions without Arguments", Blog Entry, February 2016.
- Chris Lattner, "What Every C Programmer Should Know About Undefined
Behavior", Blog Entry, July 2011.
- Daniel Lemire, fast_double_parser, GitHub repo.
- David Malcolm, "Static Analysis Updates in GCC 11", Red Hat Developer
Article, Jan 2021.
- David Malcolm, "Static Analysis in GCC 10", Red Hat Developer Article,
March 2020.
- Olve Maudual, Jon Jagger, "Deep C (and C++)", (Extensive) Presentation, Oct
2011.
- Paul E. McKenney, "Is Parallel Programming Hard, And If So, What Can You Do
About It?", Android System Developer Forum Talk, April 2011.
- Mārtiņš Možeiko, "How to Avoid C/C++ Runtime on Windows", Handmade
Network forum post, 2014.
- Mārtiņš Možeiko, "Setting up
D3D11 Rendering on Windows", GitLab code snippet, 2016.
- Brian Raiter, "The Teensy ELF Executable", SeaGL2014 talk, 2014.
- John Regehr, "A Guide to Undefined Behavior in C and C++", Blog
Entry, July 2010.
- Dennis M. Ritchie, "The
Development of the C Language", 2nd History of Programming
Languages, Cambridge, MA, April 1993.
- Colin Robertson, "Install C11 and C17 Support in Visual Studio 2019",
Article, Sep 2020.
- Tom Ryder, "Unix as IDE", Blog Series, Feb 2012.
- Alexey Shmalko, "7 Things You Should Know About make",
Blog Entry, Oct 2014.
- Daneil Steinberg, "Debugging in Vim", Blog Entry, May 2019.
- Steve Summit, "comp.lang.c Frequently Asked Questions", 1995-2005.
- Martin Sústrik, "Why Should I Have Written ZeroMQ in C, not C++ (part II)", Blog Article, Aug 2012.
- Martin Sústrik, "Why Should I Have Written ZeroMQ in C, not C++ (part I)", Blog Article, May 2012.
- David R. Tribble, "Incompatibilities Between ISO C99 and ISO C++98", Aug
2001.
- Ben Visness, "Using the LEA
Instruction for Arbitrary Arithmetic", Handmade Network Blog Entry,
November 2019.
- Andre Weissflog, "Modern C for C++ Peeps", Blog Entry, September
2019.
- Andre Weissflog, "Handles are the Better Pointers", Blog Entry, June
2018.
- Andre Weissflog, "One Year of C", Blog Entry, June 2018.
- Chris Wellons, "The Value of Undefined Behavior", Blog Entry, July
2018.
- Jonathan Whiting, "Why I Write Games in C", Blog Article, 2016.
- Alec Wolman, "An Introduction to GDB in Emacs", UW CSE 378 Course
Notes, Fall 1997.
Videos:
- Ulf Adams, "Ryu: Fast Float-to-String Conversion", PLDI talk,
2018.
- Andrei Alexandrescu, "How AI Tools Impact Your Life as a Systems Programmer", Code Europe closing keynote,
2023.
- Krste Asanovic, "SiFive's Mission, Journey, and the Origins of RISC-V", IEEE CICC Talk, March 2020.
- Sean Barrett, "Advice for Writing Small C Programs", twitch.tv stream,
2015.
- Gaetano Borriello, "Pointers", "Arrays", "Integers", "Floating
Point", UW course, 2016.
- Gaetano Borriello, "Arrays & Structs": P1,
P2, P3,
P4, P5,
UW course, 2016.
- Luis Ceze, "Memory Allocation": P1,
P2, P3,
P4, P5,
P6, UW course, 2016.
- Bruce Dawson, "Getting Started Debugging on Linux [using Qt Creator]",
Steam Dev Days talk, 2014.
- Finn Grimwood, "Using GDB in Emacs", UndoDB video, Jan 2020.
- John L. Gustafson, "Next Generation Arithmetic for HPC and AI: An Update",
UW PLSE Talk, Sep 2018.
- John L. Gustafson, "Beyond Floating Point: Next Generation Computer
Arithmetic", Stanford EE380 Talk, Feb 2017.
- Richard Hipp, "Fossilize Your Code [using Fossil DVCS]", SouthEast
LinuxFest talk, 2011.
- Richard Hipp, "Checklists for Better Software", SouthEast LinuxFest
talk, 2013.
- Brian Kernighan, "Elements of Programming Style", Princeton University
talk, 2009. (WARNING: Loud
noise during the 56-minute mark!)
- Alen Ladavac, "Myths and Misconceptions of Frame Pacing", Reboot
Develop Talk, 2019.
- Chris Lattner, "The Golden Age of Compilers", ASPLOS keynote, April 2021.
- Greg Law, "Give Me 15 Min's & I'll Change Your View on GDB",
CppCon talk, 2015.
- Greg Law, "GDB - A Lot More than You Knew", CppCon talk, 2016.
- Greg Law, "More GDB Wizardry and 8 Other Essential Linux Debugging
Tools", ACCU talk, 2019.
- Greg Law, "Reduce Binary Size and Compile Time with DWARF", UndoDB
video, Feb 2020.
- Greg Law, "Helpful GDB Commands", UndoDB video, Feb 2020.
- Greg Law, "How to Conquer Reverse Debugging Without a Reversible
Debugger [in GDB]", UndoDB video, April 2020.
- Olve Maudal, "Reintroduction to C", NDC Talk, Sep 2023.
- Olve Maudal, "42 Silly Ways to Say 'Hello' in C", NDC Talk, Nov 2022.
- Olve Maudal, "History and Spirit of C", NDC Talk, Oct 2011.
- JeanHeyd Meneide, "C is So Back: Unbreaking the Charter", NDC Talk, Sep 2023.
- Sergiy Migdalskiy, "Performance Optimization, SIMD and Cache", 2015.
- Jean Pierre LeJacq, "C Best
and Worst Security Practices", SouthEast LinuxFest talk, 2019.
- John Regehr, "Undefined Behavior in 2017 (Part 1/2)",
CppCon talk, 2017.
- John Regehr, "Undefined Behavior in 2017 (Part 2/2)",
CppCon talk, 2017.
- Brian Ruth, "Infiltrating a Code Base: Moving Towards a Better C",
CppCon talk, 2019.
- Dan Saks, "Choosing the Right Integer Types in C and C++",
code::dive talk, 2018.
- Dan Saks, "Storage Duration and Linkage in C and C++", NDC talk,
2019.
- Dan Saks, " 'New' Features in C", NDC talk, 2019.
- Dan Saks, "Understanding Lvalues and Rvalues", Core C++ talk,
2019.
- Robert C. Seacord, "Safety and Security: The Future of C and C++", NDC talk,
Sep 2023.
- Robert C. Seacord, Olve Maudal, John Regehr, JeanHeyd Meneide, "C23 and Beyond", NDC panel, Sep 2023
- Julian Smith, "Introduction to Undodb", CppCon Lightning Talk,
2014.
- Jacob Sorber, "Learn GDB in 60 Seconds", YouTube video, April
2017.
- Jacob Sorber, "Learn make in
60 Seconds", YouTube video, May 2017.
- Eskil Steenberg, "Modern C Development with Visual Studio [2022] in 2023", YouTube Video, Aug 2023.
- Eskil Steenberg, "How I Program in C", YouTube Video, Nov 2016.
- Andrew Tanenbaum, "Lessons Learned from 30 Years of MINIX?", MINIXCon
talk, 2016.
- Brian Will, "The C Language": Part
1, Part 2, Part
3, Part 4, Part
5, YouTube videos, 2014.
- Dawid Zalewski, "Programming in Modern C with a Sneak Peek into C23", ACCU Talk, June 2023.
Books:
- Robert C. Seacord, Effective C, No Starch Press, 2020.
- Jens Gustedt, Modern C, Manning, 2019.
- Mike McGrath, C Programming in Easy Steps, 5th
Edition, In Easy Steps Ltd, 2018.
- R.E. Bryant, D.R. O'Hallaron, Computer Systems: A
Programmer's Perspective, 3rd Edition, Pearson, 2015.
- Robert C. Seacord, CERT C Coding Standard, 2nd Edition, Addison-Wesley Professional, 2014.
- Ben Klemens, 21st Century C: C Tips from the New
School, 2nd Edition, O'Reilly, 2014.
- Richard M. Reese, Understanding and Using C
Pointers, O'Reilly, 2013.
- Alan R. Feuer, The C Puzzle Book, Pearson,
1999.
- Kyle Loudon, Mastering Algorithms with C,
O'Reilly, 1999.
- Peter van der Linden, Expert C Programming: Deep C
Secrets, Prentice Hall, 1994.
- P.J. Plauger, The Standard C Library, Prentice
Hall, 1992.
- Andrew Koenig, C Traps and Pitfalls,
Addison-Wesley Professional, 1989.
- Brian W. Kernighan, Dennis M. Ritchie, The C Programming
Language, 2nd Edition, Prentice Hall, 1988.
Papers:
- M. Andrysco, R. Jhala, S. Lerner, "Printing Floating-Point Numbers: An Always Correct Method", Proceedings of the 43rd Annual ACM SIGPLAN 2016, 555-567. GitHub repo
- W.D. Clinger, "How to Read Floating-Point Numbers Accurately",
Proceedings of ACM SIGPLAN '90, 92-101.
- S. Lau et al, "Cerberus-BMC: A Principled Reference Semantics and
Exploration Tool for Concurrent and Sequential C", Proceedings of CAV
2019, 1-11.
- K. Memarian et al, "Into the Depths of C: Elaborating the de Facto
Standards", Proceedings of PLDI '16, 1-15.
- A. Mokhov, N. Mitchell, S.P. Jones, "Build Systems à la Carte", Proc.
ACM Program. Lang., 2 (79), September 2018, 1-29.
- M.C. Ring, "MAPM: A Portable Arbitrary Precision Math Library in
C", C / C++ Users Journal, 19 (11), November
2001.
- G.L. Steele, J.L. White, "How to Print Floating-Point Numbers
Accurately", Proceedings of ACM SIGPLAN '90, 112-126.
Best viewed at
1280x720 (720p) screen resolution or higher.