当前位置:文档之家› define中的高级用法

define中的高级用法

define中的高级用法
define中的高级用法

define中的三个特殊符号:#,##,#@

===========================================================

1.#define Conn(x,y) x##y

2.#define ToChar(x)#@x

3.#define ToString(x)#x

(1)x##y表示什么?表示x连接y,举例说:

1.int n = Conn(123,456);/* 结果就是n=123456;*/

2.char* str = Conn("asdf","adf");/*结果就是 str = "asdfadf";*/

(2)再来看#@x,其实就是给x加上单引号,结果返回是一个const char。举例说:char a = ToChar(1);结果就是a='1';

做个越界试验char a = ToChar(123);结果就错了;

但是如果你的参数超过四个字符,编译器就给给你报错了!

error C2015: too many characters in constant :P

(3)最后看看#x,估计你也明白了,他是给x加双引号

char* str = ToString(123132);就成了str="123132";

===========================================================常用的一些宏定义

===========================================================

1 防止一个头文件被重复包含

1.#ifndef BODYDEF_H

2.#define BODYDEF_H

3.//头文件内容

4.

5.#endif

2 得到指定地址上的一个字节或字

1.#define MEM_B( x )(*((byte *)(x)))

2.#define MEM_W( x )(*((word *)(x)))

用法如下:

1.#include

2.#include

3.

4.#define MEM_B(x)(*((byte*)(x)))

5.#define MEM_W(x)(*((WORD*)(x)))

6.

7.int main()

8.{

9.int bTest = 0x123456;

10.

11. byte m = MEM_B((&bTest));/*m=0x56*/

12.int n = MEM_W((&bTest));/*n=0x3456*/

13.

14.return 0;

15.}

3 得到一个field在结构体(struct)中的偏移量

1.#define OFFSETOF( type, field )((size_t)&(( type *) 0)-> fiel

d )

4 得到一个结构体中field所占用的字节数

1.#define FSIZ( type, field )sizeof(((type *) 0)->field )

5 得到一个变量的地址(word宽度)

1.#define B_PTR( var )((byte *)(void*)&(var))

2.#define W_PTR( var )((word *)(void*)&(var))

6 将一个字母转换为大写

1.#define UPCASE( c )(((c)>=''a''&&(c)<=''z'')?((c)- 0x20):(c))

7 判断字符是不是10进值的数字

1.#define DECCHK( c )((c)>=''0''&&(c)<=''9'')

8 判断字符是不是16进值的数字

1.#define HEXCHK( c )(((c)>=''0''&&(c)<=''9'')||((c)>='

'A''&&(c)<=''F'')||((c)>=''a''&&(c)<=''f''))

9 防止溢出的一个方法

1.#define INC_SAT( val )(val =((val)+1 >(val))?(val)+1 :(va

l))

10 返回数组元素的个数

1.#define ARR_SIZE( a )(sizeof((a))/sizeof((a[0])))

11 使用一些宏跟踪调试

在调试时,我们可以设置__DEBUG宏,也可以再Makefile中使用-D编译选项设置,

[cpp]view plaincopyprint?

1.#define __DEBUG

使用方法为,

[cpp]view plaincopyprint?

1.#ifdef __DEBUG

2.printf("%s", ...);

3.#endif

另外,ANSI C标准中有几个标准预定义宏,前面几个(func...STDC)常用于printf(sprintf)等语句中:

__func__:在源代码中插入当前所在函数名;

__LINE__:在源代码中插入当前源代码行号;

__FILE__:在源文件中插入当前源文件名;

__DATE__:在源文件中插入当前的编译日期

__TIME__:在源文件中插入当前编译时间;

__STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;

__cplusplus:当编写C++程序时该标识符被定义。

其中__cplusplus常用于头文件中,格式如下:

[cpp]view plaincopyprint?

1.#ifndef _ZX_FUNC_H

2.#define _ZX_FUNC_H

3.

4.#ifdef __cplusplus

5.extern"C" {

6.#endif

7.

8./* functions */

9.char *strdup (const char *s);

10.

11.#ifdef __cplusplus

12.}

13.#endif

14.

15.#endif

extern"C"表示将其中的代码按照C编译方法编译,目的是实现C++与C语言的调用。

C编译与C++编译的区别是:C会将上面strdup编译成_STRDUP符号,而C++会编译成_STRDUP_CHAR,这也是C++为什么能实现函数重载的原因。extern只能出现在C++文件中,一般如上面的方式置于头文件中。

要在C中调用C++代码,需要在C代码中的函数或变量声明为extern类型,在C++中将函数或变量用extern "C"修饰。

12 简单数学计算(绝对值,三角函数等)

[cpp]view plaincopyprint?

1.#define ABS( a ) ( ((a)>0) ? (a) : (-(a)) )

13 #define 一个复杂语句

比如交换a,b的值,

