易截截图软件、单文件、免安装、纯绿色、仅160KB

可变目标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;
         &


相关文档:

DAY3|编个"hello world"的C程序先~

今天要编个最简单的"hello world"的C程序,算是初步感受下Linux中的编程环境,涉及以下3个步骤:
1. 先在"vim"里编写源文件;
2. 然后再用"gcc"编译生成"hello"的可执行文件;
3. 运行"hello",看看效果。
那么开始吧!
1. vim
vim hello.c
i
#include <stdio.h>
int
main (void)
{
printf ("hello.\n" ......

s3c2440基于linux的gpio led字符设备驱动实践

 今天完成了嵌入式linux的第一个驱动的编写和测试,虽然是个简单的程序,但是麻雀虽小,五脏俱全,希望可以给刚开始接触驱动编写的人一些提示,共同进步。
源代码:
分析如下:
      下面是我的驱动程序:
#include <linux/config.h>//配置头文件
#include <linux/kernel.h&g ......

c获得文件大小

 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 ......

如何理解C和C++的复杂类型声明


    曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。
  我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的&ld ......

经典c/c++算法

二分查找的代码.
int bfind(int* a,int len,int val)
{
    int m = len/2;
    int l = 0;
    int r = len;
    while(l!=m && r!= m)
    {
        if(a[m] > val)
  & ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号