当前位置:文档之家› C 名字修饰规则

C 名字修饰规则

C  名字修饰规则
C  名字修饰规则

C++ 编译器的函数名修饰规则

函数名字修饰(Decorated Name)方式

函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型。LINK程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置。多数情况下程序员并不需要知道函数的名字修饰,LINK程序或其他工具会自动区分他们。当然,在某些情况下需要指定函数的名字修饰,例如在C++程序中,为了让LINK 程序或其他工具能够匹配到正确的函数名字,就必须为重载函数和一些特殊的函数(如构造函数和析构函数)指定名字装饰。另一种需要指定函数的名字修饰的情况是在汇编程序中调用C或C++的函数。如果函数名字,调用约定,返回值类型或函数参数有任何改变,原来的名字修饰就不再有效,必须指定新的名字修饰。C和C++程序的函数在内部使用不同的名字修饰方式,下面将分别介绍这两种方式。

1. C编译器的函数名修饰规则

对于__stdcall调用约定,编译器和链接器会在输出函数名前加上一个下划线前缀,函数名后面加上一个“@”符号和其参数的字节数,例如_functionname@number。__cdecl调用约定仅在输出函数名前加上一个下划线前缀,例如_functionname。__fastcall调用约定在输出函数名前加上一个“@”符号,后面也是一个“@”符号和其参数的字节数,例如

@functionname@number

2. C++编译器的函数名修饰规则

C++的函数名修饰规则有些复杂,但是信息更充分,通过分析修饰名不仅能够知道函数的调用方式,返回值类型,参数个数甚至参数类型。不管__cdecl,__fastcall还是__stdcall调用方式,函数修饰都是以一个“?”开始,后面紧跟函数的名字,再后面是参数表的开始标识和按照参数类型代号拼出的参数表。对于__stdcall方式,参数表的开始标识是“@@YG”,对于__cdecl方式则是“@@YA”,对于__fastcall方式则是“@@YI”。参数表的拼写代号如下所示:

X--void

D--char

E--unsigned char

F--short

H--int

I--unsigned int

J--long

K--unsigned long(DWORD)

M--float

N--double

_N--bool

U--struct

....

指针的方式有些特别,用PA表示指针,用PB表示const类型的指针。后面的代号表明指针类型,如果相同类型的指针连续出现,以“0”代替,一个“0”代表一次重复。U表示结构类型,通常后跟结构体的类型名,用“@@”表示结构类型名的结束。函数的返回值不作特殊处理,它的描述方式和函数参数一样,紧跟着参数表的开始标志,也就是说,函数参数表的第一项实际上是表示函数的返回值类型。参数表后以“@Z”标识整个名字的结束,如果该函数无参数,则以“Z”标识结束。下面举两个例子,假如有以下函数声明:

int Function1 (char *var1,unsigned long);

其函数修饰名为“?Function1@@YGHPADK@Z”,而对于函数声明:

void Function2();

其函数修饰名则为“?Function2@@YGXXZ”。

对于C++的类成员函数(其调用方式是thiscall),函数的名字修饰与非成员的C++函数稍有不同,首先就是在函数名字和参数表之间插入以“@”字符引导的类名;其次是参数表的开始标识不同,公有(public)成员函数的标识是“@@QAE”,保护(protected)成员函数的标识是“@@IAE”,私有(private)成员函数的标识是“@@AAE”,如果函数声明使用了const 关键字,则相应的标识应分别为“@@QBE”,“@@IBE”和“@@ABE”。如果参数类型是类实例的引用,则使用“AAV1”,对于const类型的引用,则使用“ABV1”。下面就以类CTest为例说明C++成员函数的名字修饰规则:

class CTest

{

......

private:

void Function(int);

protected:

void CopyInfo(const CTest &src);

public:

long DrawText(HDC hdc, long pos, const TCHAR* text, RGBQUAD color, BYTE bUnder, bool bSet);

long InsightClass(DWORD dwClass) const;

......

};

对于成员函数Function,其函数修饰名为“?Function@CTest@@AAEXH@Z”,字符串“@@AAE”表示这是一个私有函数。成员函数CopyInfo只有一个参数,是对类CTest的const引用参数,其函数修饰名为“?CopyInfo@CTest@@IAEXABV1@@Z”。DrawText是一个比较复杂的函数声明,不仅有字符串参数,还有结构体参数和HDC 句柄参数,需要指出的是HDC实际上是一个HDC__结构类型的指针,这个参数的表示就是“PAUHDC__@@”,其完整的函数修饰名为“?DrawText@CTest@@QAEJPAUHDC__@@JPBDUtagRGBQUAD@@E_N@Z”。InsightClass 是一个共有的const函数,它的成员函数标识是“@@QBE”,完整的修饰名就是

“?InsightClass@CTest@@QBEJK@Z”。

无论是C函数名修饰方式还是C++函数名修饰方式均不改变输出函数名中的字符大小写,这和PASCAL调用约定不同,PASCAL约定输出的函数名无任何修饰且全部大写。

3.查看函数的名字修饰

有两种方式可以检查你的程序中的函数的名字修饰:使用编译输出列表或使用Dumpbin 工具。使用/FAc,/FAs或/FAcs命令行参数可以让编译器输出函数或变量名字列表。使用dumpbin.exe /SYMBOLS命令也可以获得obj文件或lib文件中的函数或变量名字列表。此外,还可以使用undname.exe 将修饰名转换为未修饰形式。

函数调用约定和名字修饰规则不匹配引起的常见问题

函数调用时如果出现堆栈异常,十有八九是由于函数调用约定不匹配引起的。比如动态链接库a有以下导出函数:long MakeFun(long lFun);

动态库生成的时候采用的函数调用约定是__stdcall,所以编译生成的a.dll中函数MakeFun

的调用约定是_stdcall,也就是函数调用时参数从右向左入栈,函数返回时自己还原堆栈。现在某个程序模块b要引用a中的MakeFun,b和a一样使用C++方式编译,只是b模块的

函数调用方式是__cdecl,由于b包含了a提供的头文件中MakeFun函数声明,所以MakeFun 在b模块中被其它调用MakeFun的函数认为是__cdecl调用方式,b模块中的这些函数在调用完MakeFun当然要帮着恢复堆栈啦,可是MakeFun已经在结束时自己恢复了堆栈,b模

块中的函数这样多此一举就引起了栈指针错误,从而引发堆栈异常。宏观上的现象就是函数调用没有问题(因为参数传递顺序是一样的),MakeFun也完成了自己的功能,只是函数返回后引发错误。解决的方法也很简单,只要保证两个模块的在编译时设置相同的函数调用约定就行了。

在了解了函数调用约定和函数的名修饰规则之后,再来看在C++程序中使用C语言编译

的库时经常出现的LNK 2001错误就很简单了。还以上面例子的两个模块为例,这一次两个

模块在编译的时候都采用__stdcall调用约定,但是a.dll使用C语言的语法编译的(C语言

方式),所以a.dll的载入库a.lib中MakeFun函数的名字修饰就是“_MakeFun@4”。b包含了a提供的头文件中MakeFun函数声明,但是由于b采用的是C++语言编译,所以MakeFun

在b模块中被按照C++的名字修饰规则命名为“?MakeFun@@YGJJ@Z”,编译过程相安无事,链接程序时c++的链接器就到a.lib中去找“?MakeFun@@YGJJ@Z”,但是a.lib中只有

“_MakeFun@4”,没有“?MakeFun@@YGJJ@Z”,于是链接器就报告:

error LNK2001: unresolved external symbol ?MakeFun@@YGJJ@Z

解决的方法和简单,就是要让b模块知道这个函数是C语言编译的,extern "C"可以做到这

一点。一个采用C语言编译的库应该考虑到使用这个库的程序可能是C++程序(使用C++编译器),所以在设计头文件时应该注意这一点。通常应该这样声明头文件:

#ifdef _cplusplus

extern "C" {

#endif

long MakeFun(long lFun);

#ifdef _cplusplus

}

#endif

这样C++的编译器就知道MakeFun的修饰名是“_MakeFun@4”,就不会有链接错误了。