[cpp]view plaincopyprint?

1.#define(a,b) do { \

2.int t = 0;

3. t = a; \

4. a = b; \

5. b = t; \

6.} while(0)

注:#define的这些高级用法在Linux源代码很多处出现,可阅读参考Linux源代码。

#define do{} while(0) 用法妙用

#define do{} while(0) 用法妙用 2010-12-10 11:44 #define do{} while(0) 什么意思 #define do{} while(0) 为什么这么用 什么情况下用宏定义do{}while(0); 简单地说,就是能够实现复杂的定义,通用性强,任何情况下都适用。 #define MACRO_NAME(para) do{macro content}while(0) 的格式,总结了以下几个原因: 1,空的宏定义避免warning: #define foo() do{}while(0) 2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。 3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现: #define foo(x) \ action1(); \ action2(); 在以下情况下: if(NULL == pPointer) foo(); 就会出现action1和action2不会同时被执行的情况,而这显然不是程序设计的目的。 4,以上的第3种情况用单独的{}也可以实现,但是为什么一定要一个do{}while(0)呢,看以下代码: #define switch(x,y) {int tmp; tmp="x";x=y;y=tmp;} if(x>y) switch(x,y); else //error, parse error before else otheraction(); 在把宏引入代码中,会多出一个分号,从而会报错。 //------------------------------------------------ 使用do{….}while(0)把它包裹起来,成为一个独立的语法单元,从而不会与上下文发生混淆。同时因为绝大多数的编译器都能够识别do{…}while(0)这种无用的循环并进行优化,所以使用这种方法也不会导致程序的性能降低。 详解如下:MFC, 在MFC的afx.h文件里面,你会发现很多宏定义都是用了do...while(0)或do...while(false),比如说: #define AFXASSUME(cond) do { bool __afx_condVal=!!(cond); ASSERT(__afx_condVal); __analysis_assume(__afx_condVal); } while(0) 粗看我们就会觉得很奇怪,既然循环里面只执行了一次,我要这个看似多余的do...while(0)有什么意义呢? 当然有!

关联词大全

关联词的分类和用法 1、并列关系:两个句子之间所表示的意思、事件、动作是平行并列的关系。 是 ......是......例句 :书籍是人类的良师,是人类的益友。 又 ......又......例句 :妈妈买的苹果又大又圆,吃起来又香又甜。 既 ......又......例句 :这双运动鞋既好看又舒服。 既 ......也......例句 :小红生病了,她既不想起床也不想吃饭。 是 ......也是 ......例句 :小兰是学者委员,也是班长。 一边 ......一边 ......例句 :音乐课上,我们一边打拍子一边唱歌。 一面 ......一面 ......例句 :在田间小道上,他一面吹着口哨一面享受着春风的吹拂。 那么 .......那么 ......例句 :云南的天空那么辽阔那么湛蓝。 有时 ......有时 ......例句 :她有时喜欢一个人发呆,有时喜欢和朋友欢聚。 有的 ......有的 ......例句 :下课了,同学们都去操场上玩耍,有的在打球,有的在跳绳。 不是 ......而是 ......例句 :这本书不是小红的,而是小明的。 是 ......不是 ......例句 :这个礼物是姑姑送我的,不是妈妈。 2、条件关系:条件关系就是前一部分提出了条件,后一部分是前一部分条件 产生的结果。 只要 ......就......例句 :只要努力学习,就会取得好成绩。 只有 ......才......例句 :只有多读书,才会博学多才。 不管 ......都......例句 :不管天气多么炎热,她都会去学习跳舞。

不管 ...... 也...... 例句 :不管数学题多难做,他也能做出来。 除非 ...... 才...... 例句 :除非你认真努力,才能保证考试时不出错。 无论 ...... 都...... 例句 :无论小可怎么努力,都背不会英语单词。 无论 ...... 也...... 例句 :无论条件有多困难,我也不会轻易放弃。 不论 ...... 都...... 例句 :不论怎么劝她,她都不会改变主意。 3、假设关系:假设关系就是前一部分假设出现或存在某种情况,后一部分说明这种假设情况产生的结果。 如果 ......就......例句 :如果假期老师不布置作业,那就太好了。 假如 ......就......例句 :假如你们都不同意,我就不去了。 要是 ......那么 ......例句 :要是你们不想参加比赛,那么我们就放弃。 要是 ......就......例句 :要是这次我们赢了,就一起庆祝一下吧。 即使 ......也......例句 :即使你想参加,也没有那个机会了。 即便 ......也......例句:即便你不吃饭,也不会变瘦的。 哪怕 ......也......例句:哪怕有一丝希望,我也会坚持到底的。 4、因果关系:因果关系就是两个句子之间是原因和结果的关系。 因为 .....所以 ......例句:因为我写字认真,妈妈表扬了我。 之所以 ......是因为 ......例句:我之所以撒谎,是因为不想让妈妈伤心。 由于 ......因此 ......例句:由于我咬牙坚持,因此我在 50 米比赛中得了第一名。 5、选择关系:两个分句间,列出两种情况,只能选择一种情况。 不是 ...... 就是 ...... 例句:今年暑假,我不是去海南就是去云南。 或者 ...... 或者 ...... 例句:你别坐着了,你或者可以看看书,或者听听音乐。

