C Programming Language
This page is dedicated to the ANSI C Programming language. Programs, book recommendations and links. Even in 2025, we still use ANSI C as a our primary programming language.
Contents
Recommended reading
- Secure Coding in C and C++ by Robert C. Seacord. Look Inside
- The Standard C Library by P.J. Plauger
- C Interfaces and Implementations by David R. Hanson
- The C Programming Language, 2nd Edition by Brian W. Kernighan and Dennis M. Ritchie. Look Inside
Affiliate disclosure: we get a small commission for purchases made through the above links
- Contents
- What's new?
- Recommended books on the C Programming Language
- Secure Programming in C
- Recommended books on Win32 Programming in C
- Some cute programs in C
- Some interesting articles
- Contact
- Comments
What's new?
- 12 April 2025. Reintroduced the comment feature to accept user's comments.
- 10 April 2025. Debug Printing in a C Program a simple way to output debugging info in an ANSI C program that can be easily turned off.
- 23 September 2024. Update to An all-singing, all-dancing C function to create a temporary file.
- Updated our Getting rid of that MSVC++ warning C4996: 'may be unsafe/disable deprecation' page to show how you can avoid that annoying warning message and always default to an empty project each time, instead of that precompiled stdafx rubbish. For real C programmers only.
- Update to Using flex and bison in MSVC++ .
- Our safe versions of strncpy and strncat.
- Avoiding buffer overflows - strlcpy and strlcat.
Recommended books on the C Programming Language
- The C Programming Language, 2nd Edition by Brian W. Kernighan and Dennis M. Ritchie. Still reads well. I still have and use the first edition dated 1978.
- The C Puzzle Book by Alan R. Feuer. The best ever book on understanding the quirks of C and how to use pointers properly.
- The Practice of Programming by Brian W. Kernighan and Rob Pike. An update of an earlier book written in the 1970s. Timeless advice, not just on C but on Java, C++ and Perl.
- The Standard C Library by PJ Plauger. Literally how it all works with full source code and tests.
If you read and understand the first three of these books, you will be an expert in C, I promise you. Plauger is a useful reference book that makes up the set. And better, all four of them will span no more than 4 inches on your book shelf. You might try The C Answer Book: Solutions to the Exercises in 'The C Programming Language' by Clovis L. Tondo and Scott E. Gimpel.
For more advanced users, try C Interfaces and Implementations: Techniques for Creating Reusable Software by David R. Hanson. The source code and sample pages are available here.
Secure Programming in C
For a good introduction see Secure Coding in C and C++ by Robert C. Seacord. This not only explains clearly what the problems are but provides useful links <http://www.cert.org/books/secure-coding/>.
For a more detailed work with lots of instantly useable examples for both Windows and Unix, try Secure Programming Cookbook for C and C++ by John Viega and Matt Messier.
The GIAC Secure Software Programmer (GSSP) Certification Exam was developed in a joint effort involving the SANS Institute, CERT/CC, and several US government agencies. David Ireland was one of the first seven programmers to receive the GSSP-C qualification in the C programming language, see SANS Institute press release.
Free software: See our free Wclock world time display program written using straightforward ANSI C and so-called "SDK-C", i.e. the C code used in the Windows SDK. The source code is available.
Recommended books on Win32 Programming in C
- Programming Windows by Charles Petzold, 5th ed, Microsoft Press, 1999.
- Windows NT Win32 API SuperBible by Richard J Simon. There are variants of this book for all varieties of Windows from W95 to 2000 and beyond, but they are essentially all the same.
- Windows Graphics Programming by Feng Yuan, Prentice Hall, 2000. The ultimate guide to Win32 GDI and DirectDraw. OK, he uses C++ and MFC, but it's not hard to extract the important bits. Very comprehensive coverage.
Some cute programs in C
Calculate pi to 800 digits in 160 characters of code. Written by Dik T. Winter at CWI.
int a=10000,b,c=2800,d,e,f[2801],g;main(){for(;b-c;)f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f[b]*a, f[b]=d%--g,d/=g--,--b;d*=b);}
Calculate the day of the week in 45 characters of code. Written by Mike Keith.
(d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7
Diffie-Helman in 10 lines of code posted anonymously to sci.crypt and publicised by Adam Back. This actually carries out multiple precision modular exponentation using 8-bit digits. Set S to the number of 8-bit digits required plus 1. This example is for 1024 bits.
#include <stdio.h> /* Usage: dh base exponent modulus */ typedef unsigned char u;u m[1024],g[1024],e[1024],b[1024];int n,v,d,z,S=129;a( u *x,u *y,int o){d=0;for(v=S;v--;){d+=x[v]+y[v]*o;x[v]=d;d=d>>8;}}s(u *x){for( v=0;(v<S-1)&&(x[v]==m[v]);)v++;if(x[v]>=m[v])a(x,m,-1);}r(u *x){d=0;for(v=0;v< S;){d|=x[v];x[v++]=d/2;d=(d&1)<<8;}}M(u *x,u *y){u X[1024],Y[1024];bcopy(x,X,S );bcopy(y,Y,S);bzero(x,S);for(z=S*8;z--;){if(X[S-1]&1){a(x,Y,1);s(x);}r(X);a(Y ,Y,1);s(Y);}}h(char *x,u *y){bzero(y,S);for(n=0;x[n]>0;n++){for(z=4;z--;)a(y,y ,1);x[n]|=32;y[S-1]|=x[n]-48-(x[n]>96)*39;}}p(u *x){for(n=0;!x[n];)n++;for(;n< S;n++)printf("%c%c",48+x[n]/16+(x[n]>159)*7,48+(x[n]&15)+7*((x[n]&15)>9)); printf("\n");}main(int c,char **v){h(v[1],g);h(v[2],e);h(v[3],m);bzero(b,S);b[ S-1]=1;for(n=S*8;n--;){if(e[S-1]&1)M(b,g);M(g,g);r(e);}p(b);}Note: For strict ANSI you need to add
#include <string.h>
and substitute memset(x,0,S)
and memcpy(y,Y,S)
for the bzero() and bcopy() functions above (or write your own loops).
The Best One Liner winner in the 1987 International Obfuscated C Code Contest (IOCCC), written by David Korn and judged "the best one line entry ever received".
main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}This should compile without changes on a Unix or Cygwin system. If you are stuck, here are some hints to help understand how it works.
Some interesting articles
These are interesting articles or links on C Programming that we've stumbled across in the last few years. If there wasn't a valid link to the original site, then the articles are posted here as an educational aid. We don't intend to infringe anyone's copyright here. If you are the original author and have a problem with any of these articles being posted here, please contact us and we'll remove it or replace it with a link to your site.
comp.lang.c Frequently Asked Questions | Link to www version. Highly relevant. |
ANSI C Programming Lanuage ANSI C Standard Library | A useful short help on ANSI C Programming, including precedence and the preprocessor, and a summary of the ANSI C standard library functions. By Ross L Richardson of UTAS (original links no more). |
Standard C programming | This document by P.J. Plauger and Jim Brodie provides all the information you need to read and write programs in the Standard C programming language. |
Rationale for C90 ANSI C | A link to the original Rationale for American National Standard for Information Systems - Programming Language - C. This was included in the original ANSI standard explaining why things were done as they were. It was unfortunately dropped from the ISO standard. |
C99 Standard | The last public draft of the C99 standard (ISO/IEC 9899:1999) is available from the JTC1/SC22/WG14-C site as well as the Technical Corrigenda and the Rational for the C99 standard. |
Style in C | Rob Pike's set of essays on coding style and a "philosophy of clarity in programming" as opposed to laying down hard rules. |
C Traps and pitfalls | An essay by Andrew Koenig of AT&T Bell Labs written as the basis to his book C Traps and Pitfalls. "The C language is like a carving knife: ... This paper shows some of the ways C can injure the unwary, and how to avoid injury." Worth reading (and then re-reading). |
Incompatibilities Between C and C++ | David R. Tribble's detailed listings of incompatibilities between ISO C and ISO C++. |
How To Steal Code | Henry Spencer's article on inventing the wheel only once. "Never build what you can (legally) steal! Done right, it yields better programs for less work". There are some useful C programs at the end. |
The Ten Commandments for C Programmers | Henry Spencer's amusing, but true, adaptation of the ten commandments for C programmers. We love number 6: If a function be advertised to return an error code in the event of difficulties, thou shalt check for that code, yea, even though the checks triple the size of thy code and produce aches in thy typing fingers, for if thou thinkest ``it cannot happen to me'', the gods shall surely punish thee for thy arrogance. Read and take note. |
How to write unmaintainable code | A link to Roedy Green's very amusing article on how to guarantee a lifetime's employment by making life impossible for maintenance programmers. (He actually has to explain that it's a joke!) Although focused on Java, he gives plenty of examples in C. If you give someone a program, you will frustrate them for a day; if you teach them how to program, you will frustrate them for a lifetime. More quotes below. |
Contact
To contact us, please send us a message. To make a comment see below.
This page last updated 9 September 2025
Old comments
[Go to end of old comments]Thank you for this great site, and for your wisdom.
C is to programming what minimalism is to art. There is something peaceful or calming about a language which is transparent, honest, and succinct. It allows the programmer - the code artist - to be in control of what paint goes on the canvas.
And as you mention programs written in C have the quality of longevity, or to quote Christopher Alexander, a "timeless way" about them.
Guys, keep up the great work.
Mark Horner | Melbourne, Australia - Sun, Jan 24 2010 04:12 GMT
I never liked C until I started working on microcontrollers and I must say, I have come to discover its utility as a really powerful mid-level programming language.
And it is great to find such a good site with good many excellent references.
Mahder Tewolde | New York, NY - Sat, Feb 27 2010 02:36 GMT
Wow! this is a great site!
"C is simpler and more compact" "The reference book is thinner"
I think that is so important in a programming language...
Good job guys.
Javier | Spain - Sat, Apr 17 2010 02:08 GMT
please you make some more easy way to express language'c'.
venkatesh kumar | - Thu, May 6 2010 05:17 GMT
C definitely is a very simple, yet powerful language. I now can create some GUI from winprog tuts, which had me cry in the beginning, but steadily making me happier all the way.
This article has boosted me more to work on C programming in Windows.
Vijay Kanta | Hyderabad, India - Sat, Jun 5 2010 11:20 GMT
great job !! It is just like a complete package to understand ''what is C language''. I appreciate this commendable work. Hearty congratulations 2 u guys...
Pooja gupta | Saharanpur, INDIA - Mon, Jul 12 2010 10:23 GMT
Such a great piece of information in one page. Thanks a lot for sharing it with the world !!!
ganesh | - Sat, Aug 21 2010 20:25 GMT
Regarding this part about C# applications: "it certainly won't work on any platforms other than the big W!"
Search for "banshee media player", widely distributed on Linux distributions and also available for Mac OS X.
It is written in C#. (It doesn't even have a Windows version available to download!)
Daniel Earwicker | - Mon, Nov 22 2010 14:13 GMT
Great Web site for the beginners! Thanks dear.....
Kripal Singh Thakur | Bhopal , M.P India - Fri, Feb 25 2011 14:23 GMT
Thanks God that I found you guys, for my own enlightenment in the C language Programming, your site is super to me I got what I was looking for, your site has a lot of useful information, I live in Boca Raton, Florida and I sending my greetings to your company from this part of the world
Thanks again, sincerely: Roberto Pizano. PD: (02-27-11)
Roberto Pizano | Boca Raton, Florida USA - Mon, Feb 28 2011 05:55 GMT
one letter and it makes such a huge difference :) Just like in C...
ak | - Wed, Apr 6 2011 17:24 GMT
My favorite quote. qood programs should be hard to read, they are hard to write.
dan mccarthy | rome ny - Mon, Jun 13 2011 19:49 GMT
,,,its helps me a lot specially in my computer science subject..
acoustic_stryper1225 | philippnes_albay - Wed, Aug 3 2011 07:18 GMT
i find this website by Google, for me, a Chinese don't know English well too hard to learn c with English article
i have store this webpage as a bookmark with Firefox
in this can advance someone's C skill
upup
volcanol | china - Tue, Aug 23 2011 13:42 GMT
Where from can i download the C programming language?
siddiq | Ajman, Uae - Sat, Oct 8 2011 08:41 GMT
You folks rock and thank you for providing this info and the Reference Links! I am an SQL kind of Guy and am now learning a real Programming Language, C! Have an outstanding day and I appreciate your generosity with the info you share!!!
dgt279 | Austin, Tx 78617 - Wed, Dec 28 2011 17:12 GMT
I love this site and all it stands for. Always give this link to the new C# programmers at work. Still writing Windows ansi C programs today and still loving it. I am definately an old luddite !!!.
NelloOZ | Melbourne, Australia - Fri, Dec 30 2011 02:38 GMT
Try Digital Mars C/C++ compiler for programming with ANSI C. I've learned WIN32 API with it and it's the simplest C/C++ compiler I've never seen on the Windows Platform. It's freeware.
anonyme | - Sat, Jan 28 2012 17:26 GMT
I enjoyed reading your page. Have been retired from programming for a few years and agree with most of your philosophy. C is for programmers, C++ is for the undisciplined, real programmers use assembly language.
Ernie Hansen | U.S.A - Sun, Mar 4 2012 00:24 GMT
Ernie: Good on you. Real programmers create Hollerith cards with their bare teeth.
Dave | Moderator - Mon, Mar 5 2012 13:40 GMT
YEP!
Ernie Hansen | USA - Fri, Mar 9 2012 21:37 GMT
I've been programming in C since K&R 1, and its great to read this site if only to confirm what I already knew. It's comforting.
Now I teach C, and this URL is going straight into the course.
Real programmers code down to the bare metal. Hollerith cards? Assembler? For wimps! Give me a magnifying glass and a very small magnet.
Clive | Devon, UK - Wed, Apr 4 2012 10:27 GMT
its a very good site about c language, i really want to do alot work on it;thnx alot for providing us this information
Amna nawaz | lahore PAKISTAN - Thu, Apr 12 2012 07:12 GMT
[Go to first comment] [Go to top]
Comments