许多人不明白,为什么我使用的编译器都是VC的编译器还会产生“error LNK2001”错误?其实,VC的编译器会根据源文件的扩展名选择编译方式,如果文件的扩展名是“.C”,编译器会采用C的语法编译,如果扩展名是“.cpp”,编译器会使用C++的语法编译程序,所以,最好的方法就是使用extern "C"。

1.__stdcall

以“?”标识函数名的开始,后跟函数名;函数名后面以“@@YG”标识参数表的开始,后跟参数表;

参数表以代号表示:X--void ,D--char,E--unsigned char,F--short,H--int,I--unsigned int,J--long,K--unsigned long,M--float,N--double,_N--bool,.... PA--表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,以“0”代替,一个“0”代表一次重复;参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针标识在其所指数据类型前;

参数表后以“@Z”标识整个名字的结束,如果该函数无参数,则以“Z”标识结束。其格式为“?functionname@@YG*****@Z”或“?functionname@@YG*XZ”,例如int Test1(char *var1,unsigned long)-----“?Test1@@YGHPADK@Z” void Test2()-----“?Test2@@YGXXZ”

2 __cdecl调用约定:规则同上面的_stdcall 调用约定,只是参数表的开始标识由上面的“@@YG”变为“@@YA”。

3 __fastcall调用约定:规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的“@@YG”变为“@@YI”。

VC++对函数的省缺声明是"__cedcl",将只能被C/C++调用。

CB在输出函数声明时使用4种修饰符号:

__cdecl cb 的默认值,它会在输出函数名前加"_",并保留此函数名不变,参数按照从右到左的顺序依次传递给栈,也可以写成_cdecl和cdecl形式。

__fastcall 修饰的函数的参数将尽可能的使用寄存器来处理,其函数名前加@,参数按照从左到右的顺序压栈;

__pascal 它说明的函数名使用Pascal 格式的命名约定。这时函数名全部大写。参数按照从左到右的顺序压栈;

__stdcall 使用标准约定的函数名。函数名不会改变。使用__stdcall 修饰时。参数按照由右到左的顺序压栈,也可以是_stdcall;

C语言函数调用约定

在C语言中,假设我们有这样的一个函数:

int function(int a,int b)

调用时只要用result = function(1,2) 这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就出现来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。

栈是一种先后进先出的数据结构,栈有一个存储区、一个栈顶指针。栈顶指针指向堆栈中第一个可用的数据项(被称为栈顶)。用户可以在栈顶上方向栈中加入数据,这个操作被称为压栈(Push),压栈以后,栈顶自动变成新加入数据项的位置,栈顶指针也随之修改。用户也可以从堆栈中取走栈顶,称为弹出栈(pop),弹出栈后,栈顶下的一个元素变成栈顶,栈顶指针随之修改。

函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算。函数计算结束以后,或者调用者、或者函数本身修改堆栈,使堆栈恢复原装。在参数传递中,有两个很重要的问题必须得到明确说明:

当参数个数多于一个时,按照什么顺序把参数压入堆栈

函数调用后,由谁来把堆栈恢复原状

在高级语言中,通过函数调用约定来说明这两个问题。常见的调用约定有:

stdcall

cdecl

fastcall

thiscall

naked call

stdcall调用约定

stdcall很多时候被称为pascal调用约定,因为pascal是早期很常见的一种教学用计算机程序设计语言,其语法严谨,使用的函数调用约定就是stdcall。在Microsoft C++系列的C/C++编译器中,常常用PASCAL宏来声明这个调用约定,类似的宏还有WINAPI和CALLBACK。stdcall调用约定声明的语法为(以前文的那个函数为例):

int __stdcall function(int a,int b)

stdcall的调用约定意味着:1)参数从右向左压入堆栈,2)函数自身修改堆栈3)函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸

以上述这个函数为例,参数b首先被压栈,然后是参数a,函数调用function(1,2)调用处翻译成汇编语言将变成:

push 2 // 第二个参数入栈

push 1 // 第一个参数入栈

call function // 调用参数,注意此时自动把cs:eip入栈

而对于函数自身,则可以翻译为:

push ebp // 保存ebp寄存器,该寄存器将用来保存堆栈的栈顶指针,可以在函数退出时恢复

mov ebp,esp // 保存堆栈指针

mov eax,[ebp + 8H] // 堆栈中ebp指向位置之前依次保存有ebp,cs:eip,a,b,ebp + 8指向a add eax,[ebp + 0CH] // 堆栈中ebp + 1 2处保存了b

mov esp,ebp // 恢复esp

pop ebp

ret 8

而在编译时,这个函数的名字被翻译成_function@8

注意不同编译器会插入自己的汇编代码以提供编译的通用性,但是大体代码如此。

其中在函数开始处保留esp到ebp中,在函数结束恢复是编译器常用的方法。

从函数调用看,2和1依次被push进堆栈,而在函数中又通过相对于ebp(即刚进函数时的堆栈指针)的偏移量存取参数。

函数结束后,ret 8 表示清理8个字节的堆栈,函数自己恢复了堆栈。

cdecl调用约定

cdecl 调用约定又称为C调用约定,是C语言缺省的调用约定,它的定义语法是:

int function (int a ,int b) //不加修饰就是C调用约定

int __cdecl function(int a,int b) //明确指出C调用约定

cdecl调用约定的参数压栈顺序是和stdcall是一样的,参数首先由有向左压入堆栈。

所不同的是,函数本身不清理堆栈,调用者负责清理堆栈。

由于这种变化,C 调用约定允许函数的参数的个数是不固定的,这也是C语言的一大特色。对于前面的function函数,使用cdecl后的汇编码变成:

调用处

push 1

push 2

call functionadd

esp,8 // 注意:这里调用者在恢复堆栈

被调用函数_function处

push ebp // 保存ebp寄存器,该寄存器将用来保存堆栈的栈顶指针,可以在函数退出时恢复

mov ebp,esp // 保存堆栈指针

mov eax,[ebp + 8H] // 堆栈中ebp指向位置之前依次保存有ebp, cs:eip,a,b,ebp +8指向a add eax,[ebp + 0CH] // 堆栈中ebp + 12处保存了b

mov esp,ebp // 恢复esp

pop ebp

ret // 注意,这里没有修改堆栈

MSDN中说,该修饰自动在函数名前加前导的下划线,因此函数名在符号表中被记录为

_function,但是我在编译时似乎没有看到这种变化。

由于参数按照从右向左顺序压栈,因此最开始的参数在最接近栈顶的位置,因此当采用不定个数参数时,第一个参数在栈中的位置肯定能知道,只要不定的参数个数能够根据第一个后者后续的明确的参数确定下来,就可以使用不定参数,例如对于CRT中的sprintf函数,定义为:

int sprintf(char* buffer,const char* format,...)

由于所有的不定参数都可以通过format 确定,因此使用不定个数的参数是没有问题的。fastcall调用约定

fastcall调用约定和stdcall类似,它意味着:

函数的第一个和第二个DWORD参数(或者尺寸更小的)通过ecx和edx传递,其他参数通过从右向左的顺序压栈

被调用函数清理堆栈

函数名修改规则同stdcall

其声明语法为:int fastcall function(int a,int b)

为了说明这个调用约定,定义如下类和使用代码:

class A

{

public:

int function1(int a,int b);

int function2(int a,...);

};

int A::function1 (int a,int b)

{

return a+b;

}

int A::function2(int a,...)

{

va_list ap;

va_start(ap,a);

int i;

int result = 0;

for(i = 0 ; i < a ; i ++)

{

result += va_arg(ap,int);

}

return result;

}

void callee()

{

A a;

a.function1 (1,2);

a.function2(3,1,2,3);

}

// 下面这段汇编代码是原文章的,我觉得有问题,还是自己反汇编看看

//函数function1调用0401C1D

push 200401C1F

push 100401C21

lea ecx,[ebp-8]00401C24

call function1

// 注意,这里this没有被入栈

//函数function2调用00401C29

push 300401C2B

push 200401C2D

push 100401C2F

push 300401C31

lea eax,[ebp-8]

这里引入this指针00401C34

push eax00401C35

call function200401C3A

add esp,14h

以下代码是我修改分析的:

