vc宏总结

vc宏总结
vc宏总结

C/C++中的宏

宏的单行定义

#define A(x) T_##x

#define B(x) #@x

#define C(x) #x

我们假设:x=1,则有:

A(1)------〉T_1

B(1)------〉'1'

C(1)------〉"1"

define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心)

#define MACRO(arg1, arg2) do { \

/* declarations */ \

stmt1; \

stmt2; \

/* ... */ \

} while(0) /* (no trailing ; ) */

关键是要在每一个换行的时候加上一个"\"

MFC中常用宏及其作用如下:

RUNTIME_CLASS获得运行时类的CRuntimeClass结构指针RUNTIME_CLASS( class_name )

DECLARE_DYNAMIC提供基本的运行时类型识别(声明) DECLARE_DYNAMIC( class_name )

IMPLEMENT_DYNAMIC提供基本的运行时类型识别(实现) IMPLEMENT_DYNAMIC (class_name, base_class_name )

DECLARE_DYNCREATE动态创建(声明) DECLARE_DYNCREA TE( class_name ) IMPLEMENT_DYNCREATE动态创建(实现) IMPLEMENT_DYNCREATE( class_name,base_class_name )

DECLARE_SERIAL对象序列化(声明) DECLARE_SERIAL( class_name )

IMPLEMENT_SERIAL对象序列化(实现)IMPLEMENT_SERIAL(class_name,base_class_name,wSchema)

DECLARE_MESSAGE_MAP声明消息映射表DECLARE_MESSAGE_MAP()

BEGIN_MESSAGE_MAP开始建立消息映射表BEGIN_MESSAGE_MAP( theClass, baseClass )

END_MESSAGE_MAP结构建立消息映射表END_MESSAGE_MAP()

ON_COMMAND命令消息映射宏

ON_MESSAGE自定义消息映射宏

ON_WM_...MFC预定义消息映射宏

ON_BN_...,ON_EN_..控件通知消息映射宏

部分宏说明:

a.RUNTIME_CLASS宏使程序能实时创建类的实例。为了让这个宏起作用,定义的类必须从CObject类派生而来,并且在派生类的定义中必须使用宏

DECLARE_DYNAMIC,DECLARE_DYNCREATE或DECLARE_SERIAL,在派生类的实现文件中必须使用宏IMPLEMENT_DYNAMIC,IMPLEMENT_DYNCREATE或IMPLEMENT_SERIAL。

b.DECLARE_DYNAMIC只能使CObject派生类对象具有基本的类型识别功能,可以通过CObject::IsKindOf(ClassName)测试对象与给定类ClassName的关系。

c.DECLARE_DYNCREATE包括了DECLARE_DYNAMIC的功能。DECLARE_SERIAL 包括了DECLARE_DYNAMIC和DECLARE_DYNCREATE的功能。

3.MFC调试宏

a.跟踪宏:TRACE(<表达式>)

b.断言宏:ASSERT(<表达式>)当ASSERT宏的参数不为真时,暂停程序的执行。如果表达式的值为真,则不做任何事情。如果参数为假时,则暂停程序的执行并弹出一个对话框,告诉用户程序暂停运行的行以及所在文件信息。用户可以根据情况选择终止程序运行,调试程序或继续运行。

c.断言有效宏ASSERT_V ALID ASSERT_V ALID(<指针>)该宏用于检查指针和对象的用效性。对于一般指针,只检查指针是否为空。对于MFC对象指针,还调用CObject::AssertValid()成员含数判断对象是否合法。ASSERT_V ALID与ASSERT类似,也是使用对话框提示用户指针或对象是无效的。如果对象有效,则不做任何事情.

https://www.360docs.net/doc/8518830050.html, IDE预定义宏

这类宏主要应用在工程属性设置中,包括名称、路径、编译等相关字符串。比如解决方案位c:\Soln\Soln.sln,项目位于c:\Soln\Proj\Proj.vcproj,中间目录为DebugInt,输出目录为c:\MyOutputs,输出名称为Game.exe时,各个宏的值依次如下。

$(ConfigurationName) 版本名,如debug或release。

$(PlatformName) 当前平台名,如Win32。

$(IntDir) 中间目录名,即为中间文件指定的相对于项目目录的目录路径,值为DebugInt。

$(OutDir) 输出文件目录的路径,值为c:\MyOutputs。

$(DevEnvDir) VS的安装目录。

$(InputDir) 输入文件目录,值为c:\Soln\Proj。

$(InputPath) 输入文件全路径名,值为c:\Soln\Proj\Proj.vcproj。

$(InputName) 输入文件名,值为Proj。

$(InputFileName) 输入文件名(带后缀),值为Proj.vcproj。

$(InputExt) 输入文件扩展名,值为.vcproj。

$(ProjectDir) 项目目录,同$(InputDir)。

$(ProjectPath) 项目全路径名,同$(InputPath)。

$(ProjectName) 同$(InputName)。

$(ProjectFileName) 同$(InputFileName)。

$(ProjectExt) 同$(ProjectExt)。

$(SolutionDir) 解决方案目录,值为c:\Soln。

$(SolutionPath) 解决方案路径,值为c:\Soln\Soln.sln。

$(SolutionName) 解决方案名,值为Soln。

$(SolutionFileName) 解决方案名(带后缀),值为Soln.sln。

$(SolutionExt) 解决方案文件扩展名,值为.sln。

$(TargetDir) 输出文件目录,值为c:\MyOutputs\。

$(TargetPath) 输出文件路径名,c:\MyOutputs\Game.exe。

$(TargetName) 输出文件名,值为Game。

$(TargetFileName) 输出文件全名,值为Game.exe。

$(TargetExt) 输出文件扩展名,值为.exe。

$(VSInstallDir) VS安装目录。

$(VCInstallDir) VC安装目录。

$(FrameworkDir) framework安装目录。

$(FrameworkVersion) framework版本信息。

$(FrameworkSDKDir) framework sdk安装目录。

__cplusplus 如果当前编译器为C++,该值为1。

__DATE__ 当前源码的编译日期,格式为Mmm dd yyyy。

__TIME__ 当前源码的编译时间,格式为hh:mm:ss。

__TIMESTAMP__ 当前源码文件最后被修改的日期和时间,格式为Ddd Mmm Date hh:mm:ss yyyy。

__FILE__ 当前源码文件名。

__LINE__ 当前插入点所在源码的行号。

__FUNCTION__ 当前插入点所在函数名。

__STDC__ 标识是否严格遵循ANSI C标准,编译器选项/Za被设置时该宏定义为1,表示遵循标准。

__V A_ARGS__可变参数宏,用来传递可变参数表;该宏并非被所有编译器支持。

_DEBUG当我们的工程设置为debug版编译时,编译器会定义该宏;该宏与#ifdef等预编译语句一起进行条件编译,以区分debug和release版本功能。

ASSERT 断言,当该宏后面的语句值为0时引起程序中断,只在debug版中有效。

VERIFY与ASSERT功能类似,在debug和release版本中均有效。

ASSERT_V ALID检查后面参数指针是否为空,只在debug版中有效。

TRACE格式化输出字符串信息。

_ATL_VER指明A TL的版本。

_CLR_VER指明公共运行时(common language runtime)的版本。

_COUNTER_一个从0开始的全局的计数器,每次用于源文件或在源文件中被引用头文件时,自动加1。

_DLL当工程类型为动态链接库时,该值为1。

WINVER指示Windows版本。

_MFC_VER指示MFC版本。

_MSC_VER指示编译器版本。

_WIN32 为Win32和Win64程序定义。

#include指令包含指定的文件

#define指令预定义,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了

#typedef指令常用来定义一个标识符及关键字的别名它是语言编译过程的一部分,但它并不实际分配内存空间。

#ifndef #else #endif指令

条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。

条件编译命令最常见的形式为:

#ifdef 标识符

程序段1

#else

程序段2

#endif

它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。

#ifdef _DEBUG

是编译时预定义的符号,是VC环境默认产生的,在设置中可以找到表示现在的运行模式时调试态

#define new DEBUG_NEW

把new 这个关键字用DEBUG_NEW 这个宏替代,在调试状态能检测内存泄露

和帮助管理内存。

#undef THIS_FILE undef和enddif的含义是什么?THIS_FILE是自己编写的?还是系统默认的指定用词?

undef是取消一个符号定义。endif是便是一条件编译的结束。THIS_FILE就是一个普通的符号名。取消定义后,下面就能安全使用了。

__FILE__是编译器预定义的符号,就是正在编译的文件名。这句话就是声明一个静态的字符串THIS_FILE。相当于:static char THIS_FILE[] = "a.c";

预处理和宏定义又是C语言的一个强大工具。使用它们可以进行简单的源代码控制,版本控制,预警或者完成一些特殊的功能。

一个经典的例子

使用预处理与宏定义最经典的例子莫过于加在一个头文件中以避免头文件被两次编译。试想这种的情况,有一个文件headerfile.h 它被包含在headerfile1.h中,同时在headerfile2.h 中也被包含了,现在有一个CPP文件,implement.cpp 包含了headerfile1.h 和headerfile2.h:#include “headerfile1.h”

#include “headerfile2.h”

假设headerfile.h 中定义了一个全局变量iglobal 。

int iglobal;

在编译的时候编译器两次编译headerfile,也就会发现iglobal被定义了两次,这时就会发生变量重定义的编译错误。

