Lesson 1 What is the simplest C program? 最简单的C程序

代码

int main(void)
{
    return 0;
}
copy

知识点

  • 数据类型 int
  • 函数名 main
  • 参数(列表) void
  • 返回值 return

C语言 BNF 范式分析

int main(void)
{
    return 0;
}

类型声明 声明符
 int     main(void)
 
复合语句: { 语句 }
{ return 0; }

-------------> translation_unit 翻译单元

translation_unit    : external_decl
翻译单元          外部声明

external_decl        : function_definition
外部声明          函数定义

function_definition    : decl_specs  declarator  compound_stat
函数定义          声明说明符  声明符      复合语句
            
decl_specs        : type_spec
声明说明符          类型说明符

type_spec        : 'void' | 'char' | 'short' | 'int' | 'long' | 'float'
类型说明符          

-------------> void    类型声明

declarator        : direct_declarator
声明符              直接声明符

direct_declarator    : id        标识符
直接声明符        | '(' declarator ')'        ' 声明符 '
            | direct_declarator '[' const_exp ']'        直接声明符 [常量表达式]
            | direct_declarator '['        ']'        直接声明符 []
            | direct_declarator '(' param_type_list ')'    直接声明符 (形式参数类型表)
            | direct_declarator '(' id_list ')'        直接声明符 (标识符表)
            | direct_declarator '('        ')'        直接声明符 ()

-------------> main( param_type_list )    函数声明符

param_type_list        : param_list        形式参数表
形式参数类型表        | param_list ',' '...'    形式参数表, ...
            ;
            
param_list        : param_decl        形式参数声明
形式参数表        | param_list ',' param_decl    形式参数表, 形式参数声明

param_decl        : decl_specs declarator        声明说明符 声明符    
形式参数声明        | decl_specs abstract_declarator 声明说明符 抽象声明符
            | decl_specs             声明说明符
            ;

decl_specs        : storage_class_spec decl_specs    存储类说明符 声明说明符
声明说明符        | storage_class_spec        存储类说明符
            | type_spec decl_specs        类型说明符 
            | type_spec            类型说明符
            | type_qualifier decl_specs    类型限定符 声明说明符 
            | type_qualifier        类型限定符    
            ;

--------------> void 参数类型列表

compound_stat        : '{' decl_list stat_list '}'    { 声明表 语句表 }
复合语句        

--------------> { return 0; }    复合语句

stat_list        : stat        语句
语句表            | stat_list stat    语句表 语句

stat            : labeled_stat        带标号语句
语句            | exp_stat        表达式语句
            | compound_stat        复合语句
            | selection_stat    选择语句
            | iteration_stat    循环语句
            | jump_stat        跳转语句

jump_stat        : 'goto' id ';'        goto 标识符;
跳转语句        | 'continue' ';'    continue;    
            | 'break' ';'        break;
            | 'return' exp ';'    return 表达式;
            | 'return'    ';'    return
            ;

--------------> return 0;  跳转语句
copy

扩展

/* this is the simplest c program */

int global = 1;

int main(void)
{
    int local = 2;

    // we return these two varible' summary 
    return local + global;
}
copy

知识点

参考资料