精华内容
下载资源
问答
  •  理解是什么,能做什么,什么情况下可以使用命令。  了解工具条上每个按钮作用。... 你可以知道一个命令是如何启动一个进程,怎样与SolidWorks程序进行连接,又是如何调用SolidWorks对象和方法。
  • 结果人类很快就发现,基于扩展的编辑器,功能越复杂,它的行为就越诡异。于是,文本编辑器的扩展语言很快就被换成了当时的一种通用的动态类型的函数式编程语言——Lisp。实际上,这就是 Emacs 的前世与今生。 研究...

    人类用计算机处理文本主要是依赖宏语言以及一些专用的文本编辑器。事实上,早期的文本编辑器只提供基本的文本编辑功能,然后借助宏语言进行功能扩展。结果人类很快就发现,基于宏扩展的编辑器,功能越复杂,它的行为就越诡异。于是,文本编辑器的扩展语言很快就被换成了当时的一种通用的动态类型的函数式编程语言——Lisp。实际上,这就是 Emacs 的前世与今生。

    研究编程语言设计的人,所追求的目标是,怎样定义一套文法,使之既能使之对人类简单又友好,且能准确无误的转译为另一种语言。在专业做编程语言设计的人看来,宏语言是最弱的语言,因为它几乎没有什么类型可言。类型越强的语言,往往越便于程序分析。要是有兴趣一起交流学习c/c++的小伙伴可以加群:941636044,里面有大神会给予解答,也会有许多的资源可以供大家学习分享,欢迎大家前来一起学习进步!

    从宏处理器的角度来看,宏语言中只有两种类型:文本与宏。宏展开的结果是文本,但宏本身也是文本,二者的界限往往不是那么明显。在 M4 中,往往要借助引号来区分宏与普通文本,而引号本身又有可能是文本。类型如此贫弱,因此很容易在宏定义时引入一些并不显而易见的错误,而这些错误无法被其他程序检测。另外,用宏语言编写的复杂程序一旦在运行时出现问题,就很难准确定位问题所在,因为错误是在宏展开的结果中发现的,发现错误的时候,很难快速确定它是哪个宏的展开结果。

    虽然 Dennis Ritchie 是 M4 的设计者之一,但是他并没有将 M4 作为 C 语言的宏处理器,而是为 C 语言设计了一种更为轻巧、简单的宏处理机制,显然这是有意而为之。

    Eric Raymonad 在《Unix 编程艺术》一书中指出,功能越强大的宏处理器,越有可能带来更糟糕的麻烦。TeX 引擎就是一种功能非常强大的宏处理器,但是要用它来做编程方面的事,也许定义两个数的除法运算就需要上百行宏代码,这种级别代码复杂度导致 TeX 宏比 Perl 恐怖多了。有一些新的 TeX 引擎正在引入某种通用的编程语言来替换 TeX 的宏扩展机制。例如 LuaTeX,在一个重构的 TeX 引擎基础上将 Lua 作为扩展语言,也有尝试将 Scheme 作为 TeX 扩展语言的。

    虽然现在几乎看不到宏语言的应用了,但是它依然默默的在工作着。几乎所有的 Linux 系统都离不开 GNU Autotools 工具集。这个工具集就是基于 M4 语言构建的,其开发者将一些特定功能的 Shell 代码封装到一些 M4 宏中,然后由 GNU m4 负责将其展开为 Shell 代码。例如,下面这份简单的 M4 宏代码只有 9 行:

    AC_INIT([m5], [0.1])

    AC_CONFIG_AUX_DIR([build-aux])

    AC_CONFIG_MACRO_DIR([m4])

    AM_INIT_AUTOMAKE([foreign -Wall -Werror subdir-objects])

    AC_PROG_CC

    AM_PROG_CC_C_O

    AC_CONFIG_HEADERS([config.h])

    AC_CONFIG_FILES([Makefile])

    AC_OUTPUT

    但是它展开后的所得的 Shell 代码却长达 5000 余行。而我在写这 9 行代码的时候,我几乎完全不懂 Shell 语言,但是我却能理解这些 M4 宏的含义,因为它们只是软件构建过程的一种抽象。

    事实上,TeX 原本也是这样。Donald Knuth 所开发的 TeX 系统,其排版原语只有 300 多个,但是通过 TeX 宏可以将这些排版原语组合起来,从而完成更为复杂的排版任务。对于这种任务,宏语言的运行效率要高于一种通用的编程语言。对于 Knuth 而言,这一决策是正确的,因为这样的 TeX 完全满足了他的需求。后来随着排版任务的复杂化,宏的局限性就日益的呈现了出来。如果始终坚持用宏的方式来扩展 TeX 的功能,进度是缓慢的,参与者的数量是逐步减少的,而且这一切都依赖于底层不能发生任何变化。这种系统迟早会变成恐龙的。Knuth 的 TeX 只支持 8 位字符,后来要让它支持中文,Hacker 们不得不绞尽脑汁的在宏包的层面上去做工作,以至于如何让 TeX 支持中文,对于中文用户而言,长期以来一直是初学者遇到的第一个本来不应该是障碍的障碍。

    滥用宏语言所提供的编程能力,所产生的问题往往要比它解决的问题更多。许多现代的编程语言已经不再提供宏机制,C++ 虽然支持 C 语言宏,但是它几乎不停的告诫程序员最好不要用宏,而是用 const 或内联函数。

    可以用宏去薄层封装那些繁琐且需要多次重复使用的代码,但是原则上不要用宏去实现过于复杂的逻辑。

    我定义了一个 M4 宏 indent,它可以将一个文本块整体缩进一定距离。例如:

    indent(`

    foo bar

    bar foo

    foo bar

    ', ` ')

    m4 的展开结果为:

    foo bar
    
    bar foo
    
    foo bar
    

    这个宏的定义如下:

    define(NEW_LINE',

    ')

    define(`indent’,

       `ifelse(eval(len(`$1') > 1),
    
               1,
    
           `ifelse(substr(`$1',0,1),
    
                   NEW_LINE,
    
               `format(`%s%s', NEW_LINE,`$2')`'indent(substr(`$1',1,eval(len(`$1')-1)), `$2')',
    
               `substr(`$1',0,1)`'indent(substr(`$1',1,eval(len(`$1')-1)),
    

    `$2’)’)’,)’)

    这 10 行代码,让我写了差不多半个下午,大部分时间都在与引号战斗。M4 宏如果出错,首先应该是排查引号的错误。当我好不容易让这几行代码能够成功运行之后,我发现它脆弱不堪,很容易崩溃。例如:

    indent(a(b)', ')

    m4 试图对其进行展开,然后它就会抱怨:

    ERROR: end of file in argument list

    因为在 indent 的递归展开过程中,a(b) 中的 ( 或 ) 均会被 m4 错认为是某个宏的参数列表的括号。由于 M4 不提供逃逸符,所以只能在 indent 的递归过程中去检测像 (,) 以及 ,这样的符号,然后特殊处理。如果在上面这 10 行代码的基础上再增加处理这些特殊情况的代码……结果就是,说一句谎言,要用一百句谎言来掩盖。即使 M4 提供逃逸符,也不怎么会有人打算在代码中为频繁出现的 ( 与 `)’ 之类的符号添加逃逸符的。

    幸好,GNU M4 提供了 patsubst 宏,使用它可实现 indent 希望实现的功能:

    patsubst(`

    abc

    a(b)

    c(a), e, f g’, `

    ', `

    ')
    

    GNU m4 的展开结果为:

    abc
    
    a(b)
    
    c(a), e, f g
    

    由此可见,如果一个采用了宏扩展策略的系统,它所提供的『原语』级的实现有多么的重要!

    宏语言就像过去拿来包油条的旧报纸,后来人们觉得这样很不卫生于是旧报纸就不能用来包油条了。不过,用塑料袋虽然卫生了个人,却污染了环境。也许 Scheme 的卫生宏可以用来包油条。有兴趣一起交流学习c/c++的小伙伴可以加群:941636044,里面有大神会给予解答,也会有许多的资源可以供大家学习分享,欢迎大家前来一起学习进步!

    展开全文
  • 在日常工作,常常会用到Excel做表格,也许在这个...excel批量将汉字变成拼音设置方法1、打开一张需要转换Excel表格(如图所示,小编乱打的姓名,如有雷同,纯属巧合)2、执行“工具→→Visual Basic编辑器”命...

    在日常工作,常常会用到Excel做表格,也许在这个过程中会输入姓名或其它名称等,然后再另一个格中显示对应的拼音,很多人会一个个的输入,其实是可以直接进行批量转换的。下面学习啦给大家分享excel批量将汉字变成拼音的设置方法。

    excel批量将汉字变成拼音的设置方法

    1、打开一张需要转换的Excel表格(如图所示,小编乱打的姓名,如有雷同,纯属巧合)

    62f6311e876bc6e879ea68dbd238793c.png

    2、执行“工具→宏→Visual Basic编辑器”命令,或者直接按“Alt+F11”组合键,进入Visual Basic编辑状态。也就是图中所用的灰色的编辑界面

    28d7edecdd583a26d5bf7522faeda382.png

    3、如图所示,点击“插入→模块”命令

    7c16c73d80f4e2e6c7e3123ef8148aa0.png

    4、插入一个新模块后,会看到如图所示的界面

    3e4993b485162b519cbe9cc18ad6f34a.png

    5、由于字数限制,代码过多无法在这里输入,代码以TXT文本格式存在百度云盘中

    下载链接: http://pan.baidu.com/s/1pLguxFd

    然后将文本中的所有代码复制后,粘贴到“步骤4”中的空白处

    5a7a83c7ea1b3bf8994d75bf73c86fb0.png

    6、代码粘贴完成后,直接关闭Visual Basic编辑窗口即可,返回到Excel编辑状态

    ed9c1ab6a535a0d683257711dd64f152.png

    7、这时自定义函数就可以使用用了,如:要把A列的第2行的内容转换成拼音,放在B列的第2个单元格,输入公式:=getpy(A2),这里的A2,是指需要转换的汉子单元格的坐标,最后按“回车”即可

    c3248f893ce5af9e1c5c0fa6dfea27e5.png

    0153fc8365a5bd8b71892c083ba0ced9.png

    8、在通过下拉,批量实现多行的内容转换

    PS:会有部分汉子无法转换只能手动转换了,代码的问题,可能是汉字太多无法全部识别吧,但是大部分转换成功后,其它个别的就好办多了,本实例也列出2个无法转换的汉字

    6caa9350bf36cf2e592f09457c8fa854.png

    展开全文
  • 这本入门书可以告诉这些初学者,整个C++世界有哪些内容构成,应该按照怎样的路径进行学习探索,用C++进行程序设计应该具有怎样的设计思想,同时,又如何在实践中运用这些学到知识。可以说,这本书基本上囊括了每个...
  • 作者在网络版CFAQ列表基础上进行了大幅度扩充和丰富,结合代码示例,权威而且详细深入地解答了实际学习和工作中最常遇到495个C语言问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等...
  • 作者在网络版CFAQ列表基础上进行了大幅度扩充和丰富,结合代码示例,权威而且详细深入地解答了实际学习和工作中最常遇到495个C语言问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等...
  • 最后《程序员面试宝典(第二版)》着力讲述了如何进行英语面试和电话面试,并对求职中签约、毁约注意事项及群体面试进行了解析。《程序员面试宝典(第二版)》面试题除了有详细解析和回答外,对相关知识点还有扩展...
  • 注:本节原文摘自互联网,笔者对它进行了必要的编辑和扩展。原作者尚未查知,在此表示歉意和感谢。 某些情况下希望函数的参数个数可以根据需要确定。典型的例子有大家熟悉的函数printf()、scanf()和系统调用...

    一、关于可变参数的函数定义方法

     

    注:本节原文摘自互联网,笔者对它进行了必要的编辑和扩展。原作者尚未查知,在此表示歉意和感谢。

     

    某些情况下希望函数的参数个数可以根据需要确定。典型的例子有大家熟悉的函数printf()、scanf()和系统调用execl()等。那么它们是怎样实现的呢?C编译器通常提供了一系列处理这种情况的宏,以屏蔽不同的硬件平台造成的差异,增加程序的可移植性。这些宏包括va_start、 va_arg和va_end等。 

     

    1. 采用ANSI标准形式时,参数个数可变的函数的原型声明是:

     

     

    1. type funcname(type para1, type para2, ...)   

    type funcname(type para1, type para2, ...)

     

    这种形式至少需要一个普通的形式参数,后面的省略号不表示省略,而是函数原型的一部分。type是函数返回值和形式参数的类型。

     

    2. 采用与UNIX System V兼容的声明方式时,参数个数可变的函数原型是:

     

     

    1. type funcname(va_alist)  
    2. va_dcl  

    type funcname(va_alist)va_dcl

     

    这种形式不需要提供任何普通的形式参数。type是函数返回值的类型。va_dcl是对函数原型声明中参数va_alist的详细声明,实际是一个宏定义,对不同的硬件平台采用不同的类型来定义,但在最后都包括了一个分号。因此va_dcl后不再需要加上分号了。va_dcl在代码中必须原样给出。 va_alist在VC中可以原样给出,也可以略去。

     

    此外,采用头文件stdarg.h编写的程序是符合ANSI标准的,可以在各种操作系统和硬件上运行;而采用头文件varargs.h的方式仅仅是为了与以前的程序兼容。所以建议大家使用前者。以下主要就前一种方式对参数的处理做出说明。两种方式的基本原理是一致的,只是在语法形式上有一些细微的区别。

     

     

    1. /* 取第一个可变参数的指针给arg_ptr 
    2.    last_firm_arg是函数声明中最后一个固定参数,该 
    3.     宏参方便编译器定位第一个可变参数的地址,因为在函数 
    4.     调用的栈结构中,可变参数总是在因定参数的后面 */  
    5. void va_start( va_list arg_ptr, last_firm_arg );  
    6.   
    7. /* 返回arg_ptr指定的当前可变参数的值,然后arg_ptr指向下一参数 
    8.     cur_arg_type是当前参数的类型,如int,该 
    9.     宏参方便编译器定位下一可变参数的地址 
    10.     注意支持的类型为int和double,这是一个陷井,下文将详述 
    11.     可循环调用此宏得到N个参数值 */  
    12. cur_arg_type va_arg( va_list arg_ptr, cur_arg_type );  
    13.   
    14. /* arg_ptr置为NULL */  
    15. void va_end( va_list arg_ptr );  

    /* 取第一个可变参数的指针给arg_ptr last_firm_arg是函数声明中最后一个固定参数,该 宏参方便编译器定位第一个可变参数的地址,因为在函数 调用的栈结构中,可变参数总是在因定参数的后面 */void va_start( va_list arg_ptr, last_firm_arg );/* 返回arg_ptr指定的当前可变参数的值,然后arg_ptr指向下一参数 cur_arg_type是当前参数的类型,如int,该 宏参方便编译器定位下一可变参数的地址 注意支持的类型为int和double,这是一个陷井,下文将详述 可循环调用此宏得到N个参数值 */cur_arg_type va_arg( va_list arg_ptr, cur_arg_type );/* arg_ptr置为NULL */void va_end( va_list arg_ptr );

     

    va_start使argp指向第一个可选参数。va_arg返回参数列表中的当前参数并使argp指向参数列表中的下一个参数。va_end把argp指针清为NULL。函数体内可以多次遍历这些参数,但是都必须以va_start开始,并以va_end结尾。  

     

    调用者在实际调用参数个数可变的函数时,要通过一定的方法指明实际参数的个数(编注:实际上,每个参数的数据类型(占用字节数)也需要以一定的方法指明,如采用默认类型或以固参指明类型,printf()的首参——格式化字串中的类型格式符%d、%f、%s等就是显式指明的),例如把最后一个参数置为空字符串(系统调用execl()就是这样的)、-1或其他的方式(函数printf()就是通过第一个参数,即输出格式的定义来确定实际参数的个数的)。  

     

    下面给出一个具体的例子。是采用了符合ANSI标准的形式的代码。代码中加了一些注释,这里就不再解释了。该例子已经在VC/Windows XP、CC/AIX4.3.2.0、GCC/SUSE7.3环境下编译并正常运行。

     

    演示如何使用参数个数可变的函数,采用ANSI标准形式

     

     

    1. #include < stdio.h >;    
    2. #include < string.h >;    
    3. #include < stdarg.h >;    
    4.   
    5. /* 函数原型声明,至少需要一个确定的参数,  注意括号内的省略号 */    
    6. int demo( char *, ... );    
    7.   
    8. void main( void )    
    9. {    
    10.     demo("DEMO""This""is""a""demo!""\0");    
    11. }    
    12.   
    13. /* ANSI标准形式的声明方式,括号内的省略号表示可选参数 */    
    14. int demo( char *msg, ... )    
    15. {    
    16.     va_list argp; /* 定义保存函数参数的结构 */    
    17.     int argno = 0; /* 纪录参数个数 */    
    18.     char *para; /* 存放取出的字符串参数 */    
    19.   
    20.     /* argp指向传入的第一个可选参数,   
    21.         msg是最后一个确定的参数 */    
    22.     va_start( argp, msg );    
    23.   
    24.     while (1)  
    25.     {  
    26.         /* 取出当前的参数,类型为char *. */  
    27.         para = va_arg( argp, char *);   
    28.    
    29.         /* 采用空串指示参数输入结束 */   
    30.         if ( strcmp( para, "\0") == 0 )    
    31.             break;    
    32.   
    33.         printf("Parameter #%d is: %s\n", argno, para);    
    34.         argno++;    
    35.     }    
    36.     va_end( argp ); /* 将argp置为NULL */    
    37.     return 0;    
    38. }  

    #include < stdio.h >; #include < string.h >; #include < stdarg.h >; /* 函数原型声明,至少需要一个确定的参数, 注意括号内的省略号 */ int demo( char *, ... ); void main( void ) { demo("DEMO", "This", "is", "a", "demo!", "\0"); } /* ANSI标准形式的声明方式,括号内的省略号表示可选参数 */ int demo( char *msg, ... ) { va_list argp; /* 定义保存函数参数的结构 */ int argno = 0; /* 纪录参数个数 */ char *para; /* 存放取出的字符串参数 */ /* argp指向传入的第一个可选参数, msg是最后一个确定的参数 */ va_start( argp, msg ); while (1) { /* 取出当前的参数,类型为char *. */ para = va_arg( argp, char *); /* 采用空串指示参数输入结束 */ if ( strcmp( para, "\0") == 0 ) break; printf("Parameter #%d is: %s\n", argno, para); argno++; } va_end( argp ); /* 将argp置为NULL */ return 0; }

     

    二、可变参类型陷井

     

    下面的代码是错误的,运行时得不到预期的结果:

     

     

    1. va_start(pArg, plotNo);  
    2. fValue = va_arg(pArg, float);  // 类型应改为double,不支持float  
    3. va_end(pArg);  

    va_start(pArg, plotNo);fValue = va_arg(pArg, float); // 类型应改为double,不支持floatva_end(pArg);

     

    下面列出va_arg(argp, type)宏中不支持的type:

     

    —— char、signed char、unsigned char
    —— short、unsigned short
    —— signed short、short int、signed short int、unsigned short int
    —— float

     

    在 C语言中,调用一个不带原型声明的函数时,调用者会对每个参数执行“默认实际参数提升(default argument promotions)”。该规则同样适用于可变参数函数——对可变长参数列表超出最后一个有类型声明的形式参数之后的每一个实际参数,也将执行上述提升工作。

     

    提升工作如下:
    ——float类型的实际参数将提升到double
    ——char、short和相应的signed、unsigned类型的实际参数提升到int
    ——如果int不能存储原值,则提升到unsigned int

     

    然后,调用者将提升后的参数传递给被调用者。

     

    所以,可变参函数内是绝对无法接收到上述类型的实际参数的。

     

       

    关于该陷井,C/C++著作中有以下描述:

     在《C语言程序设计》对可变长参数列表的相关章节中,并没有提到这个陷阱。但是有提到默认实际参数提升的规则:
    在没有函数原型的情况下,char与short类型都将被转换为int类型,float类型将被转换为double类型。
                    ——《C语言程序设计》第2版  2.7 类型转换 p36

     在其他一些书籍中,也有提到这个规则:

     事情很清楚,如果一个参数没有声明,编译器就没有信息去对它执行标准的类型检查和转换。
    在这种情况下,一个char或short将作为int传递,float将作为double传递。
    这些做未必是程序员所期望的。
    脚注:这些都是由C语言继承来的标准提升。
    对于由省略号表示的参数,其实际参数在传递之前总执行这些提升(如果它们属于需要提升的类型),将提升后的值传递给有关的函数。——译者注
                    ——《C++程序设计语言》第3版-特别版 7.6 p138

     …… float类型的参数会自动转换为double类型,short或char类型的参数会自动转换为int类型 ……
                    ——《C陷阱与缺陷》 4.4 形参、实参与返回值 p73

     这里有一个陷阱需要避免:
    va_arg宏的第2个参数不能被指定为char、short或者float类型。
    因为char和short类型的参数会被转换为int类型,而float类型的参数会被转换为double类型 ……
    例如,这样写肯定是不对的:
    c = va_arg(ap,char);
    因为我们无法传递一个char类型参数,如果传递了,它将会被自动转化为int类型。上面的式子应该写成:
    c = va_arg(ap,int);
                    ——《C陷阱与缺陷》p164

    转载于:https://www.cnblogs.com/aoyihuashao/archive/2010/01/21/1653107.html

    展开全文
  • 现在打算添加一个EObject字段来存放该文件,这样操作时候,可以直接双击该字段在编辑器中打开文件进行编辑。当然数据库体积会增大,这个可以接受。 **问题:** 记录有很多,如何自动将现有html导入到数据库中...
  • 如何对CTreeCtrl中节点文本进行编辑 如何实现调色程序 如何设定静态文本框背景色和文本颜色 如何响应CSliderCtrl控件拖动消息以及得到当前位置 如何使用CFileDialog对话框 如何使用CColorDialog对话框 如何...
  • 然后逐步介绍创建数据透视表、自定义透视表、查看视图数据、在透视表内进行计算、使用数据透视图等可视化工具、分析数据源、共享数据表、使用和分析OLAP数据、在透视表中使用和VBA等内容,并集中解答了一些常见...
  • 然后逐步介绍创建数据透视表、自定义透视表、查看视图数据、在透视表内进行计算、使用数据透视图等可视化工具、分析数据源、共享数据表、使用和分析OLAP数据、在透视表中使用和VBA等内容,并集中解答了一些常见...
  • 然后逐步介绍创建数据透视表、自定义透视表、查看视图数据、在透视表内进行计算、使用数据透视图等可视化工具、分析数据源、共享数据表、使用和分析OLAP数据、在透视表中使用和VBA等内容,并集中解答了一些常见...
  • 然后逐步介绍创建数据透视表、自定义透视表、查看视图数据、在透视表内进行计算、使用数据透视图等可视化工具、分析数据源、共享数据表、使用和分析OLAP数据、在透视表中使用和VBA等内容,并集中解答了一些常见...
  • Visio2000 技术大全

    2007-07-13 10:03:36
    第26章详细介绍了选项对话 <br> 框中常规、绘图和高级内容部分,主题包括操作用户设置,启用屏幕提示,以及设置文本选项, 第27章介绍了Visio 2000中可以使用的宏。第28章介绍怎样使用数据库相关向导生成工程....
  • 198 理解编译器对宏的解释 199 理解运行库中的宏 200 示例:求一个数的平方 第十九章 C/C++中的字符串 201 理解字符变量类型 202 理解C和C++语言存储字符串的方式 203 理解NUL字符(\0) 204 理解和使用字符串指针 ...
  • 198 理解编译器对宏的解释 199 理解运行库中的宏 200 示例:求一个数的平方 第十九章 C/C++中的字符串 201 理解字符变量类型 202 理解C和C++语言存储字符串的方式 203 理解NUL字符(\0) 204 理解和使用字符串指针 ...
  • 198 理解编译器对宏的解释 199 理解运行库中的宏 200 示例:求一个数的平方 第十九章 C/C++中的字符串 201 理解字符变量类型 202 理解C和C++语言存储字符串的方式 203 理解NUL字符(\0) 204 理解和使用字符串指针 ...
  • 198 理解编译器对宏的解释 199 理解运行库中的宏 200 示例:求一个数的平方 第十九章 C/C++中的字符串 201 理解字符变量类型 202 理解C和C++语言存储字符串的方式 203 理解NUL字符(\0) 204 理解和使用字符串指针 ...
  • Visio 2000 技术大全

    2008-11-23 08:21:28
    框中常规、绘图和高级内容部分,主题包括操作用户设置,启用屏幕提示,以及设置文本选项, 第27章介绍了Visio 2000中可以使用的宏。第28章介绍怎样使用数据库相关向导生成工程.包括怎样把Microsoft Excel文件中...
  • 代码语法错误分析工具pclint8.0

    热门讨论 2010-06-29 07:00:09
    C语言灵活性带来了代码效率提升,但相应带来了代码编写随意性,另外C编译器不进行强制类型检查,也带来了代码编写隐患。PCLint识别并报告C语言中编程陷阱和格式缺陷发生。它进行程序全局分析,能识别...
  • 程序l 自动填充的编辑框 程序2 货币格式的编辑框 程序3 对语法敏感的编辑框 程序4 包含提示文本和编辑框的复合编辑控件 程序5 高级编辑控件 程序6 数字滚选编辑框 第3章 静态控件 程序1 带有水平或垂直文字...
  • c++ 程序设计

    2019-01-20 22:53:37
    本书作者花费了很大精力去考虑怎样使读者易于接受和理解,尽量用通俗易懂方法和语言叙述复杂概念,力求减少初学者学习C++困难。书中所举程序,是从教学角度考虑,非常切合教学之用。 (4)体现C++标准...
  • asp.net知识库

    2015-06-18 08:45:45
    asp.net 2.0下嵌套masterpage页可视化编辑 C# 2.0与泛型 动态调用对象属性和方法——性能和灵活性兼备方法 泛型技巧系列:用泛型打造可复用抽象工厂 泛型技巧系列:如何提供类型参数之间转换 .NET 2.0 ...
  • C++MFC教程

    热门讨论 2013-05-21 13:37:15
    在MFC中对消息处理利用了消息映射方法,该方法基础是定义实现,通过定义将消息分派到不同成员函数进行处理。下面简单讲述一下这种方法实现方法: 代码如下 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd...
  • PT80-NEAT开发指南v1.1

    2014-06-24 18:38:34
    应用程序关闭 .................................................................................................................................... 19 框架窗口 ...........................................

空空如也

空空如也

1 2 3
收藏数 60
精华内容 24
关键字:

怎样进行宏的编辑