上面的C++代码,必须包含stdarg.h ,提供动态参数头文件int A::function1 (int a,int b) //

{

004113A0 push ebp

004113A1 mov ebp,esp

004113A3 sub esp,0CCh

004113A9 push ebx

004113AA push esi

004113AB push edi

004113AC push ecx

004113AD lea edi,[ebp-0CCh]

004113B3 mov ecx,33h

004113B8 mov eax,0CCCCCCCCh

004113BD rep stos dword ptr es:[edi]

004113BF pop ecx

004113C0 mov dword ptr [ebp-8],ecx

return a+b;

004113C3 mov eax,dword ptr [a]

004113C6 add eax,dword ptr [b]

}

004113C9 pop edi

004113CA pop esi

004113CB pop ebx

004113CC mov esp,ebp

004113CE pop ebp

004113CF ret 8

void callee()

{

00411460 push ebp

00411461 mov ebp,esp

00411463 sub esp,0CCh

00411469 push ebx

0041146A push esi

0041146B push edi

0041146C lea edi,[ebp-0CCh]

00411472 mov ecx,33h

00411477 mov eax,0CCCCCCCCh

0041147C rep stos dword ptr es:[edi]

A a;

a.function1 (1,2);

0041147E push 2 // 参数2 入栈

00411480 push 1 // 参数1 入栈

00411482 lea ecx,[a] // this 指针----> ECX

00411485 call A::function1 (411050h)

a.function2(3,1,2,3);

0041148A push 3

0041148C push 2

0041148E push 1

00411490 push 3

00411492 lea eax,[a] // 这里this 指针入栈了,对照callee 对function1 的调用,

00411495 push eax // 对this 的处理是不同的

00411496 call A::function2 (411122h) // 此处调用者自己没有恢复堆栈

// 由于上面的入栈顺序可知,在function 2中当保存ebp 后(打开stack frame后),堆栈的状态如下.

ebp // 保存的EBP 的值, 且此时ebp指向该处

RetAddr // 返回地址

this指针// 入栈的this 指针

参数3 // 下面是入栈的参数, 从右向左入栈

参数1

参数2

参数3

0041149B add esp,14h // 此处调用者自己恢复堆栈

//.............下面的汇编代码是检查堆栈和恢复callee 堆栈的操作,不再写了

}

可见,对于参数个数固定情况下,它类似于stdcall,不定时则类似cdecl

naked call 调用约定

这是一个很少见的调用约定,一般程序设计者建议不要使用。编译器不会给这种函数增加初始化和清理代码,更特殊的是,你不能用return返

回返回值,只能用插入汇编返回结果。这一般用于实模式驱动程序设计,假设定义一个求和的加法程序,可以定义为:

__declspec(naked) int add(int a,int b)

{

__asm mov eax,a

__asm add eax,b

__asm ret

}

注意,这个函数没有显式的return返回值,返回通过修改eax寄存器实现,而且连退出函数的ret指令都必须显式插入。

上面代码被翻译成汇编以后变成:

mov eax,[ebp+8]

add eax,[ebp+12]

ret 8

注意这个修饰是和__stdcall及cdecl结合使用的,前面是它和cdecl结合使用的代码,对于和stdcall结合的代码,则变成:

__declspec(naked) int __stdcall function(int a,int b)

{

__asm mov eax,a

__asm add eax,b

__asm ret 8 //注意后面的8

}

至于这种函数被调用,则和普通的cdecl及stdcall调用函数一致。

函数调用约定导致的常见问题

如果定义的约定和使用的约定不一致,则将导致堆栈被破坏,导致严重问题,下面是两种常见的问题:

函数原型声明和函数体定义不一致

DLL导入函数时声明了不同的函数约定

以后者为例,假设我们在dll种声明了一种函数为:

__declspec(dllexport) int func(int a,int b);//注意,这里没有stdcall,使用的是cdecl

使用时代码为:

typedef int (*WINAPI DLLFUNC)func(int a,int b);

hLib = LoadLibrary(...);

DLLFUNC func = (DLLFUNC)GetProcAddress(...) //这里修改了调用约定

result = func(1,2); //导致错误

由于调用者没有理解WINAPI的含义错误的增加了这个修饰,上述代码必然导致堆栈被破坏,MFC在编译时插入的checkesp函数将告诉你,堆栈被破坏了。

C_C++变量命名规则

C/C++变量命名规则 变量命名规则是为了增强代码的可读性和容易维护性。以下为C++必须遵守的变量命名规则: 1、变量名只能是字母(A-Z,a-z)和数字(0-9)或者下划线(_)组成。 2、第一个字母必须是字母或者下划线开头。 3、不能使用C++关键字来命名变量,以免冲突。 4、变量名区分大小写。 变量命名规则: 一、用最短字符表示最准确的意义。 二、使用变量前缀。 1、整型前缀 int nId; //int前缀:n short sId; //short前缀:s unsigned int unId // unsigned int 前缀:un long lId; //long前缀:l 2、浮点型前缀 float fValue; //float前缀:f double dValue; //double前缀:d 3、字符型前缀 char chChar; //char前缀:ch 4、字符串前缀 char szPath; //char字符串前缀:sz string strPath; //string字符串前缀:str CString strPath; //MFC CString类前缀:str 5、布尔型前缀 bool bIsOK; //bool类型前缀:b BOOL bIsOK; //MFC BOOL前缀:b 6、指针型前缀 char * pPath; //指针前缀:p 7、数组前缀 int arrnNum; //数组前缀:arr CString arrstrName; //数组前缀+类型前缀+名称

8、结构体前缀 STUDENT tXiaoZhang; //结构体前缀:t 9、枚举前缀 enum emWeek; //枚举前缀:em 10、字节的前缀 BYTE byIP; //字节前缀:by 11、字的前缀 DWORD dwMsgID; //双字前缀:dw WORD wMsgID; //单字前缀:w 12、字符指针前缀 LPCTSTR ptszName; //TCHAR类型为ptsz LPCSTR pszName; //pcsz LPSTR pszName; //psz 13、STL容器前缀 vector vecValue; //vector容器前缀:vec 14、RECT矩形结构前缀 RECT rcChild; //rc CRECT rcChild/ //rc 15、句柄前缀 HWND hWndDlg; //h HBRUSH hBr; //h HPEN hPen; //h HBITMAP hBmpBack; //h 16、Windows颜色前缀 COLORREF crFont; //cr 17、Windows DC前缀 CDC dcClient; //dc 三、类的成员变量以m_开头,后面为变量,变量同时还要加前缀。 CString m_strName; //m_开头+类型前缀+名称 四、定义一个变量,为了简化,在不影响变量意义的情况下,可仅仅使用前缀。 RECT rc; 五、全局变量一律以g_开头,后面为变量,变量同时还要加前缀。

单片机C语言变量名命名规则整理

C语言变量名命名规则 一、程序风格: 1、严格采用阶梯层次组织程序代码: 各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行。 要求相匹配的大括号在同一列,对继行则要求再缩进4格。例如: 2、提示信息字符串的位置 在程序中需要给出的提示字符串,为了支持多种语言的开发,除了一些给调试用的临时信息外,其他所有的提示信息必须定义在资源中。 3、对变量的定义,尽量位于函数的开始位置。 二、命名规则: 1、变量名的命名规则 ①、变量的命名规则要求用“匈牙利法则”。即开头字母用变量的类型,其余部分用变量的英文意思或其英文意思的缩写,尽量避免用中文的拼音,要求单词的第一个字母应大写。 即:变量名=变量类型+变量的英文意思(或缩写) 对非通用的变量,在定义时加入注释说明,变量定义尽量可能放在函数的开始处。 见下表:

对未给出的变量类型要求提出并给出命名建议给技术委员会。 ②、指针变量命名的基本原则为: 对一重指针变量的基本原则为: “p”+变量类型前缀+命名 如一个float*型应该表示为pfStat 对多重指针变量的基本规则为: 二重指针:“pp”+变量类型前缀+命名 三重指针:“ppp”+变量类型前缀+命名 ...... ③、全局变量用g_开头,如一个全局的长型变量定义为g_lFailCount,即:变量名=g_+变量类型+变量的英文意思(或缩写) ④、静态变量用s_开头,如一个静态的指针变量定义为s_plPerv_Inst,即:变量名=s_+变量类型+变量的英文意思(或缩写) ⑤、成员变量用m_开头,如一个长型成员变量定义为m_lCount;即:变量名=m_+变量类型+变量的英文意思(或缩写) ⑥、对枚举类型(enum)中的变量,要求用枚举变量或其缩写做前缀。并且要求用大写。 如:enum cmEMDAYS { EMDAYS_MONDAY; EMDAYS_TUESDAY; …… }; ⑦、对struct、union、class变量的命名要求定义的类型用大写。并要加

形容精彩的成语

形容精彩的成语 本文是关于好词好句的,仅供参考,如果觉得很不错,欢迎点评和分享。 形容精彩的成语 1、穷而后工:工:精巧,精彩。旧时认为文人越是穷困不得志,诗文就写得越好。 2、先号后笑:①指命运先凶后吉。②指文章或著作结尾比开头精彩。 3、扣人心弦:扣:敲打。形容事物激动人心。 4、反败为胜:扭转败局,变为胜利。 5、精妙入神:精彩绝妙,出神入化。 6、出口成章:说出话来就成文章。形容文思敏捷,口才好。 7、能言善道:形容口齿伶俐,很会说话。 8、精彩纷呈:美好的场面和事物纷纷在眼前呈现出来。 9、语惊四座:形容发言独特、新奇,使人震惊。 10、引人入胜:胜:胜境。引人进入佳境。现多用来指风景或文艺作品特别吸引人。 11、亹亹不厌:亹亹:同“娓娓”。连续说话,不知疲倦。指讲话或文章十分精彩感人。 12、神到之笔:犹言神来之笔。形容作品文句精彩。 13、乱坠天花:比喻说话动人或文字精彩。多指话说得夸大或

不切实际。 14、美艳绝伦:美艳:美丽、艳丽;绝伦:没有比得上的。精致美妙,无与伦比。 15、舌战群儒:舌战:激烈争辩;儒:指读书人。指同很多人辩论,并驳倒对方。 16、有声有色:形容说话或表演精彩生动。 17、口齿伶俐:口齿:说话、言谈;伶俐:聪明,灵活。谈吐麻利,应付自如。形容口才好。 18、荡气回肠:荡:动摇;回:回转。形容文章、乐曲十分婉转动人。 19、口若悬河:若:好像;悬河:激流倾泻。讲起话来滔滔不绝,象瀑布不停地奔流倾泻。形容能说会辨,说起来没个完。 20、娓娓而谈:连续不断地、生动地谈论。娓娓:形容谈论不倦或说话动听。 21、能言善辩:能:善于。形容能说会道,有辩才。 22、妙语连珠:连珠:串珠。巧妙风趣的话一个接一个。 23、神来之笔:由神灵帮助而写出的作品。形容作品文句精彩。 24、纵横捭阖:纵横:合纵连横;捭阖:开合,战国时策士游说的一种方法。指在政治或外交上运用手段进行分化或拉拢。 25、精彩逼人:形容人神采奕奕或文章言语精彩感人。 26、精妙绝伦:精:精巧。绝伦:无与伦比。精巧美妙到了极点。

常用【变量命名法则】总结

常用【变量命名法则】总结 1、匈牙利命名法 计算机程序设计中的一种命名规则,用这种方法命名的变量显示了其数据类型。 匈牙利命名法有两种:系统匈牙利命名法和匈牙利应用命名法。 匈牙利命名法被设计成语言独立的,并且首次在BCPL语言中被大量使用。由于BCPL 只有机器字这一种数据类型,因此这种语言本身无法帮助程序员来记住变量的类型。匈牙利命名法通过明确每个变量的数据类型来解决这个问题。 在匈牙利命名法中,一个变量名由一个或多个小写字母开始,这些字母有助于记忆变量的类型和用处,紧跟着的就是程序员选择的任何名称。这个后半部分的首字母可以大写以区别前面的类型指示字母(参见駝峰式大小寫)。 系统命名法与应用命名法的区别在于前缀的目的。 在系统匈牙利命名法中,前缀代表了变量的实际数据类型。例如: lAccountNum : 变量是一个长整型("l"); arru8NumberList : 变量是一个无符号8位整型数组("arru8"); szName : 变量是一个零结束字符串("sz"),这是西蒙尼最开始建议的前缀之一。 匈牙利应用命名法不表示实际数据类型,而是给出了变量目的的提示,或者说它代表了什么。rwPosition : 变量代表一个行("rw")。 usName : 变量代表一个非安全字符串("us"),需要在使用前处理。 strName : 变量代表一个包含名字的字符串("str")但是没有指明这个字符串是如何实现的。 西蒙尼建议的大多数前缀都是自然语义的,但不是所有。下面几个是来自原始论文的: p X是指向另一个X类型的指针,这包含非常少的语义信息。 d是一个前缀表示两个值的区别,例如,dY可能代表一个图形沿Y轴的距离,而一个仅仅叫做y的变量可能是一个绝对坐标。这完全是自然语义的。 sz是一个无结束或零结束的字符串。在C中,这包含一些语义信息,因为它不是很明确一个char*类型的变量是一个指向单个字符的指针,还是一个字符数组,亦或是一个零结束字符串。 w标记一个变量是一个字。这基本上没有包含什么语义信息,因此大概会被当成是系统命名法。 b标记了一个字节,和w对比可能有一些语义信息,因为C语言中,只有字节大小的数据是char型的,因此这些有时候被用来保存数值。这个前缀也许可以明确某个变量保存的是应该被看作是字母(或更一般的字符)的数值还是一个数字。 由于这种命名法通常使用小写字母开头用来助记,但是并没有对助记符本身作规定。有几种被广泛使用的习惯(见下面的示例),但是任意字母组合都可以被使用,只要它们在代码主体中保持一致就可以了。 在使用匈牙利系统命名法的代码中有时候也可能包含系统匈牙利命名法,即在描述被单独以类型方式定义的变量时使用。

描写文章的有关成语

描写文章的有关成语 ----WORD文档,下载后可编辑修改---- 下面是小编收集整理的范本,欢迎您借鉴参考阅读和下载,侵删。您的努力学习是为了更美好的未来! 描写文章的成语欣赏1) 笔大如椽:形容著名的文章。也指有名的作家。 2) 回肠伤气:形容音乐、文章等缠绵悱恻,感人之极。 3) 发人深思:深:无限,没有穷尽。启发人深入地思考。形容语言或文章有深刻的含意,耐人寻味。 4) 屋下作屋:比喻机构或文章结构重叠。同“屋下架屋”。 5) 驴唇马嘴:比喻说话写文章,前言不搭后语,前后矛盾。 6) 泛滥成灾:江河湖泊的水溢出,造成灾害。比喻不好的文章或思想到处传播,影响极坏。 7) 味如嚼蜡:象吃蜡一样,没有一点儿味。形容语言或文章枯燥无味。见“味同嚼蜡”。 8) 言简意该:形容说话写文章简明扼要。同“言简意赅”。 9) 沁人心脾:沁:渗入。原指芳香凉爽的空气或饮料使人感到舒适。也形容诗歌和文章优美动人,给人清新爽朗的感觉。 10) 朝华夕秀:比喻有新意的文章。 11) 一挥而成:挥:挥笔;成:成功。一动笔就写成了。形容写字、写文章、画画快。

12) 一挥而就:挥:挥笔;就:成功。一动笔就写成了。形容写字、写文章、画画快。 13) 淡而无味:淡:薄,与“浓”相对。菜肴因盐少而没有味道。亦泛指清淡无味。亦形容说话、写文章内容平淡,无趣味。 14) 沾泥带水:比喻说话、写文章不简洁或办事不干脆。 15) 慷慨淋漓:淋漓:充盛,畅快。形容说话、写文章意气昂扬,言辞畅快。 16) 不蔓不枝:既不蔓延,也不分支。比喻说话或写文章简明扼要,不拖泥带水。 17) 不蔓不支:蔓:藤蔓,引伸为蔓延。既不蔓延,也不分支。比喻说话或写文章简明扼要,不拖泥带水。 18) 开门见山:比喻说话或写文章直截了当谈本题,不拐弯抹角。 19) 开台锣鼓:比喻说话或写文章的开头部分。也比喻一个事件的开头。 20) 生拉硬扯:形容说话或写文章牵强附会。也形容用力拉扯,勉强别人听从自己。 21) 旁敲侧击:比喻说话、写文章不从正面直接点明,而是从侧面曲折地加以讽刺或抨击。 22) 平铺直序:铺:铺陈。序:叙述。形容说话或写文章不加修饰按顺序直接地叙述。也形容说话或写文章平淡乏味,重点不突出。亦作“平铺直叙”。 23) 铁板铜弦:形容豪迈激越的文章风格。