传统的解决办法是使用#ifdef 以及#endif 来避免头文件的重复编译,在上面的例子中,只需要加上这么几行:

#ifndef smartnose_2002_6_21_headerfile_h

#define smartnose_2002_6_21_headerfile_h

int iglobal;

#endif

仔细的考虑上面的宏定义,会发现当编译器编译过一次headerfile.h以后,smartnose_2002_6_21_headerfile_h 这个宏就被定义了,以后对headerfile.h的编译都会跳过int iglobal 这一行。当然smartnose_2002_6_21_headerfile_h 这个宏是可以任意定义的,但是这个宏本身不能和其它文件中定义的宏重复,所以MFC在自动生成的文件中总是使用一个随机产生的长度非常长的宏,但我觉得这没有必要,我建议在这个宏中加入一些有意义的信息,比方作者,文件名,文件创建时间等等,因为我们有时候会忘记在注释中加入这些信息。

在https://www.360docs.net/doc/8518830050.html, 中我们不会再看见这些宏定义了,因为在这里会普遍使用一个预处理指令:#pragma once

只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。

源代码版本控制

当我们为许多平台开发多个版本的时候预编译指令和宏定义也能够帮我们的忙。假设我们现在为WINDOWS 和LINUX开发了一套软件,由于这两种系统的不同,我们不得不在程序控制源代码的版本。比方内存的分配,我们可以在LINUX上使用标准C的malloc 函数,但是我们希望在WINDOWS上使用HeapAlloc API。下面的代码演示了这种情况:main()

{

………………..

#ifdef _WINDOWS_PLATFORM

HeapAlloc(5);

#else

malloc(5);

#endif

………………..

}

当我们在WINDOWS 平台上编译此程序的时候,只需要定义_WINDOWS_PLATFORM 这个宏,那么HeapAlloc这条语句就能够起作用了。这样就能够让我们在同一个文件中为不同的平台实现不同版本的代码,同时保持程序的良好结构。在许多情况下,我们还可以为一个方法使用不同的算法,然后用宏定义来针对不同的情况选择其中的一个进行编译。这在MFC应用程序中是使用得最多的。最明显的就是文件中经常存在的

#ifdef _DEBUG

…………………….some code………..

#endif

这样的代码,这些代码在应用程序的调试版(DEBUG)中会发挥其作用。

#Pragma 指令

在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作

。其格式一般为

#Pragma Para

其中Para 为参数,下面来看一些常用的参数。

message 参数。Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:#Pragma message(“消息文本”)

当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法

#ifdef _X86

#Pragma message(“_X86 macro activated!”)

#endif

当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。

另一个使用得比较多的pragma参数是code_seg。格式如:

#pragma code_seg( ["section-name"[,"section-class"] ] )

它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。

最后一个比较常用的就是上面所说的#pragma once 指令了。

#pragma hdrstop

表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。你可以用#pragma startup指定编译优先级,如果使用了#pragma package(smart_init) ,BCB就会根据优先级的大小先后编译。

#pragma resource "*.dfm"

表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体外观的定义。

#pragma warning( disable : 4507 34; once : 4385; error : 164 )等价于:

#pragma warning(disable:4507 34) // 不显示4507和34号警告信息

#pragma warning(once:4385) // 4385号警告信息仅报告一次

#pragma warning(error:164) // 把164号警告信息作为一个错误。

同时这个pragma warning 也支持如下格式:

#pragma warning( push [ ,n ] )

#pragma warning( pop )

这里n代表一个警告等级(1---4)。

#pragma warning( push )保存所有警告信息的现有的警告状态。

#pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告

等级设定为n。

#pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的

一切改动取消。例如:

#pragma warning( push )

#pragma warning( disable : 4705 )

#pragma warning( disable : 4706 )

#pragma warning( disable : 4707 )

//.......

#pragma warning( pop )

在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)。

#pragma comment(...)

该指令将一个注释记录放入一个对象文件或可执行文件中。

常用的lib关键字,可以帮我们连入一个库文件。

每个编译程序可以用#pragma指令激活或终止该编译程序支持的一些编译功能。例如,对循环优化功能:

#pragma loop_opt(on) // 激活

#pragma loop_opt(off) // 终止

有时,程序中会有些函数会使编译器发出你熟知而想忽略的警告,如“Parameter xxx is never used in function xxx”,可以这样:

#pragma warn —100 // Turn off the warning message for warning #100

int insert_record(REC *r)

{ /* function body */ }

#pragma warn +100 // Turn the warning message for warning #100 back on

函数会产生一条有唯一特征码100的警告信息,如此可暂时终止该警告。

每个编译器对#pragma的实现不同,在一个编译器中有效在别的编译器中几乎无效。可从编译器的文档中查看。

VC预定义的宏

宏:__LINE__ 和__FILE__

定义源程序文件名和代码行,这对于调试跟踪代码错误行很有帮助。

__TIME__ :编译时间

__DATE__ :编译日期

__TIMESTAMP__:文件修改时间

在VC中有一类宏并不是由用户用#define语句定义的,而是编译器本身就能够识别它们。这些宏的作用也是相当大的。让我们来看第一个,也是MFC中使用得最频繁的一个:__FILE__ 。当编译器遇到这个宏时就把它展开成当前被编译文件的文件名。好了,我们马上就可以想到可以用它来做什么,当应用程序发生错误时,我们可以报告这个错误发生的程序代码在哪个文件里,比方在文件test.cpp中有这样的代码:

try{char * p=new(char[10]);}

catch(C Exception *e ){TRACE(“ there is an error in file: %s\n”,__FILE__);}

在程序运行的时候,如果内存分配出现了错误,那么在调试窗口中会出现there is an error in file: test.cpp 这句话,当然,我们还可以把这个错误信息显示在别的地方。如果我们还能够记录错误发生在哪一行就好了,幸运的是,与__FILE__宏定义一样,还有一个宏记录了当前代码所在的行数,这个宏是__LINE__。使用上面的两个宏,我们可以写出一个类似于VC提供的ASSERT语句。下面是方法

#define MyAssert(x) \

if(!(x)) \

MessageBox(__FILE__,__LINE__,NULL,MB_OK);

我们在应用程序中可以象使用ASSERT语句一样使用它,在错误发生时,它会弹出一个对话框,其标题和内容告诉了我们错误发生的文件和代码行号,方便我们的调试,这对于不能使用ASSERT语句的项目来说是非常有用的。

除了这两个宏以外,还有记录编译时间的__TIME__,记录日期的__DATE__,以及记录文件修改时间的__TIMESTAMP__宏。使用这些预定义的宏,我们几乎可以生成和VC能够生成的一样完整的源代码信息报表。翻开MFC和Linux的源代码,宏定义几乎占据了半边天,消息映射,队列操作,平台移植,版本管理,甚至内核模块的拆卸安装都用宏定义完成。毫不夸张的说,有些文件甚至就只能看见宏定义。所以学习宏定义,熟练的使用宏定义对于学习C语言乃至VC都是非常关键的。

下面要介绍的宏定义与预处理指令的用法也是ATL,MFC以及LINUX中使用得比较多的非常重要的技巧。

## 连接符与# 符

##连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道

也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作的。这是MSDN上的一个例子。

假设程序中已经定义了这样一个带参数的宏:

#define paster( n ) printf( "token" #n " = %d", token##n )

同时又定义了一个整形变量:

int tokenArray = Array;

现在在主程序中以下面的方式调用这个宏:

paster( Array );

那么在编译时,上面的这句话被扩展为:

printf( "token" "Array" " = %d", tokenArray );

注意到在这个例子中,paster(Array);中的这个”Array”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了tokenArray。而#n也被”Array”所替代。

可想而知,上面程序运行的结果就是在屏幕上打印出tokenArray=Array

在ATL的编程中,我们查看它的源代码就会经常看见这样的一段:

#define IMPLEMENTS_INTERFACE(Itf) \

