可变目标C编译器 第4章 类型
C程序中具有丰富的数据类型,包括声明中显式定义的类型和用做表达式中间类型的导出类型。例如,下面的赋值语句包含3 种不同类型:
int *p, x;
*p = x;
x是一个存放整数的单元的地址,因此x的地址的类型是:指向一个整数的指针。x的值的类型是整型。同样, p的左值的类型是指向一个整数的指针的指针,p的右值的类型是指向一个整数的指针,*p的类型是整数。lcc在编译赋值语句时必须处理所有这些类型。
lcc实现了类型表示和一组该表示之上的函数,本章将对此进行介绍。函数包括创建类型的类型构造函数以及测试类型 的类型断言函数。lcc还必须实现类型检查,确保声明和表达式遵守语言制定的规则。类型检查使用本章介绍的断言函数,详细参见第9章和第11章。
4.1 类型表示
C语言的类型通常用英文的前缀形式描绘,所谓前缀形式,就是指类型操作数在类型操作符之后出现。例如,int *p声明p是一个指向int的指针,就是C类型int*的前缀表示,指针是操作符,int是操作数,同样,char*(*strings)[10]将strings说明为:
一个指针,指向
一个大小为10的数组,每个数组元素是一个
指针,指向
字符
操作数在它们各自的操作符下以阶梯方式缩进。
表示这种前缀类型规范的方法有很多。例如,一些老的C编译器使用位串来表示,类型操作符和基本类型用若干位编码。位串表示非常紧凑并易于操作,但是一般会对基本和操作符的数目做一定限制,并且不能拥有表示大小的数据,例如不能表示数组的大小。
lcc 通过能反映类型的前缀规范的链接结构来表示类型,类型节点定义如下:
(types.c typedefs) =
typedef struct type * Type;
(types.c exported types) =
struct type {
int op;
Type type;
int align;
int size;
&
相关文档:
如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复。
一家之言,欢迎拍砖哈。
1、可以考虑先学习C.
大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而是希望成为一个解决问题的专家。做一个有用的程序员,做一个赚钱的程序员。我们的价值,将体现在客户价值上,而不是语 ......
今天完成了嵌入式linux的第一个驱动的编写和测试,虽然是个简单的程序,但是麻雀虽小,五脏俱全,希望可以给刚开始接触驱动编写的人一些提示,共同进步。
源代码:
分析如下:
下面是我的驱动程序:
#include <linux/config.h>//配置头文件
#include <linux/kernel.h&g ......
1.MFC中的方法:(C++)
CFileStatus status;
CFile::GetStatus("D:\\test.txt",status);
long lSizeOfFile;
lSizeOfFile = status.m_size;
lSizeOfFile的值就是D:\\test.txt文件的大小
2.标准C获得文件大小的5种方法
(注意:"__FILE__"指的是当前文件,你可以改为有效路径的目标文件,比如"D:\\test.txt")
#i ......
操作系统的一个经典问题是"生产者-消费者"问题, 这涉及同步信号量和互斥信号量的应用, 在这里,我用线程的同步和互斥来实现.
/*
* author 张文
* 2008/06/20
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h> ......
Data Type Ranges
C/C++ recognizes the types shown in the table below.
Type Name Bytes Other Names Range of Values
&nb ......