单片机C语言变量定义

单片机教程,51单片机C语言学习 第六课变量 上课所提到变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下:[存储种类] 数据类型[存储器类型] 变量名表 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。这些存储种类的具体含义和用法,将在第七课《变量的存储》中进一步进行学习。 而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。表6-1中是KEILuVision2所能认别的存储器类型。注意的是在AT89C51芯片中RAM只有低128位,位于80H到FFH的高128位则在52芯片中才有用,并和特殊寄存器地址重叠。特殊寄存器(SFR)的地址表请看附录二 如果省略存储器类型,系统则会按编译模式SMALL,COMPACT或LARGE所规定的默认存储器类型去指定变量的存储区域。无论什么存储模式都可以声明变量在任何的8051存储区范围,然而把最常用的命令如循环计数器和队列索引放在内部数据区可以显着的提高系统性能。还有要指出的就是变量的存储种类与存储器类型是完全无关的。 SMALL存储模式把所有函数变量和局部数据段放在8051系统的内部数据存储区这使访问数据非常快,但SMALL存储模式的地址空间受限。在写小型的应用程序时,变量和数据放在data内部数据存储器中是很好的因为访问速度快,但在较大的应用程序中data区最好只存放小的变量、数据或常用的变量(如循环计数、数据索引),而大的数据则放置在别的存储区域。 COMPACT存储模式中所有的函数和程序变量和局部数据段定位在8051系统的外部数据存储区。外部数据存储区可有最多256字节(一页),在本模式中外部数据存储区的短地址用@R0/R1。

单片机C语言变量定义定稿版

单片机C语言变量定义 HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】

单片机教程,51单片机C语言学习 第六课变量 上课所提到变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下: [存储种类] 数据类型[存储器类型] 变量名表 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。这些存储种类的具体含义和用法,将在第七课《变量的存储》中进一步进行学习。 而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。表6-1中是KEIL uVision2所能认别的存储器类型。注意的是在AT89C51芯片中RAM只有低128位,位于80H到FFH的高128位则在52芯片中才有用,并和特殊寄存器地址重叠。特殊寄存器(SFR)的地址表请看附录二AT89C51特殊功能寄存器列表

表6-1 存储器类型 如果省略存储器类型,系统则会按编译模式SMALL,COMPACT或LARGE所规定的默认存储器类型去指定变量的存储区域。无论什么存储模式都可以声明变量在任何的8051存储区范围,然而把最常用的命令如循环计数器和队列索引放在内部数据区可以显着的提高系统性能。还有要指出的就是变量的存储种类与存储器类型是完全无关的。

形容文采的成语有哪些