{&IID_##Itf, ENTRY_IS_OFFSET,BASE_OFFSET(_ITCls, Itf) },

我们经常不假思索的这样使用它:……

IMPLEMENTS_INTERFACE(ICat)

……

实际上IID_ICat 已经在别的地方由ATL向导定义了。当没有向导的时候,你只要遵循把IID_加在你的接口名前面来定义GUID的规则就也可以使用这个宏。在实际的开发过程中可能很少用到这种技巧,但是A TL使用得如此广泛,而其中又出现了不少这样的源代码,所以明白它是怎么一回事也是相当重要的。我的一个朋友就是因为不知道IMPLEMENTS_INTERFACE宏是怎么定义的,而又不小心改动了IID_ICat的定义而忙活了一整天。

Linux的怪圈在刚开始阅读Linux的时候有一个小小的宏让我百思不得其解:

#define wait_event(wq,condition) \

do{ \

if(condition) \

break; \

__wait_event(wq,condition); \

}while(0)

这是一个奇怪的循环,它根本就只会运行一次,为什么不去掉外面的do{..}while结构呢?我曾一度在心里把它叫做“怪圈”。原来这也是非常巧妙的技巧。在工程中可能经常会引起麻烦,而上面的定义能够保证这些麻烦不会出现。下面是解释:

假设有这样一个宏定义

#define macro(condition) \

if(condition) dosomething();

现在在程序中这样使用这个宏:

if(temp)

macro(i);

else

doanotherthing();

一切看起来很正常,但是仔细想想。这个宏会展开成:

if(temp)

if(condition) dosomething();

else

doanotherthing();

这时的else不是与第一个if语句匹配,而是错误的与第二个if语句进行了匹配,编译通过了,但是运行的结果一定是错误的。为了避免这个错误,我们使用do{….}while(0) 把它包裹起来,成为一个独立的语法单元,从而不会与上下文发生混淆。同时因为绝大多数的编译器都能够识别do{…}while(0)这种无用的循环并进行优化,所以使用这种方法也不会导致程序的性能降低。

几个小小的警告

正如微软声称的一样,宏定义与预编译器指令是强大的,但是它又使得程序难以调试。所以在定义宏的时候不要节省你的字符串,一定要力争完整的描述这个宏的功能。同时在定义宏的时候如有必要(比方使用了if语句)就要使用do{…}while(0)将它封闭起来。在宏定义的时候一定要注意各个宏之间的相互依赖关系,尽量避免这种依赖关系的存在。下面就有这样一个例子。

设有一个静态数组组成的整型队列,在定义中使用了这样的方法:int array[]={5, 6, 7, 8};

我们还需要在程序中遍历这个数组。通常的做法是使用一个宏定义

#define ELE_NUM 4

…………………………..

……………………………..

for(int I=0;I

{

cout<

}

由于某种偶然的原因,我们删除了定义中的一个元素,使它变成:array[]={5,6,7}而却忘了修改ELE_NUM的值。那么在上面的代码中马上就会发生访问异常,程序崩溃。然后是彻夜不眠的调试,最后发现问题出在这个宏定义上。解决这个问题的方法是不使用

array[]={….}这样的定义,而显式的申明数组的大小:

array[ELE_NUM]={….}

这样在改动数组定义的时候,我们就不会不记得去改宏定义了。总之,就是在使用宏定义的时候能够用宏定义的地方统统都用上。我发现的另一个有趣的现象是这样的:假设现在有一个课程管理系统,学生的人数用宏定义为:#define STU_NUM 50而老师的人数恰好也是50人,于是很多人把所有涉及到老师人数的地方通通用上STU_NUM这个宏。另一个学期过去,学生中的一个被开除了,系统需要改变。怎么办呢?简单的使用#define STU_NUM 4Array 么?如果是这样,一个老师也就被开除了,我们不得不手工在程序中去找那些STU_NUM宏然后判断它是否是表示学生的数目,如果是,就把它改成4Array。天哪,这个宏定义制造的麻烦比使用它带来的方便还多。正确的方法应该是为老师的数目另外定义一个宏:#define TEA_NUM 50当学生的数目改变以后只要把STU_NUM 定义为4Array 就完成了系统的更改。所以,当程序中的两个量之间没有必然联系的时候一定不要用其中的一个宏去替代另一个,那只会让你的程序根本无法改动。最后,建议C/C++语言的初学者尽

可能多的在你的程序中使用宏定义和预编译指令。多看看MFC,ATL或者LINUX的源代码,你会发现C语言强大的原因所在。

TRACE

TRACE(exp)

说明:把一个格式化字符串送到转储设备,例如,文件或调试监视器,而提供与printf相似的功能。同MS_DOS下C程序的printf一样,TRACE宏是一个在程序运行时跟踪变量值的方便形式。在DEBUG环境中,TRACE宏输出到afxDump。在Release版中他不做任何工作。

注释:此宏只在MFC的DEBUG版中有效。

TRACE0

TRACE0(exp)

说明:与TRACE相似,但他把跟踪字符串放在代码段中,而不是DGROUP,因此使用少的DGROUP空间。TRACE0是一组跟踪宏的一个变体,这些宏可用于调试输出。这一组包括TRACE0,TRACE1,TRACE2和TRACE3,这些宏不同在于所取参数的数目不同。TRACE0只取一个格式化字符串并可用于简单文本消息。TRACE1取一格式化字符串加上一个变量——一个将转储的变量。同样,TRACE2,TRACE3分别取2个或3个参数(在格式化字符串之后)。如果用户以便以了应用程序的发行版,那么它只把数据转储到afxDump。

注释:此宏只在MFC的DEBUG中有效。

TRACE1

TRACE1(exp,param1)

TRACE2

TRACE2(exp,param1,param2)

TRACE3

TRACE3(exp,param1,param2,param3)

THROW

THROW(exception_object_pointer)

说明:派出指定的异常。THROW中断程序的运行,把控制传递给用户程序中的相关的CA TCH块。如果用户没有提供CA TCH块,那么控制被传递到一个MFC模块,他打印出一个错误并终止运行。

THROW_LAST

THROW_LAST()

说明:此宏允许用户派出一个局部建立的异常。如果用户试图排除一个刚发现的异常,那么一般此异常将溢出并被删除。使用THROW_LAST,此异常被直接传送到下一个CATCH处理程序。

TRY

TRY

说明:使用此宏建立一TRY块。一个TRY识别一个可排除异常的代码块。这些异常在随后的CATCH和AND_CA TCH块处理。传递是允许的:异常可以传递一个外部TRY块,或者忽略它们或者使用THROW_LAST宏。

CA TCH

CA TCH(exception_class,exception_object_pointer_name)

说明:使用此用定义一个代码块,此代码用来获取当前TRY块中都一个异常类型。异常处理代码可以访问异常对象,如何合适的话,就会得到关于异常的特殊原因的更多消息。调用THROW_LAST宏以把处理过程一下一个外部异常框架,如果exception-class是类

CExceptioon,那么会获取所有异常类型。用户可以使用CObject::IsKindOf成员函数以确定那个特别异常被排除。一种获取异常的最好方式是使用顺序的AND_CATCH语句,每个带一个不同的异常类型。此异常类型的指针由宏定义,用户不必定义。

注释:此CATCH块被定义作一个C++范围(由花括号描述)。如用户在此范围定义变量,那么它们只在吃范围内可以访问。他还可以用于异常对象的指针名。

END_CATCH

END_CATCH

说明:标识最后的CA TCH或AND_CA TCH块的末尾。

AND_CATCH

AND_CATCH(exception_class,exception _object_point_name)

说明:定义一个代码块,它用于获取废除当前TRY块中的附加异常类型。使用CATCH宏以获得一个异常类型,然后使用AND_CATCH宏获得随后的异常处理代码可以访问异常对象(若合适的话)已得到关于异常的特别原因的更多消息。在AND_CATCH块中调用THROW_LAST宏以便把处理过程移到下个外部异常框架。AND_CA TCH可标记CA TCH或AND_CATCH块的末尾。

注释:AND_CATCH块被定义成为一个C++作用域(由花括号来描述)。若用户在此作用域定义变量,那么记住他们只在此作用域中可以访问。他也用于exception_object_pointer_name变量。

调试宏:ASSERT()、VERIFY()、TRACE()

这三个宏在Debug环境下特别有效,常用于代码的跟踪调试。它们是否起作用取决于是否定义了预定义了宏_DEBUG

VERIFY

VERIFY(booleanExpression)

说明:在MFC的DEBUG版中,VERIFY宏计算它的变量值。如果结果为0,那么宏打印一个诊断消息并中止程序。如果条件不为0,那么什么工作也不作。诊断有如下形式:assertion failed in file in line 其中name是源文件的名字,num是在源文件中失败的中止行号。在MFC的Release版中,VERIFY计算表达式值但不打印或中止程序。例如:如果表达式是个函数调用,那么调用成功。

ASSERT

ASSERT(booleanExpression)

说明:计算变量的值。如果结构的值为0,那么此宏便打印一个诊断消息并且表示运行失败。如果条件为非0,那么什么也不做。诊断消息的形式为:assertion failed in file in line 其中name是元文件名,num是源文件中运行失败的中断号。在Release版中,ASSERT不计算表达式的值也就不中断程序。如果必须计算此表达式的值且不管环境如何那么用VERIFY 代替ASSERT。

注释:ASSERT只能在Debug版中用

ASSERT_V AILD

ASSERT_V AILD(pObject)

说明:用于检测关于对象的内部状态的有效性。ASSERT_V ALID调用此对象的AssertValid 成员函数(把它们作为自己的变量来传递)。在Release版中ASSERT_V ALID什么也不做。在DEBUG版中,他检查指针,以不同于NULL的方式进行检查,并调用对象自己的AssertValid成员函数。如果这些检测中有任何一个失败的话,那么他会以与ASSERT相同的方法显示一个警告的消息。

注释:此函数只在DEBUG版中有效。

DECLARE_MESSAGE_MAP()

说明:用户程序中的每个CCmdTarget派生类必须提供消息映射以处理消息。在类定义的末尾使用DECLARE_MESSAGE_MAP宏。接着,在定义类成员函数的.CPP文件中,使用BEGIN_MESSAGE_MAP宏,每个用户消息处理函数的宏项下面的列表以及END_MESSAGE_MAP宏。

注释:如果在DECLARE_MESSAGE_MAP之后定义任何一个成员,那么必须为他们指定一个新存取类型(公共的,私有的,保护的)。

BEGIN_MESSAGE_MAP

BEGIN_MESSAGE_MAP(the class,baseclass)

说明:使用BEGIN_MESSAGE_MAP开始用户消息映射的定义。在定义用户类函数的工具(.cpp)文件中,以BEGIN_MESSAGE_MAP宏开始消息映射,然后为每个消息处理函数增加宏项,接着以END_MESSAGE_MAP宏完成消息映射。

END_MESSAGE_MAP

END_MESSAGE_MAP

说明:使用END_MESSAGE_MAP宏结束用户的消息映射定义

DEBUG_NEW

#define new DEBUG_NEW

说明:帮助查找内存错误。用户在程序中使用DEBUG_NEW,用户通常使用new运算符来从堆上分配。在Debug模式下(但定义了一个DEBUG符号),DEBUG_NEW为它分配的每个对象记录文件名和行号。然后,在用户使用CMemoryState::DumpAllObjectSince成员函数时,每个以DEBUG_NEW分配的对象分配的地方显示出文件名和行号。为了使用DEBUG_NEW,应在用户的资源文件中插入以下指令:#define new DEBUG_NEW 一旦用户插入本指令,预处理程序将在使用new的地方插入DEBUG_NEW,而MFC作其余的工作。但用户编译自己的程序的一个发行版时,DEBUG_NEW便进行简单的new操作,而且不产生文件名和行号消息。

RUNTIME_CLASS

RUNTIME_CLASS(class_name)

说明:使用此宏从c++类中获取运行时类结构。RUNTIME_CLASS为由class_name指定的类返回一个指针到CRuntimeClass结构。只有以DECLARE_DYNAMIC,DECLARE_DYNCREATE或DECLARE_SERIAL定义的CObject派生类才返回到一个CRuntimeClass结构的指针。

DECLARE_DYNAMIC

DECLARE_DYNAMIC(class_name)

说明:但从CObject派生一个类时,此宏增加关于一个对象类的访问运行时功能。把DECLARE_DYNAMIC宏加入类的头文件中,然后在全部需要访问此类对象的.CPP文件中都包含此模块。如果像所描述那样使用DELCARE_DYNAMIC和IMPLEMENT_DYNAMIC 宏,那么用户便可使用RUNTIME_CLASS宏和CObject::IsKindOf函数以在运行时间决定对象类。如果DECLARE_DYNAMIC包含在类定义中,那么IMPLEMETN_DYNAMIC必须包含在类工具中。

IMPLEMENT_DYNAMIC

IMPLEMENT_DYNAMIC(class_name,base_class_name)

说明:通过运行时在串行结构中为动态CObject派生类访问类名和位置来产生必要的C++代码。在.CPP文件中使用IMPLEMENT_DYNAMIC宏,接着一次链接结果对象代码

DECLARE_DYNCREATE(class_name)

说明:使用DECLARE_DYNCRETE宏以便允许CObject派生类的对象在运行时刻自动建立。主机使用此功能自动建立新对象,例如,但它在串行化过程中从磁盘读一个对象时,文件及视图和框架窗应该支持动态建立,因为框架需要自动建立它。把DECLARE_DYNCREATE 宏加入类的.H文件中,然后在全部需要访问此类对象的.CPP文件中包含这一模式。如果DECLARE_DYNCREATE包含在类定义中,那么IMPLEMENT_DYNCREATE必须包含在类工具中。

IMPLEMENT_DYNCREATE

IMPLEMENT_DYNCREATE(class_name,base_class_name)

说明:通过DECLARE_DYNCREATE宏来使用IMPLEMENT_DYNCREATE宏,以允许CObject派生类对象在运行时自动建立。主机使用此功能自动建立对象,例如,但它在串行化过程中从磁盘读去一个对象时,他在类工具里加入IMPLEMENT_DYNCREATE宏。若用户使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏,那么接着使用RUNTIME_CLASS宏和CObject::IsKindOf成员函数以在运行时确定对象类。若declare_dyncreate包含在定义中,那么IMPLEMENT_DYNCREATE必须包含在类工具中。DECLARE_SERIAL

DECLARE_SERIAL(class_name)

说明:DECLARE_SERIAL为一个可以串行化的CObject派生类产生必要的C++标题代码。串行化是把某个对象的内容从一个文件读出和写入一文件。在.H文件中使用DECLARE_SERIAL宏,接着在需要访问此类对象的全部.CPP文件中包含此文件。如果DECLARE_SERIAL包含在类定义中,那么IMPLEMENT_SERIAL必须包含在类工具中。DECLARE_SERIAL宏包含全部DECLARE_DYNAMIC,IMPLEMENT_DYCREATE的功能。IMPLEMENT_SERIAL

IMPLEMENT_SERIAL(class_name,base_class_name,wSchema)

说明:通过运行时在串行结构中动态CObject派生类访问类名和位置来建立必要的C++代码。在.CPP文件中使用IMPLEMENT_SERIAL宏,然后一次链接结果对象代码。

ON_COMMAND

ON_COMMAND(id,memberFxn)

说明:此宏通过ClassWizard或手工插入一个消息映射。它表明那个函数将从一个命令用户接口(例如一个菜单项或toolbar按钮)处理一个命令消息。当一个命令对象通过指定的ID 接受到一个Windows WM_COMMAND消息时,ON_COMMAND将调用成员函数memberFxn处理此消息。在用户的消息映射中,对于每个菜单或加速器命令(必须被映射到一个消息处理函数)应该确实有一个ON_COMMAND宏语句。

ON_CONTROL

ON_CONTROL(wNotifyCode,id,memberFxn)

说明:表明那个函数将处理一个常规控制表示消息。控制标识消息是那些从一个控制夫发送到母窗口的消息。

ON_MESSAGE

ON_MESSAGE(message,memberFxn)

说明:指明那个函数将处理一用户定义消息。用户定义消息通常定义在WM_USER到0x7FF 范围内。用户定义消息是那些不是标准Windows WM_MESSAGE消息的任何消息。在用户的消息映射中,每个必须被映射到一个消息处理函数。用户定义消息应该有一个ON_MESSAGE宏语句。

ON_REGISTERED_MESSAGE

ON_REGISTERED_MESSAGE(nmessageVarible,memberFxn)

说明:Windows的RegisterWindowsMesage函数用于定义一个新窗口消息,此消息保证在整个系统中是唯一的。此宏表明那个函数处理已注册消息。变量nMessageViable应以NEAR 修饰符来定义。

ON_UPDATE_COMMAND_UI

ON_UPDATE_COMMAND_UI(id,memberFxn)

说明:此宏通常通过ClassWizard被插入一个消息映射,以指明哪个函数将处理一个用户接口个更改命令消息。在用户的消息映射中,每个用户接口更改命令(比讯被映射到一个消息处理函数)应该有一个ON_UPDATE_COMMAND_UI宏语句。

ON_VBXEVENT

ON_VBXEVENT(wNotifyCode,memberFxn)

说明:此宏通常通过ClassWizard被插入一个消息映射,以指明该个函数将处理一个来自VBX控制的消息。在用户的消息映射中每个被映射到一消息处理函数的VBX控制消息应该有一个宏语句。

VC中的“\”用在编译预处理语句中,主要作用就是连接下一段的字符串,这个“\”的作用是提示编译器,后面还有字符,不过这些字符在下一行,如果删除,那么编译器就认为#define到此为止,那么下面的字符就要报错,而加上这个“\”,下面的字符就是加在#define 后面的符号中的,比如

#define CLASS class \

= new class

其实就是#define CLASS class = new class

另外说下预处理中还有“##”字符,这个字符的作用是连接字符串,比如class##Name 的意思就是className。

考研常用翻译技巧总结

考研常用翻译技巧总结 考研翻译题里一般会考查三方面的内容: 1、专有名词(如operational research expert)、习惯用法(如depend on)及多义词的翻译(如school、set的多义) 2、一般性翻译技巧:包括词义选择,词序调整,词性转换和增词法等等 3、具体句型(定从、状从、主从、宾从、表从、同位从、强调结构、并列、比较、倒装、插入、被动、否定等) 其中2、3是大考点,具体内容在此不赘述。可看出,应对翻译题的主要武器是翻译技巧,下面正式进入正题(常用方法、被动语态译法、形容词译法、举例详解) 一、常用方法 英汉两种语言在句法、词汇、修辞等方面均存在着很大的差异,因此在进行英汉互译时必然会遇到很多困难,需要有一定的翻译技巧作指导。常用的翻译技巧有增译法、省译法、转换法、拆句法、合并法、正译法、反译法、倒置法、包孕法、插入法、重组法和综合法等。这些技巧不但可以运用于笔译之中,也可以运用于口译过程中,而且应该用得更加熟练。 1 增译法:指根据英汉两种语言不同的思维方式、语言习惯和表达方式,在翻译时增添一些词、短句或句子,以便更准确地表达出原文所包含的意义。这种方式多半用在汉译英里。汉语无主句较多,而英语句子一般都要有主语,所以在翻译汉语无主句的时候,除了少数可用英语无主句、被动语态或“There be…”结构来翻译以外,一般都要根据语境补出主语,使句子完整。英汉两种语言在名词、代词、连词、介词和冠词的使用方法上也存在很大差别。英语中代词使用频率较高,凡说到人的器官和归某人所有的或与某人有关的事物时,必须在前面加上物主代词。因此,在汉译英时需要增补物主代词,而在英译汉时又需要根据情况适当地删减。英语词与词、词组与词组以及句子与句子的逻辑关系一般用连词来表示,而汉语则往往通过上下文和语序来表示这种关系。因此,在汉译英时常常需要增补连词。英语句子离不开介词和冠词。另外,在翻译时还要注意增补一些原文中暗含而没有明言的词语和一些概括性、注释性的词语,以确保译文意思的完整。 总之,通过增译,一是保证译文语法结构的完整,二是保证译文意思的明确。如: (1)What about calling him right away? 马上给他打个电话,你觉得如何?(增译主语和谓语) (2)If only I could see the realization of the four modernizations. 要是我能看到四个现代化实现该有多好啊!(增译主句) (3) Indeed, the reverse is true 实际情况恰好相反。(增译名词) (4) Even the people in the fascist countries were stripped of their human rights. 就是法西斯国家本国的人民也被剥夺了人权。(增译物主代词) (5)While the magistrates were free to burn down house, the common people were forbidden to light lamps. (增译连词)只许州官放火,不许百姓点灯。 (6)This is yet another common point between the people of our two countries.

常用的专业销售技巧总结-销售技巧完整篇.doc

常用的专业销售技巧总结-销售技巧 常用的专业销售技巧总结如果只是一个假象的问题,也仍然要予以处理。只不过我们可以把它推迟到在进行产品介绍时找一个合适的地方予以处理。 2、表示理解 表示理解是指对客户的反对意见表示理解,而不是同意或同情。比如: 购买者:“李先生,恐怕你的价格太高了些。” 销售员:“我理解你为什么会有这种感觉。” 这种表示理解的表述目的在于承认购买者对价格的忧虑,但却

没有表示赞同或表现出防卫的意识,在答复人们的反对意见时永远不要使用“但是”或“然而”这样的转折词。用了这两个词就好象是在马上否定掉它们前面的那句话,因而也就在销售人员和购买者之间竖起了一道障碍,如果你一定用连词的话,请用“那么”。 错误表述:“是啊,似乎是贵了点,但是……” 正确表述:“陈先生,我理解你的观点,让我们就来谈谈这个问题。” 这样双方就建立起了合作关系,而不是抵触的情绪。 3、让客户对你的反驳作好准备 在这一刻我们的目标是降低客户的紧张程度,从而减少引起冲突的可能性。

4、提供新的证据 至此,既然反对意见已经得到了降温,我们便可以提出反驳了。根据反对意见的类别,定出最具体的、符合逻辑和确切的答复,接着把它们记住,并一遍遍地使用直到它听起来让你感到自然为止。 5、征求订单 处理反对意见的最后一步是征求订单。在你作出尽可能最佳的答复后,你可以征求客户意见,是否同意购买。 处理反对意见的技巧 在处理反对意见时,我们的目标是既消除不同意见,又不让客户失去面子。

常用的专业销售技巧总结-销售技巧 常用的专业销售技巧总结如果只是一个假象的问题,也仍然要予以处理。只不过我们可以把它推迟到在进行产品介绍时找一个合适的地方予以处理。 2、表示理解 表示理解是指对客户的反对意见表示理解,而不是同意或同情。比如: 购买者:“李先生,恐怕你的价格太高了些。”

Execl宏程序总结讲解

宏 Sub Macro1() ' ' Macro1 Macro ' 宏由 lenovo 录制,时间: 2012/9/19 ' ' 快捷键: Ctrl+z ' k = 1 '循环变量 Do While k <= Worksheets.Count '工作表数量 Sheets(k).Select '逐个设置工作为当前工作表 Rem ====确定真正的最后一行 Rem ====先用定位的方法找到工作表中的最后一个单元格 Selection.SpecialCells(xlCellTypeLastCell).Select flag = False Rem ====向上循环判断是否是空行 Do While flag = False Rem ====如果是第一行,退出循环,否则后面的Offset语句向上移动时会出错 If ActiveCell.Row = 1 Then Exit Do End If Rem ====判断当前行是不是空行 Selection.End(xlToLeft).Select temp1 = IsEmpty(ActiveCell.Value) Selection.End(xlToRight).Select temp2 = IsEmpty(ActiveCell.Value) If temp1 = True And temp2 = True Then Rem ====如果是空行则选择上一行 Selection.Offset(-1, 0).Select Else Rem====如果不是空行,说明已经是真正的最后一行,退出循环 flag = True Exit Do End If Loop Rem====把最后一行的行号赋给一个变量

常用专业销售技巧总结(doc 32页)

常用专业销售技巧总结(doc 32页)

常用的专业销售技巧总结 I)开场白: 你的自我介绍必须注明以下几点: 你是谁? 你是代表哪家公司? 你的来意? 为什么他们要花时间听你谈话? 例子: “陈先生,我们曾经使一家和你们情况类似的公司将他们的产品购买量降低了15%,而他们并没有付出多余的工作。我相信我们也可以为你们这样做——为彻底了解你们的情况,我想问你们几个问题…… (II) 寒喧 你们的寒喧应该友好而简短,你的形象和微笑应该有利于创造一种友好的气氛。密切注意观察你未来的客户。买与不买的感觉通常是很明显的。它告诉你,你应进入销售模式中的哪一步了。你或许已做成了一笔销售业务。但另一方面,客户可能对此根本不感兴趣。他/她或许要么是持非常消级的态度,要么是根本不听你在说些什么。 我们每一次拜访新老客户的时候,我们都会发现自己正面

临着以下三种可能出现的购买氛围中的一种。 ·积极的购买氛围:客户积极地倾向于购买。不必要作任何促销游说,可以直接成交。 ·中性的购买氛围:客户既不积极地倾向于也不消极地对待购买.你就必须开始去发现他的需求。如果你销售技巧运用得当,又有着足够的产品知识,那么客户就极有可能会购买。 ·消极的购买氛围:客户采取封闭的心态,他根本就不感兴趣,有时还可能说出极其消极的话.在这种情况下,他们不可能作出任何购买的决定.那么我们需极短的时间内把客户至少引领到中性区域,否则你就根本没有机会做成生意。 在首次拜访新客户时,可能出现的主要挑战是怎样把客户从消极的区域引领到中性区域,以使他们从心理和感情上作好接受新内容的准备。许多知识丰富的专业销售人员认为包括寒喧在内你一般只有25秒钟不到的时间去羸得客户的兴趣。同时,越来越多的销售人员坚持认为对于消极和冷漠的购买态度加紧催逼是无济于事的。

宏定义用法总结

C语言宏定义技巧用法总结 写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。 typedef unsigned char boolean; /* Boolean value type. */ typedef unsigned long int uint32; /* Unsigned 32 bit value */ typedef unsigned short uint16; /* Unsigned 16 bit value */ typedef unsigned char uint8; /* Unsigned 8 bit value */ typedef signed long int int32; /* Signed 32 bit value */ typedef signed short int16; /* Signed 16 bit value */ typedef signed char int8; /* Signed 8 bit value */

//下面的不建议使用 typedef unsigned char byte; /* Unsigned 8 bit value type. */ typedef unsigned short word; /* Unsinged 16 bit value type. */ typedef unsigned long dword; /* Unsigned 32 bit value type. */ typedef unsigned char uint1; /* Unsigned 8 bit value type. */ typedef unsigned short uint2; /* Unsigned 16 bit value type. */ typedef unsigned long uint4; /* Unsigned 32 bit value type. */ typedef signed char int1; /* Signed 8 bit value type. */ typedef signed short int2; /* Signed 16 bit value type. */ typedef long int int4; /* Signed 32 bit value type. */ typedef signed long sint31; /* Signed 32 bit value */ typedef signed short sint15; /* Signed 16 bit value */ typedef signed char sint7; /* Signed 8 bit value */ 3,得到指定地址上的一个字节或字 #define MEM_B( x ) ( *( (byte *) (x) ) ) #define MEM_W( x ) ( *( (word *) (x) ) )

abaqus常用技巧总结

a b a q u s常用技巧总结-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

Abaqus常用技巧总结 本手册是由simwe等论坛上精华帖以及本人下载的其他资料整理,由于很多资料搜集已经很久,而且时间有限,都没有注明原作者,也没有最资料进行分类整理,见谅。如需要,请PM给我。 Shelly31 Python.tzy@https://www.360docs.net/doc/8518830050.html, 2007.8.1 建议阅读方式:

目录 ABAQUS常用技巧总结 (2) 目录 (3) 1.对TIME INCREMENT的根本理解 (5) 2.ABAQUS 请问 MOMENT的加载 (5) 3.ABAQUS计算时C盘的临时文件太大了,怎么改目录? (6) 4.CAE中如何加预应力 (6) 5.HYPERMESH里面看到ABAQUS分析的结果 (6) 6.X-Y PLOTS (6) 7.把上一次的分析结果作为下一次分析的初始条件该怎么做 (7) 8.材料方向与增量步 (8) 9.多个INP文件如何实现批处理 (9) 10.关于ABAQUS的任务管理 (10) 11.关于数据的输入输出 (12) 12.后处理积分 (12) 13.接触分析激活杀死 (13) 14.利用QUEUE的功能由本地机器向远程UNIX机器提交ABAQUS作业的方法[精华] (14) 15.利用命令进行计算时如何设置调用内存量 (17) 16.清华大学BBS的ABAQUS精华 (17) 17.请问怎么实现双曲线 (55)

18.取消坐标系等的显示 (56) 19.如何在计算中修改材料特性 (57) 20.输出计算过程中的总质量和总刚度矩阵 (60) 21.先张预应力: (61) 22.用户子程序的使用 (61) 23.怎样设定用双CPU机器进行ABAQUS计算 (61) 24.中途停止正在运算的JOB (62) 25.自适应网格技术 (62) 26.ABAQUS计算与内存 (63) 27.质量缩放 (64) 28.ABAQUS多处理器进行并行计算的效果研究 (79) 29.YAHOO讨论组摘录--CONTACT+OVERCLOSURE (81) 30.原创:无限元建立方法,希望得到加分 (95) 31.[分享]ABAQUS 使用问答 (102) 32.[转帖]ABAQUS6.4导入外来模型的几点小经验! (122) 33.ABAQUS的多图层绘图 (125) 34.子结构 (125) 35.如何在不同的分析步改变材料的参数 (126) 36.模型的重启动分析-RESTART (127) 37. ABAQUS的单位心得 (128)

STM32启动文件的选择及宏定义及芯片型号更改IAP总结(精)

STM32启动文件的选择及宏定义及芯片型号更改 IAP总结 startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32F107xx startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_hd_vl.s 大容量的STM32F100xx startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_ld_vl.s 小容量的STM32F100xx startup_stm32f10x_md.s 中容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_md_vl.s 中容量的STM32F100xx startup_stm32f10x_xl.s FLASH在512K到1024K字节的STM32F101xx, STM32F102xx,STM32F103xx cl:互联型产品,stm32f105/107系列 vl:超值型产品,stm32f100系列 xl:超高密度产品,stm32f101/103系列 ld:低密度产品,FLASH小于64K md:中等密度产品,FLASH=64 or 128 hd:高密度产品,FLASH大于128 在KEIL下可以在项目的选项C/C++/PREPROMCESSOR symbols的Define栏里定义,比如STM32F10X_CL 也可以在STM32F10X.H里用宏定义 #if !defined (STM32F10X_LD && !defined (STM32F10X_LD_VL && !defined (STM32F10X_MD && !defined (STM32F10X_MD_VL && !defined (STM32F10X_HD && !defined (STM32F10X_XL && !defined (STM32F10X_CL #define STM32F10X_HD #endif

Win10使用技巧总结

Microsoft Windows10 日常使用新增快捷键使用技巧大全 Win10技术预览版作为微软最新一代操作系统,笔者在体验过程中总结了一些日常应用的小技巧,分享给大家。其中有些功能并非Win10独有,但功能十分有用或者较少人知道,笔者也会列出来供大家参考。 快捷键的使用 快捷键的应用极大的方便了Windows操作系统的使用,除了我们在Windows XP/7/8熟知的“Ctrl + c”、“Ctrl + V”等日常操作外,还有哪些我们不熟悉、或者在Windows 10新增的快捷键操作呢? Windows + X:快速打开快捷菜单。 Windows + R:快速打开运行。

Windows + 方向键:用于快速分屏功能。 ?贴靠窗口:Win +左/右> Win +上/下>窗口可以变为1/4大小放置在屏幕4个角落 ?切换窗口:Alt + Tab(不是新的,但任务切换界面改进) ?任务视图:Win + T ab(松开键盘界面不会消失) ?创建新的虚拟桌面:Win + Ctrl + D ?关闭当前虚拟桌面:Win + Ctrl + F4 ?切换虚拟桌面:Win + Ctrl +左/右 另外,微软为Win10技术预览版命令行(Command Prompt)加入了Ctrl + V的支持,Scott Hanselman为此整理了命令行中的键盘快捷键。 Win10新增功能快捷键大全: 贴靠窗口:Win + 左/右> Win + 上/下> 窗口可以变为1/4 大小放置在屏幕4 个角落。 切换窗口:Alt + Tab(不是新的,但任务切换界面改进)。 任务视图:Win + Tab(松开键盘界面不会消失)。 创建新的虚拟桌面:Win + Ctrl + D。 关闭当前虚拟桌面:Win + Ctrl + F4。 切换虚拟桌面:Win + Ctrl + 左/右。 Win10常用Win快捷键

C宏定义

C/C++中宏使用总结 .C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令。虽然它们实际上不是C语言的一部分,但却扩展了C程 序设计的环境。本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性。ANSI标准定义的C语言预处理程序包括下列命令: #define,#error,#i nclude,#if,#else,#elif,#endif,#ifdef,#ifndef,#undef,#line,#pragma等。非常明显,所有预处理命令均以符号#开头,下面分别加以介绍。 1、#define 命令#define定义了一个标识符及一个串。在源程序中每次遇到该标识符时,均以定义的串代换它。ANSI标准将标识符定义为宏名,将替换过程称为宏 替换。命令的一般形式为: #define identifier string 注意: ? 该语句没有分号。在标识符和串之间可以有任意个空格,串一旦开始,仅由一新行结束。 ? 宏名定义后,即可成为其它宏名定义中的一部分。 ? 宏替换仅仅是以文本串代替宏标识符,前提是宏标识符必须独立的识别出来,否则不进行替换。例如:#define XYZ this is a test,使用宏printf("XYZ");//该段不打印"this is a test"而打印"XYZ"。因为预编译器识 别出的是"XYZ" ? 如果串长于一行,可以在该行末尾用一反斜杠' \'续行。

2、#error 处理器命令#error强迫编译程序停止编译,主要用于程序调试。 3、#i nclude 命令#i nclude使编译程序将另一源文件嵌入带有#i nclude的源文件,被读入的源文件必须用双引号或尖括号括起来。例如: #i nclude"stdio.h"或者#i nclude 这两行代码均使用C编译程序读入并编译用于处理磁盘文件库的子程序。 将文件嵌入#i nclude命令中的文件内是可行的,这种方式称为嵌套的嵌入文件,嵌套层次依赖于具体实现。 如果显式路径名为文件标识符的一部分,则仅在哪些子目录中搜索被嵌入文件。否则,如果文件名用双引号括起来,则首先检索当前工作目录。如果未发现文件, 则在命令行中说明的所有目录中搜索。如果仍未发现文件,则搜索实现时定义的标准目录。 如果没有显式路径名且文件名被尖括号括起来,则首先在编译命令行中的目录内检索。 如果文件没找到,则检索标准目录,不检索当前工作目录。 4、条件编译命令 有几个命令可对程序源代码的各部分有选择地进行编译,该过程称为条件编译。商业软件公司广泛应用条件编译来提供和维护某一程序的许多顾客版本。 #if、#else,#elif及#endif

Windows10_使用技巧总结

Win10技术预览版作为微软最新一代操作系统,笔者在体验过程中总结了一些日常应用的小技巧,分享给大家。其中有些功能并非Win10独有,但功能十分有用或者较少人知道,笔者也会列出来供大家参考 快捷键的使用 快捷键的应用极大的方便了Windows操作系统的使用,除了我们在Windows XP/7/8熟知的“Ctrl + c”、“Ctrl + V”等日常操作外, 还有哪些我们不熟悉、或者在Windows 10新增的快捷键操作呢? Windows + X:快速打开快捷菜单。 Windows + R:快速打开运行。 Windows + 方向键:用于快速分屏功能 。 ? 贴靠窗口:Win +左/右> Win +上/下>窗口可以变为1/4大小放置在屏幕4个角落 ? 切换窗口:Alt + Tab(不是新的,但任务切换界面改进) ? 任务视图:Win + Tab(松开键盘界面不会消失) ? 创建新的虚拟桌面:Win + Ctrl + D ? 关闭当前虚拟桌面:Win + Ctrl + F4 ? 切换虚拟桌面:Win + Ctrl +左/右 另外,微软为Win10技术预览版命令行(Command Prompt)加入了Ctrl + V的支持,Scott Hanselman 为此整理了命令行中的键盘快捷键。 Win10新增功能快捷键大全: 贴靠窗口:Win + 左/右> Win + 上/下>窗口可以变为 1/4 大小放置在屏幕 4 个角落。 切换窗口:Alt + Tab(不是新的,但任务切换界面改进)。 任务视图:Win + Tab(松开键盘界面不会消失)。、、 创建新的虚拟桌面:Win + Ctrl + D。 关闭当前虚拟桌面:Win + Ctrl + F4。

宏的实验报告

实验报告 课程名称数据库技术与应用 实验项目名称宏的实验 班级与班级代码11审计学1班 实验室名称(或课室) SS1-304 专业审计学 任课教师方清华 学号:11251003148 姓名:郑萍玲 实验日期:2013 年 5 月26日 广东商学院教务处制

姓名郑萍玲实验报告成绩 评语: 指导教师(签名) 年月日说明:指导教师评分后,实验报告交院(系)办公室保存

实验4 在“教务管理”数据库中建立宏 1.实验目的 1)掌握宏的结构、类型 2)掌握各种创建宏的方法 3)掌握选择宏的创建方法与功能 2.实验条件 1.微型计算机。 2.Access 2003。 3.实验内容、操作步骤及结果 3.1建立条件宏 1)建立“教师录入成绩起始窗” 操作步骤如下: 选择“窗体”对象,点击“在设计视图中创建窗体”,在主体中利用相关控件做出窗体,将文本框命名为“密码”,查看结果。 实验结果截图如下: 2)要求密码输入时以“*”显示。 操作步骤如下: 点击文本框属性,在“输入掩码”栏选择“密码”。 实验结果截图如下:

