IOCCC Winners: A Repository for Studying Obfuscated C
Winners of the International Obfuscated C Code Contest
At a glance
- What is it?
- The ioccc-src/winner repository collects winning programs from the International Obfuscated C Code Contest and explains how to inspect, compile, and run them. It is best suited to C programmers studying language behavior and historical contest entries, not developers seeking production code.
- Who is it for?
- Adopt this repository as a learning and historical archive if you want to study unusual C programs and can tolerate old toolchain assumptions. Do not use it as an application dependency or a source of maintainable production code.
- Can I use it commercially?
- Yes, with credit. CC-BY-SA-4.0 allows commercial use as long as you credit the authors and indicate what you changed. It is written for creative content, so check how it applies to any code.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly HTML, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 7, 2026, and from our analysis. They are not legal advice.
Star history
- ioccc-src/winner1,501 ★ · +2
| Repository | 2026-10-16 | 2026-11-07 |
|---|---|---|
| ioccc-src/winner | 1.5k | 1.5k |
2 Stars in the last 22 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
Why ioccc-src/winner Preserves Contest C
ioccc-src/winner is the source archive for winners of the International Obfuscated C Code Contest, whose official site is www.ioccc.org. It solves a narrower problem than an ordinary code repository: it preserves programs deliberately written to be difficult to understand while still meeting contest requirements. The contest began in 1984 with a request for the worst complete C program that could fit in 512 bytes or less. The repository now organizes entries in year-based directories, including 1984 through 2025, with an `archive/` directory and supporting author, FAQ, about, contact, and maintenance files.
The intended audience is primarily C programmers, language students, contest participants, and readers interested in historical programming puzzles. Landon Curt Noll says the contest was designed partly to expose poor coding style and demonstrate how much utility disappears when a program lacks structure. He also identifies an educational purpose: understanding an IOCCC entry can require attention to subtle C language behavior.
That framing matters. These files are examples of satirical programming and contest artifacts, not reusable libraries. Their value lies in the reasoning needed to decode them. A reader who expects clear interfaces, predictable maintenance, or production documentation will find those qualities mostly absent by design.
How the Year-Based IOCCC Archive Is Organized
Based on the repository layout, the default branch stores contest material in directories named for each represented year. The root also contains `archive/`, `author/`, website source files such as `about.html` and `faq.html`, and a `Makefile` for maintainers. The HTML-heavy top level reflects that this is also the source for the official website, not merely a collection of standalone source files.
The README's workflow describes the practical path through an entry. It says to inspect the compilation comments above each program, consult the corresponding `index.html`, and check the entry's Makefile. Many entries have constraints that cannot be inferred from the C source alone. A build may require a simple `#define`, a compiler `-D` option, or a source edit. For Makefile-based entries, the README specifically points maintainers and readers to the `CDEFINE` variable.
This structure keeps the archive connected to its published context. Each entry can carry an index page, build instructions, suggested arguments, judges' remarks, and sometimes hints or spoilers. The repository is therefore more useful as a self-contained contest corpus than as a conventional command-line application.
A First IOCCC Source Inspection with Preprocessing
There is no package installation procedure in the repository instructions because this is a source archive rather than a published software package. Start by obtaining the repository from its source, then select one year directory and open the entry's source file together with its `index.html` and Makefile.
The README recommends visual inspection before compilation. It then gives this preprocessing command for a program named `prog.c`. It removes `#include` lines and passes the remaining source through the C preprocessor, expanding macros without including the headers. The README also says to add any required compilation-line options after `-E`.
sed -e '/^#.*include/d' prog.c | cc -EThe output is preprocessing output, not a normal runnable program. Its purpose is to reduce source-level noise and expose substitutions. If the entry documentation calls for an option such as `-Dindex=strchr`, the README states that this option belongs after `-E`. After preprocessing, it suggests applying a C beautifier or indentation tool, though it warns that heavily twisted entries can confuse such tools or prevent compilation. Manual formatting and selective variable or label renaming may help, but the README warns that renaming can break an entry.
After that, use linting with caution. Messages about unused variables, pointer conversions, and type problems may reveal real mechanisms, although the README warns that some linters can report incorrect errors, abort, or crash. Compile only after checking the entry's exact requirements, then experiment with arguments and input as the documentation permits.
Compiler Semantics and Historical Platform Boundaries
The largest technical constraint is that winning code reflects the compilers and operating systems accepted when each contest was held. The top-level Makefile states plainly that winning entry code may not work on a current system. It also warns that behavior once allowed or liked may no longer compile or run.
Before attempting a build, inspect the comments above the source. The README specifically notes that operating-system differences may require a `#define`, a compiler-level `-D`, or an edit. Older entries may need syntax changes for strict ANSI C compilers. Compiler bugs or language features that were accepted historically can also prevent a successful build.
The repository documents its position more strongly than a typical package: the Makefile says bug fixes, corrections, and typo fixes are welcome, refers readers to `https://www.ioccc.org/bugs.html` for known issues, and accepts GitHub pull requests. That supports preservation work, but it does not guarantee that every entry is portable. An engineer should distinguish a defect in a particular entry from an incompatibility between the entry and the current compiler.
What IOCCC Entries Teach About C
IOCCC's useful contrast with conventional code review is that readability is not the only criterion. The archive makes visible how macros, preprocessing, compact expressions, unusual control flow, and precise assumptions about C behavior can coexist inside a tiny program. The README's suggestion to preprocess and lint before compiling reflects this method: identify substitutions first, then investigate types, variables, and control relationships.
The archive also has an educational boundary. It teaches how C can be manipulated to produce an intended result under particular constraints. It does not establish an engineering practice for writing readable services, libraries, or applications. The contest's own premise treats poor structure as material for satire, so copying an entry's style would contradict its purpose.
For study, the entry index and judges' comments matter as much as the source. The README says those pages may suggest arguments, recommended input, or obfuscation details. Reading them after forming an interpretation can help compare the reader's prediction with the documented intent. Before any edit, preserve the original source, because semantic fixes can easily alter the deliberately constrained behavior under study.
IOCCC Compared with a Maintained C Utility Library
A maintained C utility library is organized around a supported API, documented build options, tests, compatibility expectations, and a release process. ioccc-src/winner has a different approach. Its entries are historical contest submissions with individual `index.html` pages and Makefiles, and its root Makefile warns that some entries may no longer compile or run. The difference is not merely a quality ranking. The repository is an archive of intentionally unconventional programs, while a utility library is intended for reuse by applications.
A library also normally offers a stable public surface. IOCCC does not present its programs as a coherent library API or promise one build command for every year. Entry-specific `CDEFINE` values, source edits, compiler options, and operating system assumptions can determine success. That makes the archive a poor dependency candidate.
The repository is useful when the goal is interpretation. It is the wrong tool when the goal is finding a dependable JSON parser, command-line framework, networking layer, or other production component. The code may demonstrate surprising C techniques, but demonstrating a technique is not the same as supporting downstream maintenance.
License, Maintenance, and Repository Scope
The repository is identified as licensed under Creative Commons Attribution-ShareAlike 4.0, and the Makefile states the same terms for its own text. That license is important when deciding whether entry material can be adapted or redistributed, but the license does not remove the need to preserve attribution, follow the share-alike conditions, and review the exact terms for the file being used.
The repository is not archived. Its last push was on 2026-10-08, and the listed recent release is `IOCCC29-1`, dated 2026-08-11. Those facts indicate recent repository activity, although individual entries may still be old and may not support modern compilers.
The repository's scope is also broader than the winning C files. It contains website and maintenance material, including `Makefile`, scripts under `bin/`, contribution documents, security documentation, and HTML pages. Consumers interested in contest source should ignore much of that infrastructure unless they intend to contribute to the official site.
Editorial conclusion
Adopt this repository as a learning and historical archive if you want to study unusual C programs and can tolerate old toolchain assumptions. Do not use it as an application dependency or a source of maintainable production code. Check the entry's index.html and Makefile first, especially `To build`, `Try`, and `CDEFINE`, because compilation flags and operating system assumptions can decide whether the program runs on your system.
Frequently asked questions
What is the ioccc-src/winner repository for?
It collects winners of the International Obfuscated C Code Contest and preserves the source, year-specific directories, website material, and entry documentation. The README presents the entries as educational and entertaining examples of deliberately obfuscated C.
How do I inspect an IOCCC winning C program?
The README recommends first predicting the output from the source, then preprocessing the program with `cc -E`. It suggests formatting, linting, compilation, and experimentation only after checking the entry's comments, `index.html`, and Makefile for required options or edits.
Will all IOCCC winning programs compile on a current system?
No guarantee is given. The top-level Makefile warns that winning entries may not work on the reader's system and that historical compiler features or platform differences may require changes.
Can I use an IOCCC entry as a production C library?
The repository does not present the entries as a production library or common API. Each program can have entry-specific build instructions, compiler definitions, source assumptions, and platform limitations.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/ioccc-src-winner)Star history chart for your README
[](https://hysenlabs.com/projects/ioccc-src-winner)Was this useful?