形容文采的成语有哪些 导读:文采,本指事物具有错杂艳丽的色彩,现多指文章中表现出来的典雅艳丽和令人赏心悦目的色彩和风格。一般来说,一篇文章的文采主要通过其优美的语言表现出来。因此,适当地修饰语言是可以达到增加文采的目的的。那形容文采的成语有哪些?请参考! 形容文采的`成语 [龙章凤函] 比喻文采炳焕。 [繁华损枝] 华:花。繁盛的花朵有损于花枝。比喻文采太华丽,将损及文章内容。 [衔华佩实] 衔:包含;华:比喻文采;佩:佩带;实:果实,比喻文章的思想内容。形容文章的形式和内容都完美。也形容草木开花结果。 [春花秋实] 春天开花,秋天结果。比喻人的文采和德行。现也比喻学习有成果。 [春华秋实] 华:花。春天开花,秋天结果。比喻人的文采和德行。现也比喻学习有成果。 [腾蛟起凤] 蛟:蛟龙;凤:凤凰。宛如蛟龙腾跃、凤凰起舞。形容人很有文采。 [起凤腾蛟] 宛如蛟龙腾跃、凤凰起舞。形容人很有文采。 [口吐珠玑] 珠、玑:都是珠宝,圆的叫珠,不圆的叫玑。形容说话有文采。

[凤彩鸾章] 形容诗文的文采华丽。 [凤采鸾章] 形容诗文的文采华丽。 [斐然成章] 斐、章:文采。形容文章富有文采,很值得看。 [翩翩年少] 比喻男子年少俊秀,文采风流。 [惊采绝艳] 指文采惊人,辞藻华美。 [不栉进士] 栉:梳头。不绾髻插簪的进士。旧指有文采的女人。 [放诞风流] 指有文采,言行不受礼法束缚。 [铺采摛文] 指铺陈文采。 [弸中彪外] 弸:充满;彪:文采。指人内有才德,则有文采,自然外露。赞美德才兼备的人。 [言文行远] 言辞有文采,才能传播远方或影响后世。 [天上石麟] 旧时称人有文采的儿子。 [翩翩公子] 旧时对风流而有文采的富贵子弟的誉称。 [遗风余采] 前代遗留下来的风度文采。 [衙官屈宋] 衙官:军府的属官;屈:屈原;宋:宋玉。要以屈原、宋玉为属官。原为自夸文章好。后也用以称赞别人的文采。 [龙章凤姿] 章:文采。蛟龙的文采,凤凰的姿容。比喻风采出众。 [扬葩振藻] 葩:华美;藻:文采。形容文章写得华丽多采。 [风流儒雅] 风流:有文采且不拘礼法;儒雅:学识深湛,气度不凡。指人文雅洒脱,学识渊博。

形容文章好的成语

形容文章好的成语 形容文章好的成语1、炳炳烺烺:光亮鲜明。形容文章辞采声韵之美。 2、不通文墨:通:精通;文墨:指写文章、着述等。指人文化水平不高或识字不多。 3、鄙言累句:鄙言:浅俗的言辞。指文章的词句浅俗,不精炼。 4、补苴调胹:补苴:补缀,引申为弥缝;调胹:烹调煮熟。比喻加工使之完美。多用于对文章加工使之提高,或对理论作进一步完美的表述。 5、炳炳娘烺:炳、娘:明亮,鲜明。形容文章的辞采声韵非常明朗铿锵。 6、不赞一辞:原指文章写得好,别人不能再添一句话。一句话也不说。 7、不忍卒读:卒:尽,完。不忍心读完。常用以形容文章内容悲惨动人。 8、璧坐玑驰:形容文章的语言精采美妙。 9、笔酣墨饱:指文章表达流畅,内容充足。 10、笔大如椽:形容着名的文章。也指有名的作家。 11、波澜老成:波澜:波涛,形容文章多起伏;老成:

指文章很老练。形容文章气势雄壮,语句老练。 12、不成文法:文法:指法则、格局。不合乎文章需要的法则、格局。 13、班马文章:汉代史学家司马迁与班固的并称。泛指可与班固、司马迁相比美的文章。 14、笔墨官司:笔墨:指文字或文章。比喻用文字进行的辩论、争执。 15、哀梨并剪:并剪:并州产的锋利剪刀。比喻言语、文章流畅爽利。 16、词不逮意:词:言语,词句;逮:到,及。指说话、写文章时所用的词句不能充分、确切表达出思想感情。 17、不易一字:不更动一个字。形容文章写得又快又好。 18、笔头生花:比喻写作能力大有进步。也形容文章写得很出色。 19、不蔓不支:蔓:藤蔓,引伸为蔓延。既不蔓延,()也不分支。比喻说话或写文章简明扼要,不拖泥带水。 20、辞不达义:指说话写文章不能确切地表达意思。 21、白话八股:用白话写的类似旧时八股式的文章。比喻指应命而写的刻板文章。 22、沈博绝丽:指文章的含意深远,内容渊博,文辞美妙。 23、博士买驴:博士:古时官名。博士买了一头驴子,

Matlab变量及命名规则

Matlab变量及命名规则 Matlab中所有的变量都是用矩阵形式来表示的,即所有的变量都表示一个矩阵或者一个向量。其命名规则如下: (1)变量名对大小写敏感; (2)变量名的第一个字符必须为英文字母,其长度不能超过31个字符; (3)变量名可以包含下连字符、数字,但不能包含空格符、标点。 Matlab系统预定义的变量: 表3-2 Matlab中预定义的变量 ans 预设的计算结果的变量名 eps Matlab定义的正的极小值=2.2204e-16 pi 内建的π值 inf ∞值,无限大 NaN 无法定义一个数目 i或j 虚数单位 nargin 函数输入参数个数 nargout 函数输出参数个数 realmax 最大的正实数 realmin 最小的正实数 flops 浮点运算次数 另外,键入clear是去除所有定义过的变量名称[]15。 3.2.2.2 赋值语句 Matlab中书写表达式的规则与手写算式差不多相同。如果一个指令过长可以在结尾加上“…”(代表此行指令与下一行连续)。 3.2.2.3 Matlab的矩阵计算功能 (1)Matlab中数值矩阵的生成Matlab中任何矩阵(向量),都可以直接按行方式输入每个元素,同一行中的元素用逗号或者用空格符来分隔,且空格个数不限;不同的行用分号分隔;所有元素处于一方括号内。 (2)Matlab中相关的矩阵运算 1)矩阵加、减运算 运算符:“+”和“-”分别为加、减运算符。 2)乘法 运算符:“*”;可实现两个矩阵相乘及矩阵的数乘。 点乘:“A.*B”表示A与B对应元素相乘。

3)向量点积 函数:dot 格式:C=dot(A,B);若A、B为长度相同的向量,则返回向量A与B的点积。 4)矩阵转置 运算符:“ '”; 运算规则:若矩阵A的元素为实数,则与线性代数中矩阵的转置相同。若A 为复数矩阵,则A转置后的元素由A对应元素的共轭复数构成。若仅希望转置,则用如下命令:“ A.'”。 5)方阵的行列式 函数:det 格式:d=det(X),返回方阵X的多项式的值。 6)矩阵的逆 函数:inv 格式:Y=inv(X),表示求方阵X的逆矩阵。若X为奇异阵或近似奇异阵,将给出警告信息。或者用“X^-1”计算,表示求方阵X的-1次方。 7)矩阵的秩 函数:rank 格式:k=rank(A),表示求矩阵A的秩。 8)矩阵的长度 函数:size;length 格式:size(A);length(A) n?的矩阵(行数和列数),而后者则返两者之间的区别在于前者返回一个m 回矩阵的长度(行数和列数的最大值)[]16。 3.2.2.4 关系和逻辑运算 作为所有关系和逻辑表达式的输出,Matlab把任何非零数值当作真,把零当作假。所有关系和表达式的输出,对于真,输出为1;对于假,输出为零。 Matlab关系操作符包括所有常用的比较: < :小于;<= :小于或等于; > :大于;>= :大于或等于; == :等于;~= :不等于 Matlab关系操作符能用来比较两个同样大小的数组,或用来比较一个数组和一个标量。在后一种情况,标量和数组中的每一个元素相比较,结果与数组大小一样。 Matlab逻辑操作符包括:& ——与;| ——或;~ ——非[]17。

c语言函数命名规范

竭诚为您提供优质文档/双击可除 c语言函数命名规范 篇一:c语言命名规则 匈牙利命名法是微软推广的一种关于变量、函数、对象、前缀、宏定义等各种类型的符号的 命名规范。匈牙利命名法的主要思想是:在变量和函数名中加入前缀以增进人们对程序的理 解。它是由微软内部的一个匈牙利人发起使用的,结果它在微软内部逐渐流行起来,并且推 广给了全世界的windows开发人员。下面将介绍匈牙利命名法,后面的例子里也会尽量遵守 它和上面的代码风格。 aarray数组 bbool(int)布尔(整数) byunsignedchar(byte)无符号字符(字节) cchar字符(字节) cbcountofbytes字节数 crcolorreferencevalue颜色(参考)值 cxcountofx(short)x的集合(短整数)

dwdwoRd(unsignedlong)双字(无符号长整数) fFlags(usuallymultiplebitvalues)标志(一般是有多位的数值) fnFunction函数 g_global全局的 hhandle句柄 iinteger llong lplongpointer m_datamemberofaclass 成员 nshortint ppointer sstring szzeroterminatedstring 符串 tmtextmetric uunsignedint ulunsignedlong(ulong)整数长整数长指针一个类的数据短整数指针字符串以0结尾的字文本规则无符号整数无符号长整数 wwoRd(unsignedshort)无符号短整数

形容文章好的成语Word版

【哀梨并剪】并剪:并州产的锋利剪刀。比喻言语、文章流畅爽利。 【聱牙诘曲】聱牙:不顺口;诘曲:曲折。指文章读起来不顺口。 【聱牙佶屈】聱牙:不顺口;佶屈:曲折。指文章读起来不顺口。 【蚌病成珠】比喻因不得志而写出好文章来。 【炳炳烺烺】光亮鲜明。形容文章辞采声韵之美。 【蚌病生珠】比喻因不得志而写出好文章来。同“蚌病成珠”。 【笔大如椽】形容着名的文章。也指有名的作家。 【笔底烟花】比喻文章写得生动、出色。 【白话八股】用白话写的类似旧时八股式的文章。比喻指应命而写的刻板文章。 【笔酣墨饱】指文章表达流畅,内容充足。 【补苴调胹】补苴:补缀,引申为弥缝;调胹:烹调煮熟。比喻加工使之完美。多用于对文章加工使之提高,或对理论作进一步完美的表述。 【不堪卒读】不堪:不能;卒:完毕,结束。形容文章写得凄惨悲苦,令人心酸,不忍读完。也指文章粗劣,使人不肯读下去。 【不蔓不支】蔓:藤蔓,引伸为蔓延。既不蔓延,也不分支。比喻说话或写文章简明扼要,不拖泥带水。 【不蔓不枝】蔓:藤蔓,引伸为蔓延。既不蔓延,也不分支。比喻说话或写文章简明扼要,不拖泥带水。 【笔墨官司】笔墨:指文字或文章。比喻用文字进行的辩论、争执。 【班马文章】汉代史学家司马迁与班固的并称。泛指可与班固、司马迁相比美的文章。【笔力独扛】扛:用两手举。形容文笔雄健,文章的气势极大。 【波澜老成】波澜:波涛,形容文章多起伏;老成:指文章很老练。形容文章气势雄壮,语句老练。 【不能赞一词】指文章写得好,别人不能再添一句话。形容文章非常完美。 【不忍卒读】卒:尽,完。不忍心读完。常用以形容文章内容悲惨动人。 【博士买驴】博士:古时官名。博士买了一头驴子,写了三纸契约,没有一个“驴”字。讥讽写文章长篇累牍而说不到点子上。 【匕首投枪】匕首:短剑。比喻短小犀利击中要害的文章。 【辩说属辞】属辞:撰写文章。用诡辩的的言论撰写文章。 【笔头生花】比喻写作能力大有进步。也形容文章写得很出色。 【不通文墨】通:精通;文墨:指写文章、着述等。指人文化水平不高或识字不多。 【笔下留情】指写文章时作者的措词和用意委婉留有情面。 【不以词害意】不因为只顾文辞而损害了对内容的理解。指写文章不要只追求修辞而忽略文章的立意。 【不以辞害志】辞:文辞;志:作品的思想内容。原意是不因为只顾文辞而损害了对内容的理解。后也指写文章不要只追求修辞而忽略文章的立意。 【鄙言累句】鄙言:浅俗的言辞。指文章的词句浅俗,不精炼。 【不易一字】不更动一个字。形容文章写得又快又好。 【璧坐玑驰】形容文章的语言精采美妙。 【不赞一辞】原指文章写得好,别人不能再添一句话。一句话也不说。 【词不逮理】词:言语,词句。逮:到;及。指说话、写文章时所用的词句不能充分、确切表达出思想感情。

C++变量命名规则

C++变量命名规则2008-09-03 14:48a Array 数组 b BOOL (int) 布尔(整数) by Unsigned Char (Byte) 无符号字符(字节) c Char 字符(字节) cb Count of bytes 字节数 cr Color reference value 颜色(参考)值 cx Count of x (Short) x的集合(短整数) dw DWORD (unsigned long) 双字(无符号长整数) f Flags (usually multiple bit values) 标志(一般是有多位的数值) fn Function 函数 g_ global 全局的 h Handle 句柄 i Integer 整数 l Long 长整数 lp Long pointer 长指针 m_ Data member of a class 一个类的数据成员 n Short int 短整数 p Pointer 指针 s String 字符串 sz Zero terminated String 以0结尾的字符串 tm Text metric 文本规则 u Unsigned int 无符号整数

ul Unsigned long (ULONG) 无符号长整数 w WORD (unsigned short) 无符号短整数 x,y x, y coordinates (short) 坐标值/短整数 v void 空 有关项目的全局变量用g_开始,类成员变量用m_,局部变量若函数较大则可考虑用l_用以显示说明其是局部变量。 前缀类型例子 g_ 全局变量g_Servers C 类或者结构体CDocument,CPrintInfo m_ 成员变量m_pDoc,m_nCustomers VC常用前缀列表: 前缀类型描述例子 ch char 8位字符chGrade ch TCHAR 16位UNICODE类型字符chName b BOOL 布尔变量bEnabled n int 整型(其大小由操作系统决定)nLength n UINT 无符号整型(其大小由操作系统决定)nLength

描写文章写得好的成语

描写文章写得好的成语 【哀梨并剪】并剪:并州产的锋利剪刀。比喻言语、文章流畅爽利。 【笔底烟花】比喻文章写得生动、出色。 【笔酣墨饱】指文章表达流畅,内容充足。 【不蔓不枝】蔓:藤蔓,引伸为蔓延。既不蔓延,也不分支。比喻说话或写文章简明扼要,不拖泥带水。 【不能赞一词】指文章写得好,别人不能再添一句话。形容文章非常完美。 【匕首投枪】匕首:短剑。比喻短小犀利击中要害的文章。 【笔头生花】比喻写作能力大有进步。也形容文章写得很出色。 【不易一字】不更动一个字。形容文章写得又快又好。 【璧坐玑驰】形容文章的语言精采美妙。 【沈博绝丽】指文章的含意深远,内容渊博,文辞美妙。 【操翰成章】翰:鸟毛,借指毛笔。拿起笔来就写成文章,形容文思敏捷,有文才。 【词华典瞻】赡:充裕。文章遣词华丽,用典充裕。 【肠回气荡】回:曲折,迂回;荡:摇荡。形容好的音乐、文章缠绵悱恻,感人极深的样子。【蹙金结绣】形容文章精美,结构严密。 【舂容大雅】指文章气度雍容,用辞典雅。 【风流缊藉】风流:风度,标格。形容人风雅潇洒,才华横溢。也形容文章诗画意趣飘逸含蓄。 【发人深思】深:无限,没有穷尽。启发人深入地思考。形容语言或文章有深刻的含意,耐人寻味。 行云流水丹青妙笔拍案叫绝妙笔生花笔扫千军笔下生花 惜墨如金点石成金笔下生辉一气呵成字字珠玉酣畅淋漓 淋漓尽致栩栩如生维妙维肖惟妙惟肖文笔极佳才思敏捷 博学多才才高八斗学富五车言简意赅完美无缺一针见血 远见卓识义正词严出口成章出类拔萃出神入化气贯长虹 气势磅礴气吞山河排山倒海惊涛骇浪雷霆万钧惊心动魄 横扫千军惊天动地见缝插针文从字顺十全十美无懈可击 无与伦比龙飞凤舞文笔犀利文风幽默文章雅致层次清晰 观念明确欢风华丽妙不可言妙趣横生短小精悍寓意深刻 朴实无华个性张扬文笔流畅辞藻华丽人物丰满形象鲜活 一语惊醒梦中人. 语不惊人死不休. 添一字嫌繁,删一字嫌简。(非成语) 【聱牙诘曲】聱牙:不顺口;诘曲:曲折。指文章读起来不顺口。 【聱牙佶屈】聱牙:不顺口;佶屈:曲折。指文章读起来不顺口。 【蚌病成珠】比喻因不得志而写出好文章来。 【炳炳烺烺】光亮鲜明。形容文章辞采声韵之美。 【蚌病生珠】比喻因不得志而写出好文章来。同“蚌病成珠”。

形容写作文好的成语

形容写作文好的成语 导读:别有风味:风味:原指美好的口味,引伸为事物的特色。另有一种美好的口味。比喻事物所另外具有的特殊色彩或趣味。下面请参考更多的形容写作文好的成语! 形容写作文好的成语 神施鬼设——形容诗文十分精妙,形容写作文好的成语。 言语妙天下——形容言语非常精妙。 一字连城——极言文辞的精妙。 语妙天下——形容言语精妙无比。 天机云锦——天机:天上的织机。云锦:丝织物名,锦丝瑰丽如云彩。天上织出的丝锦。比喻诗文华美精妙,浑成自然。 文搜丁甲——文章精妙感动神灵。丁甲,神名,即六丁六甲神。 一字千金——形容文辞精妙,不可更改。 语妙绝伦——谓言语精妙,无与伦比。 真知灼见——正确而透彻的见解。 舂容大雅——指文章气度雍容,用辞典雅 戛戛独造——形容文章别出心裁,富有独创精神 金声玉润——比喻文章气韵优美 精彩逼人——形容人神采奕奕或文章言语精彩感人 沉博绝丽——指文章的含义深远,内容渊博,文辞美妙。 金相玉质——比喻文章的形式和内容都完美。也形容人相貌端美。

良金美玉——比喻文章十分完美。也比喻人道德品质极好。 梦笔生花——比喻写作能力大有进步。也形容文章写得很出色。 奇文瑰句——瑰:珍奇。优美的文章。 沁人心脾——原指芳香凉爽的空气或饮料使人感到舒适。也形容诗歌和文章优美动人,给人清新爽朗的感觉,作文指导《形容写作文好的成语》。 青钱万选——比喻文章出众。 清音幽韵——比喻文章造诣极深。 扬葩振藻——葩:华美;藻:文采。形容文章写得华丽多采。 月章星句——形容文章优美,辞藻华丽。 作金石声——金石:钟磬之类的乐器,声音清脆优美。比喻文章优美,音调铿锵。 璧坐玑驰——形容文章的.语言精采美妙。 沈博绝丽——指文章的含意深远,内容渊博,文辞美妙。 不关痛痒 (bù guān tòng yǎng) 痛痒:比喻疾苦或紧要的事。比喻切身相关的事。指与自身利害没有关系。 不痛不痒 (bù tòng bù yǎng) 既不是痛,也不是痒。原形容说不出的一种难受。现多比喻不触及实质,不切中要害,不解决问题。 创巨痛深 (chuāng jù tòng shēn)

C语言编程规范简述

C语言编程规范简述 注释规范 注释的原则和目的注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的——清晰准确的函数、变量等的命名,可增加代码可读性,并减少不必要的注释——过量的注释则是有害的。 注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止重复注释信息。 进行注释时的注意事项:(1)建议边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。(2)注释的内容要清楚、明了,含义准确,防止注释二义性。说明:错误的注释不但无益反而有害。(3)避免在注释中使用缩写,特别是非常用缩写。在使用缩写时或之前,应对缩写进行必要的说明。 命名规范 命名的基本原则: (1)标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解——尽量采用采用英文单词或全部中文全拼表示,若出现英文单词和中文混合定义时,使用连字符“_”将英文与中文割开。较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写。例如:temp->tmp、flag->标志寄存器、statistic->stat、increment->inc、message->msg等缩写能够被大家基本认可。 (2)命名中若使用特殊约定或缩写,则要有注释说明。应该在源文件的开始之处,对文件中所使用的缩写或约定,特别是特殊的缩写,进行必要的注释说明。 (3)自己特有的命名风格,要自始至终保持一致,不可来回变化。个人的命名风格,在符合所在项目组或产品组的命名规则的前提下,才可使用。(即命名规则中没有规定到的地方才可有个人命名风格)。 (4)对于变量命名,禁止取单个字符(如i 、j 、k... ),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i 、j 、k 作局部循环变量是允许的。变量,尤其是局部变量,如果用单个字符表示,很容易敲错(如i写成j),而编译时又检查不出来,有可能为了这个小小的错误而花费大量的查错时间。 (5)除非必要,不要用数字或较奇怪的字符来定义标识符。 (6)命名规范必须与所使用的系统风格保持一致,并在同一项目中统一。 (7)在同一软件产品内,应规划好接口部分标识符(变量、结构、函数及常量)的命名,防止编译、链接时产生冲突。对接口部分的标识符应该有更严格限制,防止冲突。如可规定接口部分的变量与常量之前加上“模块”标识等。 (8)用正确的反义词组命名具有互斥意义的变量或相**作的函数等。

形容美的成语

形容美的成语 导读:形容美的成语集锦 [鸾吟凤唱] 鸾凤鸣叫相和。比喻优美的乐曲。 [凤鸣鹤唳] 形容优美的声音。 [钧天广乐] 指天上的音乐,仙乐。后形容优美雄壮的乐曲。 [锦心绣腹] 形容优美的文思,华丽的辞藻。 [满腹珠玑] 玑:不圆的珠子;珠玑:比喻优美的文章。形容人很有文才。 [秀水明山] 山光明媚,水色秀丽。形容风景优美。 [水秀山明] 山光明媚,水色秀丽。形容风景优美。 [山明水秀] 山光明媚,水色秀丽。形容风景优美。 [山清水秀] 形容风景优美。 [鸾回凤翥] 形容舞姿优美。 [风清月皎] 轻风清凉,月光皎洁。形容夜景优美宜人。 [歌声绕梁] 绕:回旋;梁:房屋的大梁。歌声回旋于房梁之间。形容歌声优美动听。 [目不给赏] 眼睛来不及观赏。形容景物优美繁多。 [福地洞天] 原为道家语,指神道居住的名山胜地。后多比喻风景优美的地方。 [洞天福地] 原为道家语,指神道居住的名山胜地。后多比喻风景优美的地方。

[目酣神醉] 形容景色优美令人陶醉。 [作金石声] 金石:钟磬之类的乐器,声音清脆优美。比喻文章优美,音调铿锵。 [绣口锦心] 锦、绣:精美鲜艳的丝织品。形容文思优美,词藻华丽。 [锦心绣口] 形容文思优美,词藻华丽。 [锦心绣肠] 形容文思优美,聪明有才。 [月章星句] 形容文章优美,辞藻华丽。 [锦胸绣口] 犹言锦心绣口。形容文思优美,词藻华丽。 [掷地赋声] 形容辞章优美。同“掷地金声”。 [水明山秀] 形容风景优美。同“水秀山明”。 [余音绕梁] 形容歌声优美,给人留下难忘的印象。 [咳珠唾玉] 比喻为文措辞优美。 [金声玉润] 比喻文章气韵优美。 [掷地金声] 金:钟罄之类的乐器。比喻文章词藻优美。 [掷地作金石声] 比喻文章词藻优美,声调铿锵。 [掷地有声] 金石:钟磬之类的乐器,声音清脆优美。比喻文章文辞优美,语言铿锵有力。 [珠圆玉润] 润:细腻光滑。象珠子一样圆,象玉石一样光润。比喻歌声宛转优美,或文字流畅明快。 [玉润珠圆] 润:细腻光滑。象珠子一样圆,象玉石一样光润。

C 函数变量命名规则

a Array数组 b BOOL(int)布尔(整数) by Unsigned Char(Byte)无符号字符(字节) c Char字符(字节) cb Count of bytes字节数 cr Color reference value颜色(参考)值 cx Count of x(Short)x的集合(短整数) dw DWORD(unsigned long)双字(无符号长整数) f Flags(usually multiple bit values)标志(一般是有多位的数值) fn Function函数 g_global全局的 h Handle句柄 i Integer整数 l Long长整数 lp Long pointer长指针 m_Data member of a class一个类的数据成员 n Short int短整数 p Pointer指针 s String字符串 sz Zero terminated String以0结尾的字符串 tm Text metric文本规则 u Unsigned int无符号整数 ul Unsigned long(ULONG)无符号长整数 w WORD(unsigned short)无符号短整数

x,y x,y coordinates(short)坐标值/短整数 v void空 有关项目的全局变量用g_开始,类成员变量用m_,局部变量若函数较大则可考虑用l_用以显示说明其是局部变量。 前缀类型例子 g_全局变量g_Servers C类或者结构体CDocument,CPrintInfo m_成员变量m_pDoc,m_nCustomers VC常用前缀列表: 前缀类型描述例子 ch char8位字符chGrade ch TCHAR16位UNICODE类型字符chName b BOOL布尔变量bEnabled n int整型(其大小由操作系统决定)nLength n UINT无符号整型(其大小由操作系统决定)nLength w WORD16位无符号整型wPos l LONG32位有符号整型lOffset dw DWORD32位无符号整型dwRange p*Ambient memory model pointer内存模块指针,指针变量pDoc lp FAR*长指针lpDoc lpsz LPSTR32位字符串指针lpszName lpsz LPCSTR32位常量字符串指针lpszName lpsz LPCTSTR32位UNICODE类型常量指针lpszName h handle Windows对象句柄hWnd

关于形容老的成语

关于形容老的成语 1、不二之老:不二:不生二心,一心一意;老:老人。指一心一意,忠心耿耿的老人或元老。 2、爱老慈幼:爱护老人和儿童。 3、饱以老拳:饱:充分;以:用。痛打,尽情地揍。 4、白发偕老:白头:头发白。指夫妻相爱相守一直到老。 5、老天拔地:形容老年人动作不灵活。 6、扶老将幼:扶:挽着。搀着老人,领着小孩。 7、波澜老成:波澜:波涛,形容文章多起伏;老成:指文章很老练。形容文章气势雄壮,语 句老练。 8、百年偕老:偕:共同。指夫妻共同白头到老。 9、白首之心:老年时的壮志。 10、白头到老:白头:头发白。夫妻相亲相爱,一直到老。 11、反老成童:反:同返,归,还。道教语,由衰老恢复青春。形容老年人充满了活力。 12、风中之烛:在风里晃动的`烛光。比喻随时可能死亡的老年人。也比喻随时可能消灭的事物。 13、百年谐老:指夫妻共同生活到老。 14、安老怀少:安:安顿;怀:关怀。尊重老人,使其安逸;关怀年轻人,使其信服。 15、返老还童:由衰老恢复青春。形容老年人充满了活力。 16、宝刀不老:比喻虽然年龄已大或脱离本行已久,但功夫技术并没减退。 17、雾里看花:原形容年老视力差,看东西模糊,后也比喻看事情不真切。 18、迟暮之年:迟暮:黄昏,比喻晚年。指人至老年。 19、宝刀未老:形容人到老年还依然威猛,不减当年。 20、白首穷经:直至年纪老了还在钻研经籍,犹言活到老,学到老。 21、摆老资格:摆出自己具有基于年长的声誉或权威 22、兵老将骄:老:衰。士兵疲惫,将领骄傲。 23、扶老挈幼:扶:挽着;挈:提携,带领。搀着老人,领着小孩。 24、白发红颜:头发斑白而脸色红润。形容老年人容光焕发的样子。 25、垂暮之年:垂:将,快要;暮:晚,老年。快要到老年。 26、风前残烛:比喻随时可能死亡的老年人。也比喻随时可能消灭的事物。 27、白头偕老:白头:头发白;偕:共同。夫妻相亲相爱,一直到老。 28、百年到老:指夫妻共同生活到老。 29、半老徐娘:徐娘:指梁元帝妃徐氏。指尚有风韵的中年妇女。 30、笔老墨秀:指笔姿老到而墨韵清秀。

相关主题
文本预览
相关文档 最新文档