PE文件头解析大全

PE可选头部 PE可执行文件中接下来的224个字节组成了PE可选头部。虽然它的名字是“可选头部”,但是请确信:这个头部并非“可选”,而是“必需”的。OPTHDROFFSET宏可以获得指向可选头部的指针: PEFILE.H #define OPTHDROFFSET(a) ((LPVOID)((BYTE *)a + \ ((PIMAGE_DOS_HEADER)a)->e_lfanew + \ SIZE_OF_NT_SIGNATURE + \ sizeof(IMAGE_FILE_HEADER))) 可选头部包含了很多关于可执行映像的重要信息,例如初始的堆栈大小、程序入口点的位置、首选基地址、操作系统版本、段对齐的信息等等。IMAGE_OPTIONAL_HEADER结构如下: WINNT.H typedef struct _IMAGE_OPTIONAL_HEADER { // // 标准域 // USHORT Magic; UCHAR MajorLinkerVersion; UCHAR MinorLinkerVersion; ULONG SizeOfCode; ULONG SizeOfInitializedData; ULONG SizeOfUninitializedData; ULONG AddressOfEntryPoint; ULONG BaseOfCode; ULONG BaseOfData; // // NT附加域 // ULONG ImageBase; ULONG SectionAlignment;

ULONG FileAlignment; USHORT MajorOperatingSystemVersion; USHORT MinorOperatingSystemVersion; USHORT MajorImageVersion; USHORT MinorImageVersion; USHORT MajorSubsystemVersion; USHORT MinorSubsystemVersion; ULONG Reserved1; ULONG SizeOfImage; ULONG SizeOfHeaders; ULONG CheckSum; USHORT Subsystem; USHORT DllCharacteristics; ULONG SizeOfStackReserve; ULONG SizeOfStackCommit; ULONG SizeOfHeapReserve; ULONG SizeOfHeapCommit; ULONG LoaderFlags; ULONG NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER; 如你所见,这个结构中所列出的域实在是冗长得过分。为了不让你对所有这些域感到厌烦,我会仅仅讨论有用的——就是说,对于探究PE文件格式而言有用的。 标准域 首先,请注意这个结构被划分为“标准域”和“NT附加域”。所谓标准域,就是和UNIX可执行文件的COFF 格式所公共的部分。虽然标准域保留了COFF中定义的名字,但是Windows NT仍然将它们用作了不同的目的——尽管换个名字更好一些。 ·Magic。我不知道这个域是干什么的,对于示例程序EXEVIEW.EXE示例程序而言,这个值是0x010B

宏定义用法总结

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) ) )

小学语文最全的关联词用法(考点梳理)

小学语文最全的关联词用法(考点梳理) 关联词是指能够把两个或者两个以上在意义上有密切联系的句子连接起来组成比较复杂的句子的词语,恰当的使用关联词语,能使我们在说话或者协作时达到较好的表达效果。在小学语文中,这也是学习的重点。必须要掌握。 0 1 小学都有哪些需要掌握的关联词 【并列关系】 两个分句之间的关系相互并列。每个分句各说一件事或同一事件的一个方面。 既…又…一边…一边…又…又…一面…一面… 不是…而是…有时…有时…一会儿…一会儿…那么…那么… 例:小芳既爱唱歌,又爱跳舞。 【因果关系】 前面(后面)的分句说明原因,后面(前面)的分句说明结论或结果。 因为…所以…既然…就…由于…因而………因此…… 既然…那么………因为……之所以……是因为…… 例:①因为他真正下了苦功,所以成绩有了很大提高。

②既然你错了,就应该伸出手去请他原谅。 【转折关系】 后面分句的意思是前面分句意思的转折。 虽然…但是………可是……尽管…还是… 例:①奶奶虽然年纪大了,但是行动十分麻利。 ②尽管他身强体壮,还是搬不动这块大石头。 【选择关系】 两个分句表达两种情况,从中选一种。 或者…或者…宁可…也…不是…就是…与其…不如… 例:①桑娜宁可自己多受苦,也要照顾西蒙的两个孩子。 ②凡卡常想:与其在城里受罪,不如回到乡下爷爷那儿去。 【假设关系】 前面分句提出假设,后面分句表示结果。 如果…就…要是…就…假如…就…倘若…就…即使… 也… 例:①如果我们现在不好好学习,将来就不能更好地报 效祖国。 ②即使你成绩再好,也应该谦虚点。 【条件关系】 前面分句提出条件,后面分句表示结果。 只要…就…只有…才…除非…才…无论…都…