3)建立一个名为“成绩录入条件宏”的宏对象,要求在密码框中输入密码(设密码为111)正确时,打开“成绩录入”窗体。 操作步骤如下: 选择“宏”对象,点击“新建”,输入如下表达式,密码框中输入密码(设密码为111)正确时,打开“成绩录入”窗体,密码框中输入密码错误时作出警告。返回到“窗体”对象,点击“教师录入成绩起始窗”,将文本框属性的“更新后”设置为“成绩录入条件宏”。 实验结果截图如下:

3.2用条件宏判断用户名及密码 1)建立“用户名”文本框的名称为“Text1”,“密码”文本框的名称为“Text3”的“用户名窗”。要求:当输入用户名“ABC”(大写)及密码“123”正确时,单击“确定”按钮,可以打开“成绩录入”窗体,录入学生成绩。当用户名和密码输入不正确,单击“确定”按钮时,弹出“非法用户”警告消息框并关闭本窗体。 操作步骤如下: 首先建立“成绩起始窗”。再建一个“用户条件宏”。如下图所示,得出条件宏。 实验结果截图如下:

常用java技巧总结

面向对象的思想特点 A:是一种更符合我们思想习惯的思想 B:可以将复杂的事情简单化 C:将我们从执行者变成了指挥者 面向对象: 我们怎么才能更符合面向对象思想呢? A:有哪些类呢? B:每个类有哪些东西呢? C:类与类直接的关系是什么呢? 开发,设计,特征 面向对象开发 就是不断的创建对象,使用对象,指挥对象做事情。 面向对象设计 其实就是在管理和维护对象之间的关系。 面向对象特征 封装(encapsulation) 继承(inheritance) 多态(polymorphism) 继承:把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容。这个关系叫继承。 继承的好处: A:提高了代码的复用性 B:提高了代码的维护性 C:让类与类产生了一个关系,是多态的前提 继承的弊端: A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。 原则:低耦合,高内聚。 耦合:类与类的关系 内聚:自己完成某件事情的能力 B:打破了封装性 Java中继承的特点 A:Java中类只支持单继承 B:Java中可以多层(重)继承(继承体系) 继承的注意事项: A:子类不能继承父类的私有成员 B:子类不能继承父类的构造方法,但是可以通过super去访问 C:不要为了部分功能而去继承

