下面一段程序的执行结果是: #include <stdio.h>#define CHAR2 char*int main(){    typedef char* CHAR;    CHAR a,b;    CHAR2 c,d;    printf("%d,%d,%d,%d\n",sizeof a,sizeof b,sizeof c,sizeof d);    return 0;}    答案是:4,4,4,1 因为用define定义的别名只是简单的替换,如果是像上面那样的字符…
定义: 可以用typedef声明一个新的类型名来代替已有的类型名. 用法: typedef int INTEGER;//指定用标识符INTEGER代表int类型 typedef float REAL;//指定用标识符代表float类型 然后 INTEGER a; REAL b; 与语句 int a; float b; 是等价的. 也可以用来声明结构体类型: typedef struct { int month; int day; int year; }DATE; 所声明的新类型名DATE代表上面…
久而久之,发现c/c++的typedef给类型自定义别名的语法糖就保证设计的一致性而言,确实是个相当不错的特性,跟oracle pl/sql的rowtype或type一样,可惜java.mysql均不支持.…
一.#define #define 是宏定义命令,宏定义就是将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替,是预编译命令,因此会在预编译阶段被执行 1.无参宏定义 无参宏的宏名后不带参数 其定义的一般形式为: #define  标识符  字符串 其中的"#"表示这是一条预处理命令.凡是以"#"开头的均为预处理命令."define"为宏定义命令."标识符"为所定义的宏名."字符串"可以…
关于typedef  我们学习typedef的时候,他的定义语法是:typedef+类型+别名,但是按照上面的格式,自定义数组怎么定义呢,是这样tepedef int a[10] 别名?还是这样tepedef int 别名 a[10] ?最近学了自定义block,是这样typedef void (^别名)();还是这样typedef void (^)() 别名;最后还是这样typedef void (^别名)();我就有疑惑这不符合以前的语法呀. 我查了一些资料,国内的大部分书是这样的定义格式:…
在iOS开发中经常遇到一些字段和类型的定义,例如配置生产和测试不同环境的参数等,这时候经常用到#define.const以及typedef.那么它们之间有什么区别呢?我们接下来一个一个具体了解下. 一.基本概念 1.1.#define #define并不是定义全局变量,而是宏定义.也就是说并不是真正意义上的定义变量,而是用来做文本替换.当程序开始运行时,编译器会先将代码中的MAX全部替换为100,然后再进行编译.由此可得,#define并不是在编译过程中进行,而是在预编译阶段进行. #defin…
#define.const.typedef的区别 #define 并不是定义变量, 只是用来做文本替换 例如: #define PI 3.1415926 float angel; angel=30*PI/180; 那么,当程序进行编译的时候,编译器会首先将 “#define PI 3.1415926”以后的,所有代码中的“Pi”全部换成 “3.1415926” 然后再进行编译. 我查到一个讲const与#define的差别的帖子,里面谈到const与#define最大的差别在于:前者在堆栈分配了…
typedef 声明: 使用 typedef 为一个已有的类型取一个新的名字.下面是使用 typedef 定义一个新类型的语法: typedef type newname; 例如,下面的语句会告诉编译器,feet 是 int 的另一个名称: typedef int feet; 现在,下面的声明是完全合法的,它创建了一个整型变量 distance: feet distance;…
前言: 什么叫做:声明变量是求值过程?请看下面的声明, int i; 很简单,声明了个整型变量i,再看如下声明, int *p; 也很简单,立刻反应出来它是指向整型的指针,但是具体如何推倒出来的呢?其实在C语言中,变量的声明就是一种求值过程,把*p这部分声明看成表达式,对这个表达式的求值的结果是int类型,这样就可以倒推出p是指针整型的指针了,因为只有对指向整型的指针进行解引用操作才是整型类型!还有很多复杂的声明,都可以使用这种方法求其具体的类型. 下面让我们来验证typedef定义的新类型和普…