c语言中宏的高级使用技巧

1、前言 C语言程序中广泛的使用宏定义,采用关键字define进行定义,宏只是一种简单的字符串替换,根据是否带参数分为无参和带参。宏的简单应用很容易掌握,今天主要总结一下宏的特殊符号及惯用法。 (1)宏中包含特殊符号:#、##. (2)宏定义用do{ }while(0) 2、特殊符号#、## (1)# When you put a # before an argument in a preprocessor macro, the preprocessor turns that argument into a character array. 在一个宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组 简化理解:#是“字符串化”的意思,出现在宏定义中的#是把跟在后面的参数转换成一个字符串 #define ERROR_LOG(module) fprintf(stderr,"error: "#module"\n") ERROR_LOG("add"); 转换为fprintf(stderr,"error: "add"\n"); ERROR_LOG(devied =0); 转换为fprintf(stderr,"error: devied=0\n"); (2)## “##”是一种分隔连接方式,它的作用是先分隔,然后进行强制连接。 在普通的宏定义中,预处理器一般把空格解释成分段标志,对于每一段和前面比较,相同的就被替换。但是这样做的结果是,被替换段之间存在一些空格。如果我们不希望出现这些空格,就可以通过添加一些##来替代空格。 1 #define TYPE1(type,name) type name_##type##_type 2 #define TYPE2(type,name) type name##_##type##_type TYPE1(int, c); 转换为:int name_int_type ; (因为##号将后面分为name_ 、type 、_type 三组,替换后强制连接) TYPE2(int, d);转换为:int d_int_type ; (因为##号将后面分为name、_、type 、_type四组,替换后强制连接) 3、宏定义中do{ }while(0)

语文四年级下册需要掌握的关联词用法大全

一、小学都有哪些需要掌握的关联词 1、并列关系 两个分句之间的关系相互并列。每个分句各说一件事或同一事件的一个方面。 既…又…一边…一边…又…又…一面…一面… 不是…而是…有时…有时…一会儿…一会儿…那么…那么… 例:小芳既爱唱歌,又爱跳舞。 2、因果关系 前面(后面)的分句说明原因,后面(前面)的分句说明结论或结果。 因为…所以…既然…就…由于…因而………因此…… 既然…那么………因为……之所以……是因为…… 例:①因为他真正下了苦功,所以成绩有了很大提高。 ②既然你错了,就应该伸出手去请他原谅。 3、转折关系 后面分句的意思是前面分句意思的转折。 虽然…但是………可是……尽管…还是… 例:①奶奶虽然年纪大了,但是行动十分麻利。 ②尽管他身强体壮,还是搬不动这块大石头。 4、选择关系 两个分句表达两种情况,从中选一种。 或者…或者…宁可…也…不是…就是…与其…不如… 例:①桑娜宁可自己多受苦,也要照顾西蒙的两个孩子。 ②凡卡常想:与其在城里受罪,不如回到乡下爷爷那儿去。 5、假设关系 前面分句提出假设,后面分句表示结果。 如果…就…要是…就…假如…就…倘若…就…即使…也…

例:①如果我们现在不好好学习,将来就不能更好地报效祖国。 ②即使你成绩再好,也应该谦虚点。 6、条件关系 前面分句提出条件,后面分句表示结果。 只要…就…只有…才…除非…才…无论…都… 例:①只要刻苦努力,成功的道路就会出现在你的面前。 ②无论走到哪里,我都不会忘记辛勤培育我的老师。 7、递进关系 后面分句比前面分句意思更进一层。 不但…而且…不光…还…不仅…而且…不仅…还… 例:①赵州桥不但坚固,而且美观。 ②这不仅让我学到了知识,还让我懂得了做人的道理。 二、小学生该如何使用呢? 关联词语的正确使用要靠语境判断,仔细推断出来。使用关联词语的句子往往比较复杂,结合方法去判断就能省时省力许多。名师君在此分享五个方法点,结合例子帮助大家理解。 1、分清各类关联词的作用 同一个句子,运用不同的关联词语,表达的意思也不一样。 例如:“我们努力学习,期末取得优异成绩。” 加上关联词后,句子就变成: 因为我们努力学习,所以期末取得优异成绩。 如果我们努力学习,期末就能取得优异成绩。 只有我们努力学习,期末才能取得优异成绩。 第一句是因果关系,第二句是假设关系,第三句是条件关系。 究竟选用什么关系,这就要根据我们说话、造句或作文的需要来确定。 2、配对使用关联词 有些关联词语是要求配对使用的,不可随意改换。例如: 只要努力学习,才会取得优异成绩。 解放军宁可挨饿,不如打扰老百姓。

C语言宏操作大全