多态:同一个对象在不同时刻体现出来的不同状态。 多态前提: A:有继承或者实现关系。 B:有方法重写。 C:有父类或者父接口引用指向子类对象。 多态中的成员访问特点 A:成员变量 编译看左边,运行看左边 B:构造方法 子类的构造都会默认访问父类构造 C:成员方法 编译看左边,运行看右边 D:静态方法 编译看左边,运行看左边 多态的好处 提高了程序的维护性(由继承保证) 提高了程序的扩展性(由多态保证) 多态的弊端 不能访问子类特有功能 静态的特点: A:随着类的加载而加载 B:优先与对象存在 C:被类的所有对象共享 这其实也是我们判断该不该使用静态的依据。 D:可以通过类名调用 静态变量和成员变量的区别 A:所属不同 静态变量:属于类,类变量 成员变量:属于对象,对象变量,实例变量 B:内存位置不同 静态变量:方法区的静态区 成员变量:堆内存 C:生命周期不同 静态变量:静态变量是随着类的加载而加载,随着类的消失而消失 成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失D:调用不同 静态变量:可以通过对象名调用,也可以通过类名调用 成员变量:只能通过对象名调用

宏、微观经济学名词解释总结

宏、微观经济学名词解释总结 宏微观经济学名词解释 微观: 经济学——研究如何实现稀缺资源的最佳配置,以使人类需要得到最大限度满足的一门社会科学。 资源的稀缺性——指相对于人类无限多样性的需要而言,经济资源数量总是相对不足的,取用时要付出代价。 规范分析——研究经济活动“应该是什么”以及社会经济问题应该是怎样解的。 实证分析——描述经济现象“是什么”以及社会经济问题实际上是如何解决的。 需求——消费者在一定价格条件下愿意并且能够购买的某种商品或劳务的数量。 需求量的变化——某种商品价格的变化引起的对该商品需求量的变化。 需求水平的变化——在商品价格不变的情况下,其他因素所引起的需求的变化。 需求定律——商品的价格和需求量之间示范方向的变动关系。 供给——生产者在某一时刻和各种可能的价格水平上对某种商品或劳务愿意并且能够提供的数量。 供给定律——商品价格与供给量成正比。 均衡价格——一种商品的需求价格和供给价格相一致的价格,即需求数量等于供给数量的价格。 均衡数量——需求价格等于供给价格时的供给量和需求量称为均衡数量。 需求价格弹性——在其他条件不变的情况下,某种商品或劳务价格变动因其本身需求量的变动程度。 需求交叉价格弹性——在其他条件不变的情况下,某种商品或劳务价格变动引起另一种商品或劳务需求量变动的程度。 需求收入弹性——在其他条件不变的情况下,消费者收入的变动引起某种商品或劳务需求量变动的程度。 蛛网模型——运用弹性原理解释某些生产周期较长的商品在失去均衡时发生的不同波动情况的一种动态分析理论。 蛛网稳定条件——供给弹性等于需求弹性,市场价格变动对供给量和需求量的影响相同。

