Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Small-C
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Subset of a programming language}} {{Distinguish|Small-c conservative}} {{Infobox software | name = Small-C | logo = | developer = Ron Cain, James E. Hendrix | released = {{Start date and age|1980}} | latest release version = | latest release date = | operating system = | genre = [[Compiler]] | programming language = [[C (programming language)|C programming language]] | license = Copyrighted but sharable | website = }} '''Small-C''' is both a subset of the [[C (programming language)|C programming language]], suitable for resource-limited [[microcomputer]]s and [[embedded system]]s, and an implementation of that subset. Originally valuable as an early [[compiler]] for microcomputer systems available during the late 1970s and early 1980s, the implementation has also been useful as an example simple enough for teaching purposes. The original compiler, written in Small-C for the [[Intel 8080]] by Ron Cain, appeared in the May 1980 issue of ''[[Dr. Dobb's Journal]]''. James E. Hendrix improved and extended the original compiler, and wrote ''The Small-C Handbook''. Ron [[Bootstrapping (compilers)|bootstrapped]] Small-C on the [[SRI International]] [[PDP 11]]/45 [[Unix]] system with an account provided by John Bass for Small C development. The provided [[source code]] was released with management permission into the [[public domain]].{{citation needed|date=September 2020}} Small-C was important for tiny computers in a manner somewhat analogous to the importance of [[GNU Compiler Collection|GCC]] for larger computers. Just like its [[Unix-like|Unix]] counterparts, the compiler generates [[assembly language|assembler code]], which then must be translated to [[machine code]] by an available [[assembly language#Assembler|assembler]]. Small-C is a [[retargetable compiler]]. Porting Small-C requires only that the back-end [[code generation (compiler)|code generator]] and the library to operating system interface calls be rewritten for the target processor. == Language subset == {{Over-quotation|section|date=June 2021}} "In May of 1980 Dr. Dobb's Journal ran an article entitled "A Small C Compiler for the 8080s" in which Ron Cain presented a small compiler for a subset of the C language. The most interesting feature of the compiler besides its small size was the language in which it was written—the one it compiled. It was a self-compiler! (Although this is commonplace today, it was a fairly novel idea at the time.) With a simple, one-pass algorithm, his compiler generated assembly language for the 8080 processor. Being small, however, it had its limitations. It recognized only characters, integers, and single dimension arrays of either type. The only loop controlling device was the while statement. There were no Boolean operators, so the bitwise logical operators & (AND) and | (OR) were used instead. But even with these limitations, it was a very capable language and a delight to use, especially compared to assembly language. "Recognizing the need for improvements, Ron encouraged me to produce a second version, and in December 1982 it also appeared in Dr. Dobb's Journal. The new compiler augmented Small C with (1) code optimizing, (2) data initializing, (3) conditional compiling, (4) the extern storage class, (5) the for, do/while, switch, and goto statements, (6) combination assignment operators, (7) Boolean operators, (8) the [[ones' complement]] operator, (9) block local variables, and (10) various other features. Then in 1984 Ernest Payne and I developed and published a CP/M compatible run-time library for the compiler. It consisted of over 80 functions and included most of those in the UNIX C Standard I/O Library—the ones that pertained to the CP/M environment. This became version 2.1 and the subject of The Small C Handbook."<ref>{{cite book |title= A Small-C Compiler: Language, Usage, Theory, and Design|url=https://www.drdobbs.com/developer-network-small-c-compiler-book/184415519?queryText=%2522small%2Bc%2522 |publisher= M & T Books 1988 / Dr. Dobb's Journal Developer Network 2005|chapter=Introduction|author=James E. Hendix}}</ref> Rick Grehan ported Small-C to MS-DOS and [[Macintosh]] in 1988 for a new version of the ''[[BYTE]]'' [[benchmark (computing)|benchmark]]s.<ref name="grehan198807">{{Cite magazine |last=Grehan |first=Rick |date=July 1988 |title=The Pitfalls of Porting |url=https://archive.org/details/byte-1988-07_202104/page/217/mode/1up?view=theater |access-date=2025-04-12 |magazine=[[Byte (magazine)|Byte]] |pages=217-222}}</ref> ==See also== * [[BDS C]] (1979) – C compiler for Z80 and 8080 systems * MISOSYS C (1985) - C compiler for TRS-80 (Z80 CPU) * [[Tiny C Compiler|Tiny C]] (2002) – C compiler for slow x86 and ARM computers having little disk space ===Small-C variants=== * [[Z88DK]] – Cross Small-C implementation for Z80 based microcomputers * [[cc65]] – Cross Small-C implementation for 6502 computers * [[Deep Blue C]] – Small-C for the [[Atari 8-bit computers]] * A.J.Travis – Native Small-C for the [[BBC Micro]]<ref>{{cite web |title=C compilers for the BBC Computer |url=http://mdfs.net/System/C/BBC/ |publisher=Mdfs.net}}</ref> ==References== {{Reflist}} ==Notes== * Ron Cain, "A Small C Compiler for the 8080's", ''[[Dr. Dobb's Journal]]'', April–May 1980, pp. 5–19 * James E. Hendrix, ''The Small-C Handbook'', Reston 1984, {{ISBN|0-8359-7012-4}} * James E. Hendrix, ''A Small C Compiler: Language, Usage, Theory, and Design'', M & T Books 1988, {{ISBN|0-934375-88-7}} * James E. Hendrix, ''Small C Compiler'', M & T Books 1990, {{ISBN|1-55851-124-5}} ==External links== *[http://www.svipx.com/pcc/PCCminipages/zc9b6ec9e.html Comments by Ron Cain on creation of Small-C] *[http://www.cpm.z80.de/small_c.html Several implementations of Small-C] *[http://mdfs.net/System/C/BBC/ Native compiler for the BBC Computer] *[http://twimgs.com/ddj/sdmediagroup/images/sdm1123195158574/ddj_devnetwork_small_c.zip Dr. Dobb's Small-C Resource CDROM iso-image download] {{Authority control}} [[Category:C programming language family]] [[Category:1980 software]] [[Category:C (programming language) compilers]] [[Category:CP/M software]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Authority control
(
edit
)
Template:Citation needed
(
edit
)
Template:Cite book
(
edit
)
Template:Cite magazine
(
edit
)
Template:Cite web
(
edit
)
Template:Distinguish
(
edit
)
Template:ISBN
(
edit
)
Template:Infobox
(
edit
)
Template:Infobox software
(
edit
)
Template:Main other
(
edit
)
Template:Over-quotation
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Template other
(
edit
)