C语言宏操作(来源于网络) 写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。 typedef unsigned char boolean;/*Boolean value type. */ typedef unsigned long int uint32;/*Unsigned32bit value*/ typedef unsigned short uint16;/*Unsigned16bit value*/ typedef unsigned char uint8;/*Unsigned8bit value*/ typedef signed long int int32;/*Signed32bit value */ typedef signed short int16;/*Signed16bit value*/ typedef signed char int8;/*Signed8bit value*/ //下面的不建议使用 typedef unsigned char byte;/*Unsigned8bit value type.*/ typedef unsigned short word;/*Unsinged16bit value type.*/

typedef unsigned long dword;/*Unsigned32bit value type.*/ typedef unsigned char uint1;/*Unsigned8bit value type.*/ typedef unsigned short uint2;/*Unsigned16bit value type.*/ typedef unsigned long uint4;/*Unsigned32bit value type.*/ typedef signed char int1;/*Signed8bit value type.*/ typedef signed short int2;/*Signed16bit value type.*/ typedef long int int4;/*Signed32 bit value type.*/ typedef signed long sint31;/*Signed32bit value*/ typedef signed short sint15;/*Signed16bit value*/ typedef signed char sint7;/*Signed8bit value*/ 3,得到指定地址上的一个字节或字 #define MEM_B(x)(*((byte*)(x))) #define MEM_W(x)(*((word*)(x))) 4,求最大值和最小值 #define MAX(x,y)(((x)>(y))?(x):(y)) #define MIN(x,y)(((x)<(y))?(x):(y)) 5,得到一个field在结构体(struct)中的偏移量 #define FPOS(type,field)\

Arduino串口高级用法

配置串口通信数据位、校验位、停止位 通常我们使用Serial.begin(speed)来完成串口的初始化,这种方式,只能配置串口的波特率。而使用Serial.begin(speed, config)可以配置数据位、校验位、停止位等。例如Serial.begin(9600,SERIAL_8E2)是将串口波特率设为9600,数据位8,偶校验,停止位2。config可用配置如下: if (Serial)的用法 当串口被打开时,Serial的值为真。串口被关闭时Serial的值为假。比较囧的是,这个方法只适用于Leonardo和micro的 Serial,也就是说连接连接到电脑USB的那个模拟串口。例如以下程序,当你没有使用串口监视器打开串口时,程序就会一直循环运行while (!Serial) {;} ,当你打开串口监视器,程序会退出while循环,开始loop中的程序。 read和peek输入方式的差异 串口接收到的数据都会暂时存放在接收缓冲区中,使用read()与peek()都是从接收缓冲区中读取数据。不同的是,使用read()读取数据后,会将该数据从接收缓冲区移除;而使用peek()读取时,不会移除接收缓冲区中的数据。你可以使用以下程序,观察其运行结果: 串口读入int型数据 实际上是串口读入字符串,再转换为int型数据。 输出不同进制的文本 我们可以是用 Serial.print(val, format)的形式输出不同进制的文本

参数val 是需要输出的数据 参数format 是需要输出的进制形式,你可以使用如下参数: BIN(二进制) DEC(十进制) OCT(八进制) HEX(十六进制) 例如,使用Serial.print(123,BIN),你可以在串口调试器上看到1111011 使用Serial.print(123,HEX),你可以在串口调试器上看到7B 修改串口缓冲区大小 Arduino串口缓冲区默认为64字节,如果你单次传输的数据较多可以将arduino-1.0.5-r2\hardware\arduino\cores\arduino\HardwareSerial.cpp中的 #define SERIAL_BUFFER_SIZE 64 修改为 #define SERIAL_BUFFER_SIZE 128 这样就有128字节的缓冲区了 Arduino MEGA\Arduino DUE上其他串口用法 serial1\serial2\serial3和serial用法一样,比如serial3.begin(9600);

关联词大全

一、否定命题关联词 并非并不是非 二、合取命题关联词 (一)并列关系 有的···有的一方面···一方面有时(候)···有时(候) 那么···那么 不是···而是既然···又一边···一边也···也既···又···又···又一会···一会···还···不是···而是是···不是也、又、还、同时、同样、并且、和、与、另外、以及 (二)转折关系 虽然/尽管/固然···但是/然而/却/可是总是···但是 不过、只是、可是、但是、却、然而、其实、实际上、事实上 (三)递进关系 不但/不仅/不只/不光···又/更/还/而且/并且/简直不但不/不仅不···反而/反倒尚且···何况/更不用说/更别说/还别说/慢说/不要说/且不说···连/就连/连 而且、并且、甚至、更、尤其、尤甚、况且、还、也、反而、何况 (四)承接关系 一··就首先···然后起初···最后起先···后来···刚···就···就、便、才、跟着、随着、随后、然后、后来、于是、接着、终于、最后、继而以致、从而、以便、原来、可见 三、析取命题关联词 (一)相容析取 或者···或者或是···或是或···或也许···也许是···还是或、或者、或者是、要么、还是、 (二)不相容析取 不在···就在不是···就是要么···要么或者···或者 二者不可兼得与其···宁可/宁肯/宁愿/毋宁与其···不如/还不如/倒不如宁可/宁肯/宁愿···也不/决不/也要 四、条件命题关联词 (一)条件关系