珍藏版常用翻译方法技巧总结

珍藏版常用翻译方法技巧总结 个人认为,翻译题很重要!考研是个充实自己的过程,只要你还需要英语,就离不开翻译,所以大家应该引起足够重视。 首先个人推荐一本书,XDF唐静老师的《拆分与组合翻译法》,我听过他的课,他的方法很实用,感觉很象下面介绍的第四种方法。 翻译题里考察三方面内容: 1、专有名词(如operational research expert)、习惯用法(如depend on)及多 义词的翻译(如school、set的多义) 2、一般性翻译技巧:包括词义选择,词序调整,词性转换和增词法等等 3、具体句型(定从、状从、主从、宾从、表从、同位从、强调结构、并列、 比较、倒装、插入、被动、否定等) 其中2、3是大考点,具体内容可在论坛下XDF的翻译笔记来看,在此不赘述。 可看出,应对翻译题的主要武器是翻译技巧,下面正式进入正题(常用方法、被动语态译法、形容词译法、举例详解) 一、常用方法 英汉两种语言在句法、词汇、修辞等方面均存在着很大的差异,因此在进行英汉互译时必然会遇到很多困难,需要有一定的翻译技巧作指导。常用的翻译技巧有增译法、省译法、转换法、拆句法、合并法、正译法、反译法、倒置法、包孕法、插入法、重组法和综合法等。这些技巧不但可以运用于笔译之中,也可以运用于口译过程中,而且应该用得更加熟练。 1、增译法:指根据英汉两种语言不同的思维方式、语言习惯和表达方式,在翻译时增添一些词、短句或句子,以便更准确地表达出原文所包含的意义。这种方式多半用在汉译英里。汉语无主句较多,而英语句子一般都要有主语,所以在翻译汉语无主句的时候,除了少数可用英语无主句、被动语态或“There be…”结构来翻译以外,一般都要根据语境补出主语,使句子完整。英汉两种语言在名词、代词、连词、介词和冠词的使用方法上也存在很大差别。英语中代词使用频率较高,凡说到人的器官和归某人所有的或与某人有关的事物时,必须在前面加上物主代词。因此,在汉译英时需要增补物主代词,而在英译汉时又需要根据情况适当地删减。英语词与词、词组与词组以及句子与句子的逻辑关系一般用连词来表示,而汉语则往往通过上下文和语序来表示这种关系。因此,在汉译英时常常需要增补连词。英语句子离不开介词和冠词。另外,在翻译时还要注意增补一些原文中暗含而没有明言的词语和一些概括性、注释性的词语,以确保译文意思的完整。总之,通过增译,一是保证译文语法结构的完整,二是保证译文意思的明确。如: (1)What about calling him right away? 马上给他打个电话,你觉得如何?(增译主语和谓语) (2)If only I could see the realization of the four modernizations. 要是我能看到四个现代化实现该有多好啊!(增译主句) (3)Indeed, the reverse is true 实际情况恰好相反。(增译名词)

