GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Chess Programming Wiki
  • All pages
  • Other namespaces
  • Categories
  • Credits

This view

  • Original page
  • New address

GeezerVison is showing chessprogramming.org — C - Chess Programming Wiki

C

Home * Programming * Languages * C

The C Programming Language 1The C Programming Language 1


  1. The cover to the book, Brian W. Kernighan, Dennis M. Ritchie (1978, 1988). The C Programming Language. First Edition↩︎

C,
a pragmatical, general purpose, block structured, procedural, imperative programming language. C was developed in 1972 by Dennis Ritchie at the Bell Laboratories. It was first intended as a system programming language for the Unix operating system, but has spread to many other platforms and application programming as well. C and its derivations are likely the most often used languages so far for computer chess programming.

Contents
  1. Revisions
  2. See also
  3. Data
    1. Data Types
      1. Basic Data Types
      2. Pointer
      3. Array
      4. Struct
      5. Bitfield
      6. Union
    2. Variables
  4. Instructions
    1. Expressions
    2. Functions
    3. Operators
    4. Control Flow
      1. Goto
      2. If else
      3. Switch case
      4. Function Pointer
      5. For
      6. While
      7. Do while
  5. Preprocessor
  6. Portabilty
  7. Libraries
  8. C and C++ Compiler
  9. Publications
    1. 1978 ...
    2. 2010 ...
  10. Forum Posts
    1. 1999
    2. 2000 ...
    3. 2005 ...
    4. 2010 ...
    5. 2015 ...
    6. 2020 ...
  11. External Links
  12. References

Revisions

Due to explicit pointers (address of a variable or function), C might be considered as a high level assembly language, and has some weak spots in its initial design and implementation, which are addressed in

  • ANSI C from Wikipedia
  • C99 from Wikipedia
  • C11 (C standard revision) from Wikipedia
  • C18 (C standard revision) from Wikipedia

See also

  • CFish
  • C++
  • C#
  • D (Programming Language)
  • Go (Programming Language)
  • Java

Data

Data Types

C data types are declarations for memory locations for basic and compound data.

Basic Data Types

The C language provides the four basic arithmetic type specifiers char, int, float and double, and the modifiers signed, unsigned, short and long. C99 added a boolean (true/false) type _Bool.

To be aware of the scalar 64-bit origin of bitboards in computer chess, we use so far a type defined unsigned integer U64 in our C and C++ source snippets. The macro C64 will append a suffix to 64-bit constants as required by some compilers:

typedef unsigned __int64 U64;    // for the old microsoft compilers
typedef unsigned long long  U64; // supported by MSC 13.00+ and C99
#define C64(constantU64) constantU64##ULL

Pointer

A pointer is a data type that contains the address of a storage location of a variable (or function). They are declared with the asterisk (*) type declarator following the basic storage type and preceding the variable name of the pointer.

int * ptr2int;

Array

An array is a collection of values, all of the same type, stored contiguously in memory. An array of size N is indexed by integers from 0 up to and including N−1.

unsigned int moves[256];
char *pc[10];  /* array of 10 elements of 'pointer to char' */
char (*pa)[10]; /* pointer to a 10-element array of char */

In C, array indexing is formally defined in terms of pointer arithmetic; that is, the language specification requires that array[i] be equivalent to *(array + i).

Struct

A structure in C refers to Object composition to encapsulate related scalar datatypes inside one structured item. The size of the structure is the sum of its element sizes. To access the structure elements the dot-operator separates the element from the variable or reference. Pointers require arrow operator.

struct MOVE
{
  char from;
  char to;
};

...
MOVE m, a, *b;
m.from = square;
...
if ( a.from == b->to )

Bitfield

So called Bitfields might be implemented as structure where integer members are declared with explicit bit length specifier from 1 .. 31. However due to portability issues of various C-compilers and platforms concerning bit ordering, padding and eventually the sign, most programmer rely on explicit bitfields to composite and extract sub-items by shift and masks, i.e. in encoding moves.