只有···才只要···就无论···都/也任凭···都/也不管···都/总 如果···那么/就如果不···那么不一旦···便/就有···就有 没有···就没有除非···才/否则/不然 当且仅当若且惟且 (二)假设关系 如果/假如/假若/如若/假设/倘若/若/再/要/要是/若要···就/那么/那/便/那就/则 即使/就算/纵然/就是/哪怕/即便/纵使···也/也要/还/还是再···也 (三)因果关系 因为···所以因···便由于···因而/因此故而/故此鉴于此/基于此之所以···是因为/由于/出于既然···那么/那就/便/又何必 因此、因而、所以、以致、致使、从而、可见、看来、总之、言而总之、综上所述、概而言之、概而论之 五、简单命题关联词 所有···都任何···都 六、表示目的的关联词 以、以便、以求、力求、力争、用以、借以、好、为的是、以免、免得、省得、以防 其他: 沿着、趁着、经过、发轫于发端于起源于来于源于

C语言函数大全(p开头).docx

函数大全(p开头) 61 函数名:parsfnm 功能:分析文件名 用法:char *parsfnm (char *cmdline, struct fcb *fcbptr, int option); 程序例: #include #include #include #include int main(void) { char line[80]; struct fcb blk; /* get file name */ printf(M Enter drive and file name (no path - ie. a:file.dat)\n M); gets(line); /* put file name in fcb */ if (parsfnm(line, &blk, 1) == NULL) printf(M Error in parsfm call\n H); else printf("Drive #%d Name: %1 ls\n", blk.fcb_drive, blk.fcb_name); return 0; 函数名:peek 功能:检查存储单元 用法:int peek(int segment, unsigned offset); 程序例: #include #include #include int main(void) int value = 0;

prinif(=The current sUHus of your keyboard is,n=); value H Peek(oxoo4p0x0017) 八 if (value 1) P S-二 f(--Right shift onm=)八 else printaRight shift 05n =) 八 if (value 2) primf(=Lefr shift onvr.r else prin-fTLen shift O 51T ); if (value &. 4) printf(=con=rol key on\n=)_ else p r i n .s =c o =r o 】 key off\n=)八 if (value Rp 8) printf(=Alr key on\n=)一 else p r i n s ->-t key 03=)

define用法以及

#define用法以及#define和typedef区别1.简单的define定义 #define MAXTIME 1000 2.define的“函数定义” define可以像函数那样接受一些参数,如下 #define max(x,y) (x)>(y)?(x):(y); 因为这个“函数”没有类型检查,就好像一个函数模板似的,没有模板那么安全就是了。 但是这样做的话存在隐患,例子如下: #define Add(a,b) a+b;如果遇到如:c * Add(a,b) * d的时候就会出现问题。 另外举一个例子: #define pin (int*); pin a,b; 本意是a和b都是int型指针,但是实际上变成int* a,b; a是int型指针,而b是int型变量。 这时应该使用typedef来代替define,这样a和b就都是int型指针了。 我们在定义的时候,养成一个良好的习惯,建议所有的层次都要加括号。 3.宏的单行定义(少见用法) #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" 4.define的多行定义 define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心)

#define MACRO(arg1, arg2) do { \ /* declarations */ \ stmt1; \ stmt2; \ /* ... */ \ } while(0) /* (no trailing ; ) */ 关键是要在每一个换行的时候加上一个"\" 5.在大规模的开发过程中,特别是跨平台和系统的软件里,define最重要的功能是条件编译。 就是: #ifdef WINDOWS ...... ...... #endif #ifdef LINUX ...... ...... #endif 可以在编译的时候通过#define设置编译环境。 6.如何定义宏、取消宏 #define [MacroName] [MacroValue] //定义宏 #undef [MacroName] //取消宏 #define PI (3.1415926) //普通宏 #define max(a,b) ((a)>(b)? (a),(b)) //带参数的宏 7.条件编译 #ifdef XXX…(#else) … #endif 例如 #ifdef DV22_AUX_INPUT #define AUX_MODE 3

常用关联词用法讲解