EXCEL宏编程实例.doc

Excel 宏编程举例说明 学习宏编程,需要VB基础,如果一点VB基础和面向对象的概念,建议先去补补VB,不然即使自认为学好了也只能拿着高射炮打蚊子! 一)、宏学习 首先需要明确的是,本文不可能教会您关于宏的所有内容。您需要学会利用"录制宏"的方法来学习宏:点击Excel"工具"下拉菜单中"宏"下?quot;录制新宏",此后可象平时一样进行有关操作,待完成后停止录制。然后再点击"工具"下拉菜单中"宏"下"宏"的"编辑"选项即可打开刚才所录制的宏的Visual Basic源程序,并且可以在此时的"帮助"下拉菜单中获得有关的编程帮助。对录制宏进行修改不仅可以学习宏的使用,还能大大简化宏的编写。 二)、基本概念 为了学习Excel中的宏,我们需要先了解以下一些基本概念。 1、工作簿:Workbooks、Workbook、ActiveWorkbook、ThisWorkbook Workbooks集合包含Excel中所有当前打开的Excel工作簿,亦即所有打开的Excel文件;Workbook对应Workbooks中的成员,即其中的Excel文件;ActiveWorkbook代表当前处于活动状态的工作簿,即当前显示的Excel文件;ThisWorkbook代表其中有Visual Basic代码正在运行的工作簿。 在具体使用中可用Workbooks(index)来引用Workbook对象,其中index为工作簿名称或编号;如Workbooks(1)、Workbooks("年度报表.xls")。而编号按照创建或打开工作簿的顺序来确定,第一个打开的工作簿编号为1,第二个打开的工作簿为2……。 2、工作表:Worksheets、Worksheet、ActiveSheet Worksheets集合包含工作簿中所有的工作表,即一个Excel文件中的所有数据表页;而Worksheet则代表其中的一个工作表;ActiveSheet代表当前处于的活动状态工作表,即当前显示的一个工作表。 可用Worksheets(index)来引用Worksheet对象,其中index为工作表名称或索引号;如Worksheets(1)、Worksheets("第一季度数据")。工作表索引号表明该工作表在工作表标签中的位置:第一个(最左边的)工作表的索引号为1,最后一个(最右边的)为Worksheets.Count。需要注意的是:在使用过程中Excel会自动重排工作表索引号,保持按照其在工作表标签中的从左至右排列,工作表的索引号递增。因此,由于可能进行的工作表添加或删除,工作表索引号不一定始终保持不变。3、图表:Chart 、Charts、ChartObject、ChartObjects、ActiveChart Chart代表工作簿中的图表。该图表既可为嵌入式图表(包含在ChartObject中),也可为一个分开的(单独的)图表工作表。 Charts代表指定工作簿或活动工作簿中所有图表工作表的集合,但不包括嵌入式在工作表或对话框编辑表中的图表。使用Charts(index) 可引用单个Chart图表,其中index是该图表工作表的索引号或名称;如Charts(1)、Charts("销售图表")。图表工作表的索引号表示图表工作表在工作簿的工作表标签栏上的位置。Charts(1)是工作簿中第一个(最左边的)图表工作表;Charts(Charts.Count)为最后一个(最右边的)图表工作表。 ChartObject代表工作表中的嵌入式图表,其作用是作为Chart对象的容器。利用ChartObject 可以控制工作表上嵌入式图表的外观和尺寸。 ChartObjects代表指定的图表工作表、对话框编辑表或工作表上所有嵌入式图表的集合。可由ChartObjects(index)引用单个ChartObject,其中index为嵌入式图表的编号或名称。如

