DEC C
Language Reference Manual


Previous Contents Index

Time Manipulation Functions

clock_t clock(void);

double difftime(time_t time1, time_t time0);

time_t mktime(struct tm *timeptr);

time_t time(time_t *timer);


Appendix A
Language Syntax Summary

This section summarizes the syntax of the C language, using the syntax of the ANSI C Standard. Syntactic categories are indicated with bold type, and literal words or characters are indicated with monospaced, nonitalicized type. A colon following a syntactic category introduces its definition. Alternative definitions are listed on separate lines, or are prefaced by the words "one of." An optional element is indicated by the subscript opt. For example, the following line indicates an optional expression enclosed in braces:

{ expressionopt }

The section numbers shown in parentheses refer to the section of the American National Standard for Information Systems-Programming Language C (document number: X3.159-1989) that discusses that part of the language.

A.1.1 Lexical Grammar

A.1.1.1 Tokens

token: (§3.1)

  • keyword
  • identifier
  • constant
  • string-literal
  • operator
  • punctuator

preprocessing-token: (§3.1)

  • header-name
  • identifier
  • pp-number
  • character-constant
  • string-literal
  • operator
  • punctuator
  • each nonwhite-space character that cannot be one of the above

A.1.1.2 Keywords

keyword: (§3.1.1) one of


    auto        double      int         struct 
    break       else        long        switch 
    case        enum        register    typedef 
    char        extern      return      union 
    const       float       short       unsigned 
    continue    for         signed      void 
    default     goto        sizeof      volatile 
    do          if          static      while 

A.1.1.3 Identifiers

identifier: (§3.1.2)

  • nondigit
  • identifier nondigit
  • identifier digit

nondigit: §3.1.2 one of


    a  b  c  d  e  f  g  h  i  j  k  l  m 
    n  o  p  q  r  s  t  u  v  w  x  y  z 
    A  B  C  D  E  F  G  H  I  J  K  L  M 
    N  O  P  Q  R  S  T  U  V  W  X  Y  Z  _ 

digit: (§3.1.2) one of


    0  1  2  3  4  5  6  7  8  9 

A.1.1.4 Constants

constant: (§3.1.3)

  • floating-constant
  • integer-constant
  • enumeration-constant
  • character-constant

floating-constant: (§3.1.3.1)

  • fractional-constant exponent-partopt floating-suffixopt
  • digit-sequence exponent-part floating-suffixopt

fractional-constant: (§3.1.3.1)

  • digit-sequenceopt . digit-sequence
  • digit-sequence .

exponent-part: (§3.1.3.1)

  • e signopt digit-sequence
  • E signopt digit-sequence

sign: (§3.1.3.1) one of

  • + --

digit-sequence: (§3.1.3.1)

  • digit
  • digit-sequence digit

floating-suffix: (§3.1.3.1) one of

integer-constant: (§3.1.3.2)

  • decimal-constant integer-suffixopt
  • octal-constant integer-suffixopt
  • hexadecimal-constant integer-suffixopt

decimal-constant: (§3.1.3.2)

  • nonzero-digit
  • decimal-constant digit

octal-constant: (§3.1.3.2)

  • 0
  • octal-constant octal-digit

hexadecimal-constant: (§3.1.3.2)

  • 0x hexadecimal-digit
  • 0X hexadecimal-digit
  • hexadecimal-constant hexadecimal-digit

nonzero-digit: (§3.1.3.2) one of


    1  2  3  4  5  6  7  8  9 

octal-digit: (§3.1.3.2) one of


    0  1  2  3  4  5  6  7 

hexadecimal-digit: (§3.1.3.2) one of


    0  1  2  3  4  5  6  7  8  9 
    a  b  c  d  e  f 
    A  B  C  D  E  F 

integer-suffix: (§3.1.3.2)

  • unsigned-suffix long-suffixopt
  • long-suffix unsigned-suffixopt

unsigned-suffix: (§3.1.3.2) one of

long-suffix: (§3.1.3.2) one of

enumeration-constant: (§3.1.3.3)

  • identifier

character-constant: (§3.1.3.4)

  • ' c-char-sequence'
  • L' c-char-sequence'

c-char-sequence: (§3.1.3.4)

  • c-char
  • c-char-sequence c-char