常用关联词用法讲解 (1)并列关系:句子中几个分句之间的关系是平等并列的、没有主次之分,各个分句分别说明几种相关的情况,或表示一件事的几个方面。常用的关联词语有 “既……又……”“不是……而是……”“一边……一边……”“一面……一面……” (2)递进关系:后面分句的意思比前面分句的意思更进一层。常用的关联词语有: ①不但……而且……②不光……还……③不仅……也…… ④不仅……而且……⑤不但……还…… (3)选择关系:几个分句分别说出几件事情,需要从中选择一件。常用的关联词有: ①是……还是……②或者……或者……③不是……就是…… ④……还是……⑤要么……要么…… (4)转折关系:前一个分句说了一个意思,后一个分句不是顺着前一个分句的意思说下来,而是作了一个转折,说出的意思,和前一个分句完全相反或相对。常用的关联词语有:①虽然……但是……②尽管……还…… (5)假设关系:句子前面一部分介绍一种假设情况,后面一部分是假设的情况实现后要产生的结果。 ①如果……就……②即使……也……③哪怕……也…… (6)条件关系:句子前面提出条件,后面说明在这种条件下会产生的结果。关联词语有: ①只要……就……②无论……都……③不管……总…… (7)因果关系:句子的前一部分表示原因或(结果),后一部分表示结果或(原因),常用关联词语有: ①因为……所以……②既然……就……③之所以……是因为…… (8)取舍关系:分句表示两种情况,选取一种,舍弃一种。关联词语有:“宁可……也不……”“与其……不如……”

(9)承接关系:句与句之间表示几个连续动作,或先后发生的几种情况,它们前后承接,不能颠倒。 例:“先……再……最后……”等 试着做一做吧,相信你能行! 1、()多读多练,作文()会进步。 2、()你答应去,()该准时去叫他。 3、这本小说有趣极了,()我一口气就把它看完了。 4、雨来()牺牲生命,()泄露秘密。 5、凡卡心想,()在城里受罪,()回到乡下爷爷那里去。 6、我俩()住得很远,()不常见面。 7、()别人的意见不一定全对,我们()要虚心听取。 8、()要努力读书,()要关心政治。 9、()军校招生,我()报考军校。 10、()走到哪里,他()听到乐声。

WORD使用技巧大全(史上最强哦)

答:分节,每节可以设置不同的页眉。文件——页面设置——版式——页眉和页脚——首页不同 2.问:请问word中怎样让每一章用不同的页眉?怎么我现在只能用一个页眉,一改就全部改了?答:在插入分隔符里,选插入分节符,可以选连续的那个,然后下一页改页眉前,按一下“同前”钮,再做的改动就不影响前面的了。简言之,分节符使得它们独立了。这个工具栏上的“同前”按钮就显示在工具栏上,不过是图标的形式,把光标移到上面就显示出”同前“两个字来了 3.问:如何合并两个WORD文档,不同的页眉需要先写两个文件,然后合并,如何做?答:页眉设置中,选择奇偶页不同/与前不同等选项 4.问:WORD编辑页眉设置,如何实现奇偶页不同? 比如:单页浙江大学学位论文,这一个容易设;双页:(每章标题),这一个有什么技巧啊 ?答:插入节分隔符,与前节设置相同去掉,再设置奇偶页不同 5.问:怎样使WORD文档只有第一页没有页眉,页脚?答:页面设置-页眉和页脚,选首页不同,然后选中首页页眉中的小箭头,格式-边框和底纹,选择无,这个只要在“视图”——“页眉页脚”,其中的页面设置里,不要整个文档,就可以看到一个“同前”的标志,不选,前后的设置情况就不同了。 6.问:如何从第三页起设置页眉?答:在第二页末插入分节符,在第三页的页眉格式中去掉同前节,如果第一、二页还有页眉,把它设置成正文就可以了 ●在新建文档中,菜单—视图—页脚—插入页码—页码格式—起始页码为0,确定; ●菜单—文件—页面设置—版式—首页不同,确定;

●将光标放到第一页末,菜单—文件—页面设置—版式—首页不同—应用于插入点之后,确定。第2步与第三步差别在于第2步应用于整篇文档,第3步应用于插入点之后。这样,做两次首页不同以后,页码从第三页开始从1编号,完成。 7.问:WORD页眉自动出现一根直线,请问怎么处理?答:格式从“页眉”改为“清除格式”,就在“格式”快捷工具栏最左边;选中页眉文字和箭头,格式-边框和底纹-设置选无 8.问:页眉一般是---------,上面写上题目或者其它,想做的是把这根线变为双线,WORD中修改页眉的那根线怎么改成双线的?答:按以下步骤操作去做: ●选中页眉的文字,包括最后面的箭头 ●格式-边框和底纹 ●选线性为双线的 ●在预览里,点击左下小方块,预览的图形会出现双线 ●确定▲上面和下面自己可以设置,点击在预览周围的四个小方块,页眉线就可以在不同的位置 9.问:Word中的脚注如何删除?把正文相应的符号删除,内容可以删除,但最后那个格式还在,应该怎么办?答:步骤如下:1、切换到普通视图,菜单中“视图”——“脚注”,这时最下方出现了尾注的编辑栏。2、在尾注的下拉菜单中选择“尾注分隔符”,这时那条短横线出现了,选中它,删除。3、再在下拉菜单中选择“尾注延续分隔符”,这是那条长横线出现了,选中它,删除。4、切换回到页面视图,尾注和脚注应该都是一样的