Word使用经验技巧总结(极好的资料)

Word使用经验技巧总结 word插公式时让公式居中对齐 插公式时经常需要让公式居中对齐、行末的公式编号右对齐。只要设一个居中制表位和一个右对齐制表位,输入时按TAB即可。建议居中制表位位置用字符做单位,比如五号字体在缺省A4页面上是每行40字符,居中制表位就可以设在20字符处。 我的公式编号用SEQ域输入,从“插入”菜单选“域”即可。这样做的好处是如果我有100个公式,在最开始插入一个新的,那么这100个公式的编号都要加1、 如果手工修改会非常耗体,而Ctrl+A全部选定再F9更新域则十分快捷。 参考文献用尾注,也在“插入”菜单里。缺省的是上标格式,按Ctrl+'+'可以改成正常格式。好处也是可以自动排号。 图片说明用题注。一般排版要让题注宽度小于版心距,我用水平标尺上的悬挂缩进加右缩进实现。 Word表格中可以进行简单的计算。比如我有一个表格,让第三列的值显示第二列比第一列多百分之几,用“表格”菜单的“公式”即可,不用Excel高射炮轰蚊子。 对公式、尾注、图片、表格的引用一概用交叉引用,“插入”菜单下。好处是可以做成超级链接,而且公式编号改动的话对这个公式的引用会跟着改。 所有的章节标题都用样式,并且用多级项目符号列表。好处是标题编号(第几章、第几节)可以自动生成,可以在文档结构图(“视图”菜单)中浏览,可以用垂直滚动条下方的定位按钮快速定位,还可以生成目录。我一般关闭“基于所用格式定义样式”这个自作聪明的功能,所有样式都自己选。 我的图片和表格做成嵌入式的,这样不会乱跑。表格每个单元格水平垂直均居中对齐(Word 2000新增功能)。表格段落格式选“段中不分页”,这样不会出现表格拆到两页上的恶心局面。 我的正文缺省样式是首行缩进2字符。输公式的时候要另起一行,但是逻辑上它应该跟前面的文字算作一段(鼠标三击可以选定段),我用Shift+Enter小回车搞定。每次要输入公式的时候,点到前一个包含公式的段,用格式刷复制即可。 先写这么多,以后有新的再补充,也欢迎大家补充。

宏观经济学学习总结总结

宏观经济学学习总结总结 这一阶段的宏观学课程结束了,在本课的学习中我最大的收获就是获得了一种把经济学理论和实际经济问题相结合的思维,逐步尝试把平时看到的新闻中的经济问题与所学过的理论结合起来, 一,理论基础仍是重点 当然宏观经济理论的学习仍然是基础,凯恩斯的理论仍然是学习的重点。随着经济的发展,在一定的时期产生了一些凯恩斯主义无法解决的问题,凯恩斯主义一度走入低谷,但是现代宏观经济学的发展趋势是凯恩斯主义将重新受到重视,实际经济周期理论相信凯恩斯主义经济学靠拢,新增长理论将继续是一个研究热点,不远的将来宏观经济学将出现新的综合。 二,宏观经济问题的关注和理论的应用 在本课的学习中着重讲到了宏观经济学关注的问题:首先,经济的增长问题,在学习的过程中以我国的经济增长现状为例。现阶段中国经济高速增长,可是我们大多数人并没有感觉到财富的相应迅速增加,甚至感觉在缩水。到底中国经济高速增长能持续多久?这个问题从乐观和悲观两方面来分析,并从两种观点中分析中国的经济增长的现状。中国近几年的国民生产总值增长的很快,增长百分比在10%左

右,但是人们一直对现在反应经济增长的gdp的核算是否能反应经济的实际增长存在怀疑,所以在学习中我们引入了绿色gdp的核算, 除了对经济增长的关注,我们还对经济周期、失业和通货膨胀等问题都进行了学习,分别 ___数据作为实例进行了详细的分析。面对这些宏观经济中的问题,每个国家都采用一定多的经济政策,以此促进经济的良好运行。我国的财政政策和货币政策的具体实施是在1998年以前实行扩张的财政政策和货币政策,随着经济的高速增长在1998年至现在国家一直采用稳健的经济政策。 经济政策的实施效果可以用研究产品市场和金融市场的is-lm曲线来分析,并且对is-lm模型进行了进一步的学习。随着经济的全球化每一个国家不再可能是完全封闭的,所以is-lm模型进一步扩展为is-lm-bp模型。这样可以更完善分析各国的经济。从is-lm模型中还可以推出ad-as曲线,这时价格不再作为一个常量而是作为一个变量来考虑,并且把总供给和总需求结合了起来。用ad-as模型可以充分的分析美国90年代后的新经济,从而研究对我国经济的发展有启示的因素。 三,结论

宏观经济学知识要点总结(完整版)

宏观经济学知识要点总结 第一章 一关键概念 1、实证分析:回答“是什么”的问题,建立逻辑框架对经济行为和现象进行分析和解释,推导出的命题要能用经验数据来检验。 2、规范分析:回答“应该是什么的问题”,从理论上探讨某类经济行为应该是什么或某类经济问题应如何解决。 3、均衡分析:研究经济的部分或整体趋向均衡(一种相对静止、稳定不变的状态)的条件、机制和结果。 4、静态分析:研究经济达到某一状态的条件和结果。 5、动态分析:研究经济的实际变动过程。 6、国内生产总值(GDP)和国民生产总值(GNP)比较: (1)GDP是某一时期内(衡量期的长度通常为一年)在一国境内为市场生产的所有最终产品和服务的货币价值的总和。 (2)国民生产总值(GNP):一国居民拥有的生产要素在某一时期内为市场生产的所有最终产品和服务的货币价值的总和。 (3)GNP与GDP关系:GNP=GDP+NFP,其中NFP是净要素支付,即本国居民拥有的生产要素在国外使用所获得的报酬(工资、利息、股息等)-国外生产要素在本国使用所获得的报酬。 (4)GNP比GDP更能反映国民收入(一国居民拥有的生产要素所获得的

报酬)的变动,并且,一个国家居民的福利水平更直接地反映在GNP而不是GDP上。 7、名义价值:用核算期货币价值衡量的产品和服务的价值量。 8、实际价值:用基期货币价值衡量的产品和服务的价值量,它是经过通货膨胀调整的价值量。 9、流量:一定时期内的增量,如GDP、GNP、NDP、收入、投资和折旧。 10、存量:某一时点上的累积量,如财富和资本。 11、现值:未来某时刻获得的货币折算到当前时刻的价值。 二复习思考题 1、宏观经济学的研究对象是什么?宏观经济学研究经济整体的运行,主要内容是经济活动整体水平(总收入、失业率、物价指数和通货膨胀率等)的决定。 2、宏观经济学的研究方法是什么?总量分析方法,即分析经济活动整体水平(总收入、失业率、物价指数和通货膨胀率等)的决定、变动和相互关系。 3、请谈谈宏观经济学派与宏观经济学的关系。(1)现代宏观经济学的主要学派包括凯恩斯主义学派、新凯恩斯主义学派、货币主义学派、理性预期学派和供给学派等。(2)现代宏观经济学在各学派的争论中不断发展和演变。争论的内容主要是市场机制的有效性以及政府干预的必要性和效应。 4、你认为当前中国宏观经济运行中的主要问题是什么?(1)内需不足;(2)通货膨胀压力大;(3)外汇储备急剧增加;(4)流动性过剩。 5、简要分析宏观经济学的发展趋势。(1)各流派的争论将会持续下去;(2)新古典综合派仍占正统地位;(3)宏观经济学的精密化、实用化与微观化。

相关文档
最新文档