define 订阅
define,宏定义,C语言中预处理命令一种。分为无参宏定义和带参宏定义。无参宏定义的一般形式为:#define 宏名 字符串;带参宏定义的一般形式为:#define 宏名(参数表) 字符串;PHP中define 函数定义一个常量。常量类似变量,不同之处在于:在设定以后,常量的值无法更改。常量名不需要开头的美元符号 ($)。作用域不影响对常量的访问 。常量值只能是字符串或数字。 展开全文
define,宏定义,C语言中预处理命令一种。分为无参宏定义和带参宏定义。无参宏定义的一般形式为:#define 宏名 字符串;带参宏定义的一般形式为:#define 宏名(参数表) 字符串;PHP中define 函数定义一个常量。常量类似变量,不同之处在于:在设定以后,常量的值无法更改。常量名不需要开头的美元符号 ($)。作用域不影响对常量的访问 。常量值只能是字符串或数字。
信息
条件编译
#ifdef、#ifndef、#undef
外文名
define
带参一般形式
#define 宏名(参数表) 字符串
中文名
宏定义
无参一般形式
#define 宏名 字符串
词条范围
计算机专业用语
define概念
#define 命令是 C 语言中的一个宏定义命令 ,它用来将一个标识符定义为一个字符串 , 该标识符被称为宏名, 被定义的字符串称为替换文本。 [1]  该命令有两种格式:一种是简单的宏定义, 另一种是带参数的宏定义。
收起全文
精华内容
下载资源
问答
  • #define

    千次阅读 2019-07-31 15:05:29
    #define #define macro的作用域有点类似于C/C++全局静态变量 编译器处理宏的时机是预处理阶段 编译器按文本顺序处理 遇到宏时就定义一个宏变量 假设这种情况 void test() { #define MACRO 1 } int main() { #...

    #define

    #define macro的作用域有点类似于C/C++全局静态变量
    
    编译器处理宏的时机是预处理阶段 编译器按文本顺序处理 遇到宏时就定义一个宏变量
    
    假设这种情况
    
    void test() {
    #define MACRO 1
    }
    
    int main() {
    #ifdef MACRO
    // do some thing
    #endif
    }
    main函数也是看得到MACRO宏的 因为文本顺序上test在前
    编译器处理到test时定义了一个宏变量 使得main也能“看见“这个宏
    
    假如把顺序交换
    int main() {
    #ifdef MACRO
    // do some thing
    #endif
    }
    
    void test() {
    #define MACRO 1
    }
    main就看不见MACRO宏了

     

    不同源文件中的宏

     

    不同源文件是看不到互相定义的宏的 除非将宏定义在了头文件中
    
    宏的机制类似于全局变量 一般情况不会暴露给另一个源文件 除非你特意在头文件中暴露了它
    
    #a.c
    #define CX 1
    
    #b.c
    int main() {
    #ifdef CX
    //不会被执行 因为看不到这个宏
    #endif
    }

    下面说下宏定义中的特殊操作符,包括#,##和__VA_ARGS__

    #符号说白了就是可以把一个参数当作字符串来处理,避免参数替换,比如:

    #define SQR(x) printf("the square of" #x "is %d.\n",(x)*(x))

    当我们不希望printf中的x被参数替换时可以加上#号。

    ##符号简单理解就是将两个字符串拼接成一个,比如

    #define PROPERTY_READONLY(varType, funName, varName)        \
    private: varType    _##varName;        \
    public:    varType get##funName() const { return _##varName; }

     

    __VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。 
    实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏__VA_ARGS__就可以被用在替换部分中,替换省略号所代表的字符串。

    #define PR(...) printf(__VA_ARGS__)
    int main()
    {
        int wt=1,sp=2;
        PR("hello\n");
        //输出:hello
        PR("weight = %d, shipping = %d",wt,sp);
        //输出:weight = 1, shipping = 2
        return 0;
    }

    省略号只能代替最后面的宏参数。 
    #define W(x,…,y)错误! 
    但是支持#define W(x, …),此时传入的参数个数必须能够匹配。

    介绍几个系统宏:

    1) __FILE__        预编译时会替换成当前的源文件名 
    2) __LINE__       预编译时会替换成当前的行号 
    3) __FUNCTION__  预编译时会替换成当前的函数名称

    展开全文
  • C语言typedefinedefine的区别

    千次阅读 2018-03-21 16:47:41
    define :宏定义,在预编译阶段就进行处理,简单的字符串代换,typedefine:编译时进行处理,不是简单的替换,而是对类型说明符的重新命名。被命名的标识符具有类型说明的功能,代码说明#include <stdio.h&...

    define :

    宏定义,在预编译阶段就进行处理,简单的字符串代换,





    typedefine:

    编译时进行处理,不是简单的替换,而是对类型说明符的重新命名。被命名的标识符具有类型说明的功能,



    代码说明

    #include <stdio.h>
    #define P1 char*
    typedefine char* P2;
    
    int main()
    {
        P1 x,y;
        P2 a,b;
        printf("by #define : %d\n",sizeof(x),sizeof(y));
        printf("by #define : %d\n",sizeof(a),sizeof(b));
    
    rturn 0;
    }

    结果分别是 4,1

    和 4,4;

    说明#define宏替换的P1 x,y;变为char* x, y  只有X为char*类型。Y为char类型。

    展开全文
  • #ifndef/#define/#endif使用详解

    万次阅读 多人点赞 2014-01-09 22:22:33
    想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,...

        想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?


        其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include "a.h" 和#include "c.h"此时就会造成c.h重复引用。


    头文件被重复引用引起的后果:

    有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些,但是对于大工程而言编译效率低下那将是一件多么痛苦的事情。
    有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)这种会引起重复定义。


        是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?

        答案:不是一定要加,但是不管怎样,用#ifnde xxx #define xxx #endif或者其他方式避免头文件重复包含,只有好处没有坏处。个人觉得培养一个好的编程习惯是学习编程的一个重要分支。


        下面给一个#ifndef/#define/#endif的格式:

        #ifndef A_H意思是"if not define a.h"  如果不存在a.h

        接着的语句应该#define A_H  就引入a.h

        最后一句应该写#endif   否则不需要引入

    --------------------------------------------------------------------------------------------------
    #ifndef GRAPHICS_H // 防止graphics.h被重复引用 
    #define GRAPHICS_H 


    #include <math.h> // 引用标准库的头文件 
    … 
    #include “header.h” // 引用非标准库的头文件 
    … 
    void Function1(…); // 全局函数声明 
    … 
    class Box // 类结构声明 

    … 
    }; 
    #endif
    --------------------------------------------------------------------------------------------------






    展开全文
  • javascript中的define用法

    万次阅读 多人点赞 2017-09-13 08:50:58
    最近由于工作需求只能快速学习JS,但在看代码的时候发现许多东西都有疑问比如说代码刚开始的define关键字的用法,刚好最近看了一篇好文章,分享一下。 1. AMD的由来  前端技术虽然在不断发展之中,却一直没有质的...

    最近由于工作需求只能快速学习JS,但在看代码的时候发现许多东西都有疑问比如说代码刚开始的define关键字的用法,刚好最近看了一篇好文章,分享一下。

    1. AMD的由来

    前端技术虽然在不断发展之中,却一直没有质的飞跃。除了已有的各大著名框架,比如Dojo,JQuery,ExtJs等等,很多公司也都有着自己的前端开发框架。这些框架的使用效率以及开发质量在很大程度上都取决于开发者对其的熟悉程度,以及对JavaScript的熟悉程度,这也是为什么很多公司的技术带头人都喜欢开发一个自己的框架。开发一个自己会用的框架并不难,但开发一个大家都喜欢的框架却很难。从一个框架迁移到一个新的框架,开发者很有可能还会按照原有框架的思维去思考和解决问题。这其中的一个重要原因就是JavaScript本身的灵活性:框架没办法绝对的约束你的行为,一件事情总可以用多种途径去实现,所以我们只能在方法学上去引导正确的实施方法。庆幸的是,在这个层面上的软件方法学研究,一直有人在去不断的尝试和改进,CommonJS就是其中的一个重要组织。他们提出了许多新的JavaScript架构方案和标准,希望能为前端开发提供银弹,提供统一的指引。

    AMD规范就是其中比较著名一个,全称是Asynchronous Module Definition,即异步模块加载机制。从它的规范描述页面看,AMD很短也很简单,但它却完整描述了模块的定义,依赖关系,引用关系以及加载机制。从它被requireJS,NodeJs,Dojo,JQuery使用也可以看出它具有很大的价值,没错,JQuery近期也采用了AMD规范。在这篇文章中,我们就将介绍AMD的性质,用法,优势以及应用场景。从AMD中我们也能学习到如何在更高层面去设计自己的前端应用。

    2. AMD是什么

    作为一个规范,只需定义其语法API,而不关心其实现。AMD规范简单到只有一个API,即define函数:

    define([module-name?], [array-of-dependencies?], [module-factory-or-object]);
      其中:
      module-name: 模块标识,可以省略。
      array-of-dependencies: 所依赖的模块,可以省略。
      module-factory-or-object: 模块的实现,或者一个JavaScript对象。

    从中可以看到,第一个参数和第二个参数都是可以省略的,第三个参数则是模块的具体实现本身。后面将介绍在不同的应用场景下,他们会使用不同的参数组合。

    从这个define函数AMD中的A:Asynchronous,我们也不难想到define函数具有的另外一个性质,异步性。当define函数执行时,它首先会异步的去调用第二个参数中列出的依赖模块,当所有的模块被载入完成之后,如果第三个参数是一个回调函数则执行,然后告诉系统模块可用,也就通知了依赖于自己的模块自己已经可用。如果对应到dojo1.6之前的实现,那么在功能上可以有如下对应关系:

    module-name: dojo.provide

    dependencies: dojo.require

    module-factory: dojo.declare

    不同的是,在加载依赖项时,AMD用的是异步,而dojo.require是同步。异步和同步的区别显而易见,前者不会阻塞浏览器,有更好的性能和灵活性。而对于NodeJs这样的服务器端AMD,则模块载入无需阻塞服务器进程,同样提高了性能。

    3. AMD实例:如何定义一个模块

    下面代码定义了一个alpha模块,并且依赖于内置的require,exports模块,以及外部的beta模块。可以看到,第三个参数是回调函数,可以直接使用依赖的模块,他们按依赖声明顺序作为参数提供给回调函数。

    这里的require函数让你能够随时去依赖一个模块,即取得模块的引用,从而即使模块没有作为参数定义,也能够被使用;exports是定义的alpha 模块的实体,在其上定义的任何属性和方法也就是alpha模块的属性和方法。通过exports.verb = …就是为alpha模块定义了一个verb方法。例子中是简单调用了模块beta的verb方法。

    define(“alpha”, [“require”, “exports”, “beta”], function (require, exports, beta) {

    exports.verb = function() {

    return beta.verb();

    //或者:

    return require(“beta”).verb();

    }

    });

    4. 匿名模块

    **define 方法允许你省略第一个参数,这样就定义了一个匿名模块,这时候模块文件的文件名就是模块标识。**如果这个模块文件放在a.js中,那么a就是模块名。可以在依赖项中用"a"来依赖于这个匿名模块。这带来一个好处,就是模块是高度可重用的。你拿来一个匿名模块,随便放在一个位置就可以使用它,模块名就是它的文件路径。这也很好的符合了DRY(Don’t Repeat Yourself)原则。

    下面的代码就定义了一个依赖于alpha模块的匿名模块:

    define([“alpha”], function (alpha) {

    return {

    verb: function(){

    return alpha.verb() + 2;

    }

    };

    });

    5. 仅有一个参数的define

    前面提到,define的前两个参数都是可以省略的。第三个参数有两种情况,一种是一个JavaScript对象,另一种是一个函数。

    **如果是一个对象,那么它可能是一个包含方法具有功能的一个对象;也有可能是仅提供数据。后者和JSON-P非常类似,因此AMD也可以认为包含了一个完整的 JSON-P实现。**模块演变为一个简单的数据对象,这样的数据对象是高度可用的,而且因为是静态对象,它也是CDN友好的,可以提高JSON-P的性能。考虑一个提供中国省市对应关系的JavaScript对象,如果以传统JSON-P的形式提供给客户端,它必须提供一个callback函数名,根据这个函数名动态生成返回数据,这使得标准JSON-P数据一定不是CDN友好的。但如果用AMD,这个数据文件就是如下的形式:

    define({

    provinces: [

    {

    name: ‘上海’,

    areas: [‘浦东新区’, ‘徐汇区’]},

    {

    name: ‘江苏’,

    cities: [‘南京’, ‘南通’]}

    //…

    ]

    });

    假设这个文件名为china.js,那么如果某个模块需要这个数据,只需要:

    define([‘china’, function(china){

    //在这里使用中国省市数据

    });

    通过这种方式,这个模块是真正高度可复用的,无论是用远程的,还是Copy到本地项目,都节约了开发时间和维护时间。

    如果参数是一个函数,其用途之一是快速开发实现。适用于较小型的应用,你无需提前关注自己需要什么模块,自己给谁用。在函数中,可以随时require自己需要的模块。例如:

    define(function(){

    var p = require(‘china’);

    //使用china这个模块

    });

    即你省略了模块名,以及自己需要依赖的模块。这不意味着你无需依赖于其他模块,而是可以让你在需要的时候去require这些模块。define方法在执行的时候,会调用函数的toString方法,并扫描其中的require调用,提前帮助你载入这些模块,载入完成之后再执行。这使得快速开发成为可能。需要注意的一点是,Opera不能很好的支持函数的toString方法,因此,在浏览器中它的适用性并不是很强。但如果你是通过build工具打包所有的 JavaScript文件,这将不是问题,构建工具会帮助你扫描require并强制载入依赖的模块。

    6. Dojo中的AMD

    Dojo 的1.6版本,其中一个重要的变化就是引入了AMD机制,取代了原来的dojo.provide和dojo.require方法。但是现在仍然保持了向后兼容性,你仍然可以用dojo.provide和dojo.require来定义和加载模块。需要注意的是:在 Dojo 1.6 中, 针对 AMD 的重构仍然属于一个过渡期的改动 , 用户自己开发的 AMD 模块还不能被 Dojo 的加载器和 Build 系统支持 . 1.6 中现有的编译系统对AMD的支持还非常局限。 如果你自己开发了 AMD 格式的模块,并且你仍然在使用默认的 Dojo 同步模块加载器,那么你必须严格遵循 Dojo 模块的格式 ( 包括换行的格式 ) 来保证你自己的模块能够成功编译。总结起来有以下三点:

    用传统的方法 (dojo.require()/dojo.provide()) – 这些模块,只能被 Dojo 同步加载器 加载,但可以被 Dojo 编译系统(Build System )正确的编译

    用 Dojo 同步加载器来加载 AMD 格式 ( define ()) 模块 – 这些模块可以被正常的加载,并且可以被其他兼容 AMD 格式的加载器加载 . 现在虽然 Dojo1.6 还没有正式支持这种用法, 但在目前的 Dojo1.6 编译系统中,是可以正常工作的 . ( 前提是你必须严格遵循 Dojo 模块定义的代码规范 )

    使用第三方加载器来加载 AMD 格式( define ())模块 – 模块可以被正常加载,并且可以被其他加载器所使用 . 这些模块可以使用 RequireJS 或 Backdraft 提供的编译系统正常编译,但是 Dojo 还没有正式的测试过和其他加载器的兼容性 .

    以Calendar为例,用define方法来定义这个模块:

    define(“dijit/Calendar”,

    [“dojo”, “dijit”, “text!dijit/templates/Calendar.html”,

    “dojo/cldr/supplemental”, “dojo/date”, “dojo/date/locale”,

    “dijit/_Widget”, “dijit/_Templated”, “dijit/_CssStateMixin”, “dijit/form/DropDownButton”],

    function(dojo, dijit) {

    dojo.declare(

    “dijit.Calendar”,

    [dijit._Widget, dijit._Templated, dijit._CssStateMixin],

    {…}

    );

    return dijit.Calendar;

    }

    );

    可以看到,模块标识就是模块文件的路径,模块本身一般都是dojo.declare定义的类。Dojo1.6中的dojo和dijit命名空间下的模块均已经用AMD的形式进行了重构,但dojox下仍然延用了传统的dojo.provide和dojo.require形式。对AMD的引入是Dojo走向自动化包管理的重要一步,在后续文章中我们也将继续关注Dojo在这方面的进展。

    7. 结论

    AMD 规范是JavaScript开发的一次重要尝试,它以简单而优雅的方式统一了JavaScript的模块定义和加载机制,并迅速得到很多框架的认可和采纳。这对开发人员来说是一个好消息,通过AMD我们降低了学习和使用各种框架的门槛,能够以一种统一的方式去定义和使用模块,提高开发效率,降低了应用维护成本。

    展开全文
  • [define的用法]define用法集锦

    万次阅读 2017-06-30 09:47:51
    篇一 : define用法集锦 Definition: The #define Directive You can use the #define directive to give a meaningful name to a constant in your program. The two forms of the syntax are: Syntax ...
  • C++ define用法

    千次阅读 2019-07-17 17:55:22
    转载地址:... 1 定义常量 #define ARRMAX 50 int arr[ARRMAX]; 2代替模板函数或者内联函数,将函数定义成宏 执行效率很快 #define SWAP(a,b) do\ {\ decltype(a) temp = a;\ a = b;\ b =...
  • C语言 define 关键字

    千次阅读 2018-11-16 10:17:01
    #define MIN(A,B) (((A)>(B))? (B):(A)) 2)用宏定义实现一个32 int类型变量 取绝对值 #define ABS(n) (((unsigned int)n>>31 == 0x1) ? (-n):(n)) #define ABS2(n) ((n ^ (n >> 31)) - (n >> ...
  • #define用法

    千次阅读 多人点赞 2017-10-22 15:51:42
    1.简单的宏定义# define 标识符 替换列表(替换列表可以是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量。注意:替换列表是可以为空的) 典型错误: #define N = 100 int a[N]; /这样会成为int...
  • #define DEBUG

    千次阅读 2018-04-19 18:57:53
    #define DEBUG,定义没有值的DEBUG主要是用于控制调试程序的运行。当定义了DEBUG时"#ifdef DEBUG" 则执行某些调试用的代码,若把"#define DEBUG"删除了后,"#ifdef DEBUG" 就可以使...
  • #define的常见用法

    万次阅读 多人点赞 2018-02-07 11:28:39
    先来讲一讲#define的优点与缺点: [优点] 当在程序中想要修改某一个值得时候,而且这个值又在很多地方引用。这时候就能体现出宏定义的强大优点了。 例如:#define LINK LED0 //定义LINK的灯为LED01因为在程序中...
  • dojo define

    千次阅读 2013-11-12 14:49:04
    define( moduleId, // 定义模块的 ID dependencies, // 定义预加载的模块 factory // 模块的内容,或者一个会返回模块内容的函数 ) // 使用示例 1 define( ["dijit/layout/TabContainer", "bd/widgets/...
  • makefile_define补充

    千次阅读 2020-05-11 19:20:48
    对makefile里的define补充说明 makefile里可能会用到define来打包一些可能会重用的指令,但是因为makefile里实际上会重用代码的情况并不多…所以,define是一个没怎么设计的挺难用的东西;有一点需要注意的是在...
  • #define总结-#define用法集锦

    千次阅读 2014-08-28 19:43:03
    Definition: The #define Directive ... You can use the #define directive to give a meaningful name to a constant in your program. The two forms of the syntax are:  Syntax  #define identifie
  • #define的用法总结

    万次阅读 多人点赞 2016-06-17 19:16:33
    先来讲一讲#define的优点与缺点:[缺点] 宏定义有一些缺点: (1) 无法对宏定义中的变量进行类型检查 此缺点,是相对于const变量来说的 [define与const的区别的简单总结]define定义的变量,是Compile-Time时期的...
  • define函数的用法

    千次阅读 2020-02-10 11:17:58
    define define,宏定义,C语言中 预处理命令 一种。分为无参宏定义和带参宏定义。 无参宏定义 的一般形式为:#define 宏名 字符串; 带参宏定义 的一般形式为:#define 宏名(参数表) 字符串; 关键词是预处理...
  • typedefine 语法

    万次阅读 2016-04-28 07:31:42
    #define,const,typedef的区别 #define 并不是定义变量, 只是用来做文本替换  例如:  #define PI 3.1415926  float angel;  angel= 30*PI/180;  那么,当程序进行编译的时候,编译器会首先将 “#define ...
  • Error launching IDEA-If you already have a 64-bit JDK installed, define a JAVA_HOME variable in Computer>System Properties>System Settings>Environment Variables. Failed to create JVM. JVM Pat...
  • AMD define函数

    千次阅读 2017-11-21 23:13:47
    AMD 规范非常简单只有一个API,即 define 函数: define([module-name?],[array-of-dependencies?],[module-factory-or-object]); 其中,module-name:模块标识,可以省略;array-of-dependencies:所依赖的模块数组
  • c++中#define的用法

    千次阅读 2019-05-03 18:43:10
    今天整理了一些#define的用法,与大家共享! 1.简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写 if(i<MAXTIME){…} 编译器在处理这个代码之前会对MAXTIME进行...
  • #define 用法总结

    千次阅读 多人点赞 2019-03-21 08:30:33
    #define的用法经常不理解,特开一个总结帖。 数据类型的替换 #define CONST(type, memclass) const type 当遇到CONST(type, memclass) 的时候,会被const type 所替代。 普通的数字替换 #define kk 10 ...
  • Oracle基础之define用法简介教程

    千次阅读 2019-09-20 10:32:30
    继上一篇博客Oracle绑定变量学习笔记,再写一篇define变量的简单教程 文章目录1、define常量用法2、&和&&符号用法 1、define常量用法 注意:define常被误解为定义变量,其实不然,define定义的是字符...
  • #define 和 const

    千次阅读 2019-03-14 21:23:30
    #define是字符串替换,没有类型检查;const有对应的数据类型,是要进行判断。 #define容易导致错误,比如: 显然,N*2=3+2*2。 编译器对#define的处理是在编译的预处理阶段;对const的处理是在编译、运行阶段。...
  • C语言中define的用法

    万次阅读 多人点赞 2018-01-05 15:41:53
    最简单且最常见的define用法 #define N 100 编译器在预处理程序时,会将程序中所有的N用100来替换,换言之,不同于const常量,define其实本质上对文本内容的替换。 下面是define和const的区别: define是...
  • define的函数用法

    万次阅读 2018-04-22 15:50:04
    定义常量,比如#define max 10;此时就是一个文本的替换定义函数,比如 #define MAX(a,b) ((a) &gt; (b) ? (a) : (b)) 此时就和定义了比大小的函数一样注意:define是简单的文本替换,也就是说这并没有你想的...
  • #define用法集锦(非常全)

    万次阅读 多人点赞 2018-06-19 05:56:19
    Definition:The #define Directive You can use the #define directive to give a meaningful name to a constant in your program. The two forms of the syntax are: Syntax #define identifier token-string...
  • C语言中#define用法总结

    万次阅读 多人点赞 2018-04-09 16:49:52
    1.简单的宏定义#define 标识符 替换列表(替换列表可以是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量。注意:替换列表是可以为空的)典型错误:#define N = 100int a[N]; /*这样会成为int a[= ...
  • typedef和define有什么区别

    万次阅读 多人点赞 2018-07-04 21:18:33
    typedef和define都是替一个对象取一个别名,以此增强程序的可读性,区别如下:(1)原理不同#define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 428,753
精华内容 171,501
关键字:

define