define宏定义中的#,##,@#及符号

d efine宏定义中的#,##,@#及\符号(ZT) C++ STL学习2011-04-24 18:04:03 阅读19 评论0 字号:大中小订阅 1、# (stringizing)字符串化操作符。其作用是:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。 如: #define example(instr) printf("the input string is:\t%s\n",#instr) #define example1(instr) #instr 当使用该宏定义时: example(abc);在编译时将会展开成:printf("the input string is:\t%s\n","abc"); string str=example1(abc);将会展成:string str="abc"; 注意: 对空格的处理 a。忽略传入参数名前面和后面的空格。 如:str=example1( abc );将会被扩展成str="abc"; b.当传入参数名间存在空格时,编译器将会自动连接各个子字符串,用每个子字符串中只以一个空格连接,忽略其中多余一个的空格。

如:str=exapme( abc def); 将会被扩展成str="abc def"; 2、## (token-pasting)符号连接操作符 宏定义中:参数名,即为形参,如#define sum(a,b) (a+b);中a和b 均为某一参数的代表符号,即形式参数。 而##的作用则是将宏定义的多个形参成一个实际参数名。 如: #define exampleNum(n) num##n int num9=9; 使用: int num=exampleNum(9); 将会扩展成int num=num9; 注意: 1.当用##连接形参时,##前后的空格可有可无。 如:#define exampleNum(n) num ## n 相当于#define exampleNum(n) num##n 2.连接后的实际参数名,必须为实际存在的参数名或是编译器已知的宏定义 // preprocessor_token_pasting.cpp

实用word使用技巧大全

实用Word使用技巧大全 目录 第一、WORD问答 (1) 第二、论文WORD技巧小结 (13) 第三、用WORD排论文的技巧 (14) 第四、用WORD编辑论文的几个建议 (15) 第五、快捷键 (18) 第六、功能键 (20) 第七、WORD表格处理技巧 (21) II

第一、Word问答 1.问:Word里边怎样设置每页不同的页眉如何使不同的章节显示的页眉不同 答:分节,每节可以设置不同的页眉。文件——页面设置——版式——页眉和页脚——首页不同。 2.问:请问Word中怎样让每一章用不同的页眉怎么我现在只能用一个页眉,一改就全部改了 答:在插入分隔符里,选插入分节符,可以选连续的那个,然后下一页改页眉前,按一下“同前”钮,再做的改动就不影响前面的了。简言之,分节符使得它们独立了。这个工具栏上的“同前”按钮就显示在工具栏上,不过是图标的形式,把光标移到上面就显示出”同前“两个字来了。 3.问:如何合并两个Word文档,不同的页眉需要先写两个文件,然后合并,如何做 答:页眉设置中,选择奇偶页不同/与前不同等选项。 4.问:Word编辑页眉设置,如何实现奇偶页不同比如:单页浙江大学学位论文,这一个容易设;双页:(每章标题),这一个有什么技巧啊 答:插入节分隔符,与前节设置相同去掉,再设置奇偶页不同。 5.问:怎样使Word文档只有第一页没有页眉,页脚 答:页面设置-页眉和页脚,选首页不同,然后选中首页页眉中的小箭头,格式-边框和底纹,选择无,这个只要在“视图”——“页眉页脚”,其中的页面设置里,不要整个文档,就可以看到一个“同前”的标志,不选,前后的设置情况就不同了。 6.问:如何从第三页起设置页眉 答:在第二页末插入分节符,在第三页的页眉格式中去掉同前节,如果第一、二页还有页眉,把它设置成正文就可以了。 1

#define 用法大全

#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 #define identifier token-stringopt #define identifier[( identifieropt, ... , identifieropt )] token-stringopt Usage[用法]: 1.简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME 就定义好了,它代表1000,如果在程序里面写 if(i(y)?(x):(y); 这个定义就将返回两个数中较大的那个,看到了吗?因为这个“函数”没有类型检查,就好像一个函数模板似的,当然,它绝对没有模板那么安全就是了。可以作为一个简单的模板来使用而已。 但是这样做的话存在隐患,例子如下: #define Add(a,b) a+b; 在一般使用的时候是没有问题的,但是如果遇到如:c * Add(a,b) * d 的时候就会出现问题,代数式的本意是a+b 然后去和c,d 相乘,但是因为使用了define(它只是一个简单的替换),所以式子实际上变成了c*a + b*d 另外举一个例子: #define pin (int*); pin a,b; 本意是a 和b 都是int 型指针,但是实际上变成int* a,b; a 是int 型指针,而 b 是int 型变量。 这是应该使用typedef 来代替define,这样a 和b 就都是int 型指针了。

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