struct DoubleLayout
{
  unsigned int mantissal : 32;
  unsigned int mantissah : 20;
  unsigned int exponent : 11;
  unsigned int sign : 1;
};

Union

A value that may have any of several representations within the same position in memory.

union BitBoard 
{
  U64 qw;
  U32 dw[2];
};

Variables

Variables are stored either in various memory areas or kept inside processor registers (if not referred by a pointer) as:

  • Global or Static Variable in static memory
  • Local Variable as Automatic Variable on the Stack]
  • Local Variable as Automatic Variable inside a Processor Register
  • Dynamic memory allocation on the Heap

Instructions

Expressions

An expression in a programming language is a combination of one or more constants, variables, operators, and functions.

Functions

  • C mathematical functions from Wikipedia

Operators

  • Assignment =
  • Arithmetical +, -, *, /, %, ++, --
  • Bitwise &, |, ^, ~, >>, <<
  • Augmented assignment +=, -=. *=, /=, %=, &=, |=, ^=, <<=, >>=
  • Relational ==, <, >, <=, >=, !=
  • Boolean !, &&, ||
  • [https://en.wikipedia.org/wiki/%3F: Conditional] ?:
  • Comma ,
  • sizeof

Control Flow

  • Control flow from Wikipedia

Goto

  • Goto from Wikipedia
  • Considered harmful from Wikipedia1 2 3 4 5 6
  • Using gotos by Steve McConnell 7

If else

  • Conditional (computer programming) from Wikipedia

Switch case

  • Switch statement from Wikipedia

Function Pointer

  • Function pointer from Wikipedia

For

  • For loop from Wikipedia

While

  • While loop from Wikipedia

Do while

  • Do while loop from Wikipedia
  • The amazing Duff's Device by Tom Duff
  • Duff's Device from Wikipedia
send(to, from, count)
  register short *to, *from;
  register count;
  {
    register n=(count+7)/8;
    switch(count%8){
    case 0: do{ *to = *from++;
    case 7:     *to = *from++;
    case 6:     *to = *from++;
    case 5:     *to = *from++;
    case 4:     *to = *from++;
    case 3:     *to = *from++;
    case 2:     *to = *from++;
    case 1:     *to = *from++;
        } while(--n > 0);
    }
  }

Preprocessor

  • C preprocessor from Wikipedia

Portabilty

  • Two's Complement
  • sizeof
  • shift
  • Endianness

Libraries

  • C standard library (libc)

C and C++ Compiler

A C-Compiler is used to translate the source program, usually ascii-text files with the extension .C, to so called object files, containing machine instructions. A linker binds all the object files together with libraries containing external functions (and data) to build an executable program.

  • AMD Optimizing C/C++ Compiler
  • Clang
  • CompCert
  • GNU C Compiler
  • Intel C++
  • Interactive C
  • LCC (compiler)
  • Microsoft Visual C++
  • Pelles C
  • Tiny C Compiler

Publications

1978 ...

  • Brian W. Kernighan, Dennis M. Ritchie (1978, 1988). The C Programming Language. First Edition ISBN 0-13-110163-3, Second Edition ISBN 0-13-110362-8
  • Andrew Koenig (1989). C Traps and Pitfalls. Addison-Wesley, pdf preprint
  • Patrick Winston (1994). On To C. On-Line
  • Andrew Appel, Maia Ginsburg (1998). Modern Compiler Implementation in C. Cambridge University Press
  • Erik D. Demaine (1998). C to Java: Converting Pointers into References. Concurrency: Practice and Experience, Vol. 10, Nos. 11-13

2010 ...

  • Robert C. Seacord (2010). Dangerous Optimizations and the Loss of Causality. CS 15-392 © 2010 Carnegie Mellon University, slides as pdf
  • Xi Wang, Haogang Chen, Alvin Cheung, Zhihao Jia, Nickolai Zeldovich, M. Frans Kaashoek (2012). Undefined Behavior: What Happened to My Code? pdf
  • Will Dietz, Peng Li, John Regehr, Vikram Adve (2012). Understanding Integer Overflow in C/C++. pdf

Forum Posts

1999

  • C or C++ for chess programming: speed by Marc-Philippe Huget, CCC, October 20, 1999

2000 ...

  • One (silly) question about "C" by Antonio Senatore, CCC, February 05, 2002

2005 ...

  • Re: chess engines writen in C by Dann Corbit, CCC, January 13, 2005
  • ansi-C question by Vincent Diepeveen, CCC, June 08, 2008
  • setjmp() - another one by Chris Whittington, CCC, August 27, 2008
  • kbhit() taking huge CPU?? by John Merlino, CCC, April 01, 2009 » Thread
  • Critter: Pascal vs C by Richard Vida, CCC, August 27, 2009 » Pascal

2010 ...

  • MSVC calloc question by Harm Geert Muller, CCC, March 17, 2011
  • My experience with Linux/GCC by Richard Vida, CCC, March 23, 2011 » Linux
  • a cautionary tale about simple-looking macros by Wylie Garvin, CCC, July 03, 2011
  • c or c++ ? by ethan ara, CCC, July 10, 2011
  • VisualStudio - __fastcall instead of __cdecl? by Martin Sedlak, CCC, June 18, 2012
  • C vs ASM by Ed Schröder, CCC, March 05, 2013 » Assembly
  • Re: goto thread (split) by Steven Edwards, CCC, August 01, 2013 » Iterative Search, Symbolic
  • A note for C programmers by Robert Hyatt, CCC, November 23, 2013

Re: A note for C programmers by Rein Halbersma, CCC, November 28, 2013

  • A note on strcpy by User923005, OpenChess Forum, November 26, 2013
  • strcpy() revisited by Robert Hyatt, CCC, December 08, 2013

2015 ...

  • Using more than 1 thread in C beginner question by Uri Blass, CCC, January 11, 2016 » Thread
  • C programming style question by Michael Sherwin, CCC, January 19, 2016
  • Crafty c questions by J. Wesley Cleveland, CCC, March 10, 2016 » Crafty
  • I'm not very happy with the do {} while() statement in C by Michael Sherwin, CCC, February 18, 2018
  • Writing bugs by Ed Schröder, CCC, January 06, 2019

2020 ...

  • Java vs C. It's not like one would think by Oliver Brausch, CCC, June 22, 2020 » OliThink, Java

External Links

  • C from Wikipedia
  • C Programming - Wikibooks
  • The C Book - Table of Contents, an online version of the popular introduction and reference on the ANSI Standard C programming language
  • Programming Bits by Paul Hsieh
  • comp.lang.c Discussion about C
  • comp.lang.c Frequently Asked Questions
  • Chess Engine In C - YouTube Videos by BlueFeverSoft » Vice
  • How to C in 2016

References

Up one Level


  1. Edsger Dijkstra (1968). Go To Statement Considered Harmful. Communications of the ACM, Vol. 11, No. 3, pdf↩︎

  2. William A. Wulf (1971). Programming Without the GOTO. IFIP, Ljubljana, Yugoslavia, August 1971↩︎

  3. William A. Wulf (1972). A Case Against the GOTO. Proceedings of the ACM National Conference, Boston, August 197↩︎

  4. Donald Knuth (1974). Structured Programming with go to Statements. ACM Computing Surveys, Vol. 6, No. 4, pdf↩︎

  5. Ward Douglas Maurer (1996). Attitudes toward the go-to statement (or, hydrogen considered harmful). Computers & Education, Vol. 26, No. 4↩︎

  6. Coding Horror: I'd Consider That Harmful, Too by Jeff Atwood, October 25, 2007↩︎

  7. Steve McConnell (1993). Code Complete: A Practical Handbook of Software Construction. Microsoft Press↩︎

What links here

Contributors: GerdIsenberg.

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.