c-char: (§3.1.3.4)

  • any member of the source character set except
    the single-quote ('), backslash (\), or new-line character
  • escape-sequence

escape-sequence: (§3.1.3.4)

  • simple-escape-sequence
  • octal-escape-sequence
  • hexadecimal-escape-sequence

simple-escape-sequence: (§3.1.3.4) one of


    \'  \"  \?  \\
    \a  \b  \f  \n  \r  \t  \v 

octal-escape-sequence: (§3.1.3.4)

  • \ octal-digit
  • \ octal-digit octal-digit
  • \ octal-digit octal-digit octal-digit

hexadecimal-escape-sequence:(§3.1.3.4)

  • \x hexadecimal-digit
  • hexadecimal-escape-sequence hexadecimal-digit

A.1.1.5 String Literals

string-literal: (§3.1.4)

  • "s-char-sequenceopt"
  • L"s-char-sequenceopt"

s-char-sequence: (§3.1.4)

  • s-char
  • s-char-sequence s-char

s-char: (§3.1.4)

  • any member of the source character set except
    the double-quote ("), backslash (\), or new-line character
  • escape-sequence

A.1.1.6 Operators

operator: (§3.1.5) one of


    [  ]  (  )  .  -> 
    ++  --  &  *  +  -  ~  !  sizeof 
    /  %  <<  >>  <  >  <=  >=  ==  !=  ^  |  &&  || 
    ?  : 
    =  *=  /=  %=  +=  -=  <<=  >>=  &=  ^=  |= 
    ,  #  ## 

A.1.1.7 Punctuators

punctuator: (§3.1.6) one of


    [  ]  (  )  {  }  *  ,  :  =  ;  ...  # 

A.1.1.8 Header Names

header-name: (§3.1.7)

  • <h-char-sequence>
  • "q-char-sequence"

h-char-sequence: (§3.1.7)

  • h-char
  • h-char-sequence h-char

h-char: (§3.1.7)

  • any member of the source character set except
    the new-line character and >

q-char-sequence: (§3.1.7)

  • q-char
  • q-char-sequence q-char

q-char: (§3.1.7)

  • any member of the source character set except
    the new-line character and "

A.1.1.9 Preprocessing Numbers

pp-number: (§3.1.8)

  • digit
  • . digit
  • pp-number digit
  • pp-number nondigit
  • pp-number e sign
  • pp-number E sign
  • pp-number .

A.1.2 Phrase Structure Grammar

A.1.2.1 Expressions

primary-expression: (§3.3.1)

  • identifier
  • constant
  • string-literal
  • ( expression )

postfix-expression: (§3.3.2)

  • primary-expression
  • postfix-expression [ expression ]
  • postfix-expression ( argument-expression-listopt )
  • postfix-expression . identifier
  • postfix-expression -> identifier
  • postfix-expression ++
  • postfix-expression - -

argument-expression-list: (§3.3.2)

  • assignment-expression
  • argument-expression-list , assignment-expression

unary-expression: (§3.3.3)

  • postfix-expression
  • ++ unary-expression
  • - - unary-expression
  • unary-operator cast-expression
  • sizeof unary-expression
  • sizeof ( type-name )

unary-operator: (§3.3.3) one of


    &  *  +  -  ~  ! 

cast-expression: (§3.3.4)

  • unary-expression
  • ( type-name ) cast-expression

multiplicative-expression: (§3.3.5)

  • cast-expression
  • multiplicative-expression * cast-expression
  • multiplicative-expression / cast-expression
  • multiplicative-expression % cast-expression

additive-expression: (§3.3.6)

  • multiplicative-expression
  • additive-expression + multiplicative-expression
  • additive-expression - multiplicative-expression

shift-expression: (§3.3.7)

  • additive-expression
  • shift-expression << additive-expression
  • shift-expression >> additive-expression

relational-expression: (§3.3.8)

  • shift-expression
  • relational-expression < shift-expression
  • relational-expression > shift-expression
  • relational-expression <= shift-expression
  • relational-expression >= shift-expression

equality-expression: (§3.3.9)

  • relational-expression
  • equality-expression :=,= relational-expression
  • equality-expression != relational-expression

AND-expression: (§3.3.10)

  • equality-expression
  • AND-expression & equality-expression

exclusive-OR-expression: (§3.3.11)

  • AND-expression
  • exclusive-OR-expression ^ AND-expression

inclusive-OR-expression: (§3.3.12)

  • exclusive-OR-expression
  • inclusive-OR-expression | exclusive-OR-expression

logical-AND-expression: (§3.3.13)

  • inclusive-OR-expression
  • logical-AND-expression && inclusive-OR-expression

logical-OR-expression: (§3.3.14)

  • logical-AND-expression
  • logical-OR-expression || logical-AND-expression

conditional-expression: (§3.3.15)

  • logical-OR-expression
  • logical-OR-expression ? expression : conditional-expression

assignment-expression: (§3.3.16)

  • conditional-expression
  • unary-expression assignment-operator assignment-expression

assignment-operator: (§3.3.16) one of


    =  *=  /=  %=  +=  -=  <<=  >>=  &=  ^=  |= 

expression: (§3.3.17)

  • assignment-expression
  • expression , assignment-expression

constant-expression: (§3.4)

  • conditional-expression

A.1.2.2 Declarations

declaration: (§3.5)

  • declaration-specifiers init-declarator-listopt ;

declaration-specifiers: (§3.5)

  • storage-class-specifier declaration-specifiersopt
  • type-specifier declaration-specifiersopt
  • type-qualifier declaration-specifiersopt

init-declarator-list: (§3.5)

  • init-declarator
  • init-declarator-list , init-declarator

init-declarator: (§3.5)

  • declarator
  • declarator = initializer

storage-class-specifier: (§3.5.1)

  • typedef
  • extern
  • static
  • auto
  • register

type-specifier: (§3.5.2)

  • void
  • char
  • short
  • int
  • long
  • float
  • double
  • signed
  • unsigned


  • struct-or-union-specifier
  • enum-specifier
  • typedef-name

struct-or-union-specifier: (§3.5.2.1)

  • struct-or-union identifieropt { struct-declaration-list }
  • struct-or-union identifier

struct-or-union: (§3.5.2.1)

  • struct
  • union

struct-declaration-list: (§3.5.2.1)

  • struct-declaration
  • struct-declaration-list struct-declaration

struct-declaration: (§3.5.2.1)

  • specifier-qualifier-list struct-declarator-list ;

specifier-qualifier-list: (§3.5.2.1)

  • type-specifier specifier-qualifier-listopt
  • type-qualifier specifier-qualifier-listopt


Previous Next Contents Index