C专家编程第五天

来源:互联网 发布:网络情歌大全在线播放 编辑:程序博客网 时间:2024/06/05 02:22

 typedef int x[10] 和 #define x int[10]的区别

1、可以对宏类型进行扩展,但是对typedef不能。

 #define APP_INT int[10]

unsigned APP_INT i; //没有问题 

2、在连续几个变量的声明中,用typedef定义的类型能够保证声明中所有的变量均为同一种类型,而用#define定义的类型无法保证。

typedef char *  CHAR_PTR;

CHAR_PTR buf_out, buf_in; //没有问题,buf_out和buf_in是同一种类型


typedef char * STRING; //用STRING表示char*类型

typedef void(*ptr_to_func) (int); //用ptr_to_func表示一个类型,该类型是指针类型,该指针指向一个参数为int,返回为void的函数。


C语言声明的例子,从C语言声明的优先级规则 ->C语言声明解析图 ->伪代码 ->代码。

每一步都逐渐深入和清晰

编程方案:

Struct token { char type;

Char string[MAXTOKENLEN];

}

//保存第一个标识之前的所有标记

Struct token stack[MAXTOKENS];

 

//保存刚读入的那个标记

Struct token this;

 

伪码:

Classify_string (字符串分类)

     查看当前的标记

     通过this.type返回一个值

Gettoken(取标记)

把下一个标记读入this.string

    如果是字母数字组合,调用classify_string

    否则,它必是一个单字符标记,this.type=该标记,用一个NUL结束this.string

Read_to_first_identifier (读至第一个标识)

   调用gettoken,并把标记压入到堆栈中,直到遇见第一个标识符

   打印标识符

   继续调用gettoken

 

解析程序:

Deal_with_function_args 处理函数参数

     当读取越过右括号 “)”后,打印“函数返回”

Deal_with_arrays 处理函数数组

     当你读取[size]后,将其打印并继续向右读取。

Deal_with_any_pointers 处理任何指针

     从堆栈读取*时,打印

Deal_with_declarator 处理声明器

If this.type is‘[‘   deal_with_arrays

If this.type is‘(‘   deal_with_function_args

Deal_with_any_pointers

 

With 堆栈里还有东西

  If 他是一个左括号 ‘(‘                

  将其弹出堆栈,并调用gettoken; 应该获得右括号‘(’

  Deal_with_declarator

  Else

     将其弹出堆栈并打印它


0 0
原创粉丝点击