文档库 最新最全的文档下载
当前位置:文档库 › 预处理命令行

预处理命令行

预处理命令行
预处理命令行

预处理命令行都必须以【1】号开始.

答案:

======(答案1)======

#

设有以下宏定义

# define WIDTH 80

# define LENGTH (WIDTH +40)

则执行赋值语句:v= LENGTH*20;(v为int型变量)后,v的值是【1】. 答案:

======(答案1)======

2400

设有以下宏定义

# define WIDTH 80

# define LENGTH WIDTH +40

则执行赋值语句:v= LENGTH*20;(v为int型变量)后,v的值是【1】.80+40*20

答案:

======(答案1)======

880

以下程序的运行结果是【1】.

#include

#define MIN(x,y) (x)

main()

{ inti=10,j=15,k ;

k=10*MIN(i,j);

printf("%d\n",k);

}

答案:

======(答案1)======

100

下列程序运行结果为:

#define P 3

#define S(a) P*a*a

main()

{intar;

ar=S(3+5);//3*3+5*3+5

printf("\n%d",ar);

}

#define宏都是直接替换的,不会计算后再替换。s(3+5) = p*3+5*3+5 = 9+15+5 =29

若想计算后在替换,需要加上括号:

#define S(a) P*(a)*(a)

若有宏定义如下:

#define X 5

#define Y X+1

#define Z Y*X/2

则执行以下printf语句后,输出结果是(). inta;a=Y;

printf("%d ",Z);

printf("%d\n",--a);

A) 7 6

B) 12 6

C) 12 5

D) 7 5

答案:D

请读程序:

#include

#define MUL(x,y) (x)*y

main()

{

int a=3,b=4,c;

c=MUL(a++,b++);

printf("%d\n",c);

}

上面程序的输出结果是().

A) 12

B) 15

C) 20

D) 16

答案:A

有如下程序

#define N 2

#define M N+1

#define NUM 2*M+1

main( )

{ inti;

for(i=1;i<=NUM;i++) printf("%d\n",i); // }

该程序中的for循环执行的次数是().

A) 5

B) 6

C) 7

D) 8

答案:B

#define N 2

#define M N+1

#define NUM (M+1)*M/2

main()

{int I;

for(I=1;I<=NUM;I++)

printf(“%d\n”,I);

}

NUM (M+1)*M/2=(2+1+1)*2+1/2=8

有以下程序

#define f(x) x*x

main( )

{ inti;

i=f(4+4)/f(2+2);

printf("%d\n",i);

}

执行后输出结果是()//.i=4+4*4+4/2+2*2+2=28

A) 28

B) 22

C) 16

D) 4

答案:A

#include "stdio.h"

main()

{ chara,b;

for(a='0',b='9';a

编译预处理

第九章编译预处理 9.1 选择题 【题9.1】以下叙述中不正确的是。 A)预处理命令行都必须以#号开始 B)在程序中凡是以#号开始的语句行都是预处理命令行 C)C程序在执行过程中对预处理命令行进行处理 D)以下是正确的宏定义 #define IBM_PC 【题9.2】以下叙述中正确的是。 A)在程序的一行上可以出现多个有效的预处理命令行 B)使用带参的宏时,参数的类型应与宏定义时的一致 C)宏替换不占用运行时间,只占编译时间 D)在以下定义中C R是称为“宏名”的标识符 #define C R 045 【题9.3】请读程序: #define ADD(x) x+x main() { int m=1,n=2,k=3; int sum=ADD(m+n)*k; printf(“sum=%d”,sum); } 上面程序的运行结果是。 A)sum=9 B)sum=10 C)sum=12 D)sum=18 【题9.4】以下程序的运行结果是。 #define MIN(x,y) (x)<(y)?(x):(y) main() { int i=10,j=15,k; k=10*MIN(i,j); printf(“%d\n”,k); } A)10 B)15 C)100 D)150 【题9.5】在宏定义#define PI 3.14159中,用宏名PI代替一个。 A)常量B)单精度数C)双精度数D)字符串

【题9.6】以下程序的运行结果是。 #include #define FUDGE(y) 2.84+y #define PR(a) printf(“%d”,(int)(a)) #define PRINT1(a) PR(a); putchar(‘\n’) main() { int x=2; PRINT1(FUDGE(5)*x); } A)11 B)12 C)13 D)15 【题9.7】以下有关宏替换的叙述不正确的是。 A)宏替换不占用运行时间B)宏名无类型 C)宏替换只是字符替换D)宏名必须用大写字母表示 【题9.8】C语言的编译系统对宏命令的处理是。 A)在程序运行时进行的 B)在程序连接时进行的 C)和C程序中的其它语句同时进行编译的 D)在对源程序中其它成份正式编译之前进行的 【题9.9】若有宏定义如下: #define X 5 #define Y X+1 #define Z Y*X/2 则执行以下printf语句后,输出结果是。 int a; a=Y; printf(“%d\n”,Z); printf(“%d\n”,--a); A)7 B)12 C)12 D)7 6 6 5 5 【题9.10】若有以下宏定义如下: #define N 2 #define Y(n) ((N+1)*n) 则执行语句z=2*(N+Y(5));后的结果是。 A)语句有错误B)z=34 C)z=70 D)z无定值 【题9.11】若有宏定义:#define MOD(x,y) x%y 则执行以下语句后的输出为。 int z,a=15,b=100; z=MOD(b,a); printf(“%d\n”,z++);

C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)

C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等) 预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。 在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。 预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。下面是部分预处理指令: 指令用途 #空指令,无任何效果 #include包含一个源代码文件 #define定义宏 #undef取消已定义的宏 #if如果给定条件为真,则编译下面代码 #ifdef如果宏已经定义,则编译下面代码 #ifndef如果宏没有定义,则编译下面代码 #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #endif结束一个#if……#else条件编译块 #error停止编译并显示错误信息 一、文件包含 #include预处理指令的作用是在指令处展开被包含的文件。包含可以是多重的,也就是说一个被包含的文件中还可以包含其他文件。标准C编译器至少支持八重嵌套包含。 预处理过程不检查在转换单元中是否已经包含了某个文件并阻止对它的多次包含。这样就可以在多次包含同一个头文件时,通过给定编译时的条件来达到不同的效果。例如: #defineAAA #include"t.c" #undefAAA #include"t.c" 为了避免那些只能包含一次的头文件被多次包含,可以在头文件中用编译时条件来进行控制。例如: /*my.h*/ #ifndefMY_H

MRI数据预处理流程资料讲解

数据处理基本流程 由于MRI是断层扫描,耗费时间较长,患者在进行MRI扫描的时候不可避免的会头部挪动,导致照射出来的图像不能一一映射;不同人的头颅,脑部大小,形状都会有所差异,获得的MRI图像也千差万别,无法对其进行对比。所以我们就必须用一种算法将所有的MRI图像进行空间转换到一个比较标准的空间(目前使用较多的是被神经学家广泛认可的Talairach坐标系)将各个解剖结构一一对应后,再与标准化图谱或者不同个体之间相互比较(目前使用的是Talairach-Tournoux图谱) 本文使用的是SPM软件和MRIcro软件处理图像数据,将MRI图像进 行数据分析。 数据分析的基本流程: (1)数据预处理:○1图像格式转换○2slice timing获取时间校正○3realign头动校正○4Coregister不同成像方法间的图像融合○5nomalize 不同被试之间的图像标准化(归一化)○6smooth空间平滑《2 3 4统称图像的空间变换》 (2)模型构建与参数估计:○:1建立统计模型○2将数据应用于统计模型○3进行参数统计得到单个被试的结果,多个被试的组分析 数据预处理 SPM是一款以MATLAB为平台的软件,所以使用SPM前一定要安装MATLAB。打开MATLAB软件,界面如下:

1.图像格式转换。 在进行数据预处理第一步要先将图像格式转换成SPM可以识别的ANALYZE格式。转换之前先将原始数据放在MATLAB下面的mri image文件夹下,将路径设置成D:\MATLAB\work\mri image\ 设置过程如下: 点击红色方块所指的按钮,在弹出的窗口中选择工作路径,按确定按钮即可。 设置完工作路径后,利用如下方法,将SPM2及其所有子文件夹添加到MATLAB的搜索途径中(1.点击file按钮,在下拉菜单选择set path2.在弹出的路径设置窗口点击"Add Folder"浏览并选择目标文件夹,eg:D:\spm2\3.点击save按钮4.点击close按钮,完成添加) 在打开SPM之前,应先确定默认变量的设置是否准确,具体做法如下:1.在matlab命令窗口输入“edit spm_defaults"打开spm_defaults.m文件2.查看defaults.analyze.flip条目,确认defaults.analyze.fip值是否为1,若不是,改成1 打开SPM:在matlab命令窗口输入“spm"回车后出现下面窗口,按黄色长方形覆盖的按钮,方可打开SPM软件(或者直接输入spm fmri即可打开)

第九章 编译预处理

第九章编译预处理 一、单选题 1.以下对宏替换的叙述不正确的是 A)宏替换只是字符的替换B)宏替换不占运行时间 C)宏名无类型,其参数也无类型 D)带参的宏替换在替换时,先求出实参表达式的值,然后代入形参运算求值2.宏定义#define PI 3.14中的宏名PI代替 A)一个单精度实数)B)一个双精度实数 C)一个字符串 D)不确定类型的数 3.有以下宏定义 #define k 2 #define X(k) ((k+1)*k) 当C程序中的语句y = 2 * (K + X(5));被执行后, A)y中的值不确定 B)y中的值为65 C)语句报错 D)y中的值为34 4.以下程序的输出结果是 #define MIN(x, y) (x) < (y) ? (x) : (y) main() { int i , j, k; i = 10; j = 15; k = 10 * MIN(i, j); printf(“%d\n”, k); }

A)15 B)100 C)10 D)150 5.以下程序中的for循环执行的次数是 #define N 2 #define M N + 1 #define NUM (M + 1) * M / 2 main() { int i; for(i = 1; i <= NUM; i++); pritnf(“%d\n”, i ); } A)5 B)6 C)8 D)9 6.以下程序的输出结果是 #include “stdio.h” #define FUDGF(y) 2.84 + y #define PR(a) printf(“%d”, (int) ( a ) ) #define PRINT1(a) PR(a); putchar(‘\n’) main() { int x = 2; PRINTF1(FUDGF(5) * X); } A)11 B)12 C)13 D)15 7.以下程序的输出结果是 #define FMT “%d,” main()

C语言程序设计教案 第九章 编译预处理

第九章编译预处理 课题:第九章编译预处理 教学目的:1、了解预处理的概念及特点 2、掌握有参宏与无参宏的定义及使用,领会文件包含的使用及效果 教学重点:教学难点:掌握宏的使用,文件包含有参宏与无参宏的使用 步骤一复习引导 ANSI C标准规定可以在C源程序中加入一些“预处理命令”,以改进程序设计环境,提高编程效率。 这些预处理命令是由ANSI C统一规定的,但它不是C语言本身的组成部分,不能直接对它们进行编译。必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行“预处理”,即根据预处理命令对程序作相应的处理。经过预处理后程序不再包括预处理命令了,最后再由编译程序对预处理后的源程序进行通常的编译处理,得到可供执行的目标代码。 步骤二讲授新课 C语言与其他高级语言的一个重要区别是可以使用预处理命令和具有预处理的功能。C 提供的预处理功能主要有以下三种:宏定义、文件包含、条件编译。 分别用宏定义命令、文件包含命令、条件编译命令来实现。为了与一般C语句相区别,这些命令以符号“ #” 开头。 §9.1宏定义 宏:代表一个字符串的标识符。 宏名:被定义为“宏”的标识符。 宏代换(展开):在编译预处理时,对程序中所有出现的“宏名”,用宏定义中的字符串去代换的过程。 一、不带参数的宏定义 一般形式:#define 标识符字符串 #define PI 3.1415926 main() { float l, s, r, v; printf( “input radius:” ); scanf( “%f”, &r ); l = 2.0*PI*r; s = PI*r*r; v = 3.0/4*PI*r*r*r; printf(“%10.4f,%10.4f,%10.4\n”, l, s, v); }

C中的预处理命令

C中的预处理命令是由ANSIC统一规定的,但它不是C语言的本身组成部分,不能直接对它们进行编译,因为编译程序无法识别它们。必须对程序进行通常的编译(包括词法和语法分析,代码生成,优化等)之前,先对程序中这些特殊的命令进行“预处理”,例如:如果程序中用#include命令包含一个文件“stdio.h”,则在预处理时,将stdio.h文件中的实际内容代替该命令。经过预处理后的程序就像没有使用预处理的程序一样干净了,然后再由编译程序对它进行编译处理,得到可供执行的目标代码。现在的编译系统都包括了预处理,编译和连接部分,在进行编译时一气呵成。我们要记住的是预处理命令不是C语言的一部分,它是在程序编译前由预处理程序完成的。 C提供的预处理功能主要有三种:宏定义,文件包含,条件编译。它们的命令都以“#”开头。 一,宏定义:用一个指定的标识符来代表一个字符串,它的一般形式为: #define 标识符字符串 #define PI 3.1415926 我们把标识符称为“宏名”,在预编译时将宏名替换成字符串的过程称为“宏展开”,而#define 是宏定义命令。 几个应该注意的问题: 1,是用宏名代替一个字符串,也就是做简单的置换,不做正确性检查,如把上面例子中的1写为小写字母l,预编译程序是不会报错的,只有在正式编译是才显示出来。 2,宏定义不是C语句,不必在行未加分号,如果加了分号则会连分号一起置换。 3,#define语句出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束,通常#define命令写在文件开头,函数之前,作为文件的一部分,在此文件范围内有效。4,可以用#undef命令终止宏定义的作用域。如: #define PI 3.1415926 main(){ } #undef PI mysub(){ } 则在mysub中PI 不代表3.1415926。 5,在进行宏定义时,可以引用已定义的宏名,可以层层置换。 6,对程序中用双撇号括起来的字符串内的字符,即使与宏名相同,也不进行置换。 7,宏定义是专门用于预处理命令的一个专有名词,它与定义变量的含义不同,只做字符替换不做内存分配。 带参数的宏定义,不只进行简单的字符串替换,还进行参数替换。定义的一般形式为:#define 宏名(参数表)字符串 如:#define S(a,b) a*b,具体使用的时候是int area; area=(2,3); 对带参数的宏定义是这样展开置换的:在程序中如果有带参数的宏(如area=(2,3)),则按#define命令行中指定的字符串从左到右进行置换。如果串中包含宏中的形参(如a,b),则将程序语句中的相关参数(可以是常量,变量,或表达式)代替形参。如果宏定义中的字符串中的字符不是参数字符(如上*),则保留,这样就形成了置换的字符串。 带参数的宏与函数有许多相似之处,在调用函数时也是在函数名后的括号内写实参,也要求实参与形参的数目相等,但它们之间还有很大的不同,主要有: 1,函数调用时,先求出实参表达式的值,然后代入形参,而使用带参的宏只是进行简单的字符替换。

《二级C语言程序设计》章节题库(编译预处理和动态存储分配)【圣才出品】

第13章编译预处理和动态存储分配 1.以下叙述中正确的是()。 A.在C语言中,预处理命令行都以“#”开头 B.预处理命令行必须位于C源程序的起始位置 C.#include必须放在C程序的开头 D.C语言的预处理不能实现宏定义和条件编译的功能 【答案】A 【解析】“编译预处理”就是在C编译程序对C源程序进行编译前,由编译预处理程序对这些编译预处理命令行进行处理的过程。A项正确,在C语言中,凡是以“#”号开头的行,都称为“编译预处理”命令行。B项错误,预处理命令行可以出现在程序的任何一行的开始部位,其作用一直持续到源文件的末尾;C项错误,#include 可以出现在程序的任意一行的开始部位;D项错误,预处理可以实现宏定义、条件编译和文件包含。答案选择A选项。 2.以下关于编译预处理的叙述中错误的是()。 A.预处理命令行必须位于源程序的开始 B.源程序中凡是以#开始的控制行都是预处理命令行 C.一行上只能有一条有效的预处理命令 D.预处理命令是在程序正式编译之前被处理的 【答案】A

【解析】通常,预处理命令位于源文件的开头,也可以写在函数与函数之间。答案选择A选项。 3.以下关于宏的叙述中正确的是()。 A.宏名必须用大写字母表示 B.宏定义必须位于源程序中所有语句之间 C.宏替换没有数据类型限制 D.宏调用比函数调用耗费时间 【答案】C 【解析】A项错误,在C语言中,宏名可以是任何合法的C语言标识符,只不过通常习惯用大写字母;B项错误,宏可以根据需要出现在程序的任何一行的开始部位;D项错误,宏定义是“编译预处理”命令,它们的替换过程在编译时期就已经完成了,因此不会占有程序运行的时间。答案选择C选项。 4.以下关于宏的叙述错误的是()。 A.宏替换不具有计算功能 B.宏是一种预处理指令 C.宏名必须用大写字母构成 D.宏替换不占用运行时间 【答案】C 【解析】宏名习惯采用大写字母,以便与一般变量区别,但是并没有规定一定要用大写字母,答案选择C选项。

第9章 预处理命令

第9章预处理命令 宏定义不是C语句,所以不能在行尾加分号。如果加了分号则会连分号一起进行臵换。 可以用#undef命令终止宏定义的作用域。 对程序中用“”括起来的内容(即字符串内的字符),即使与宏名相同,也不进行臵换。宏定义只做字符替换,不分配内存空间。 宏名不是变量,不分配存储空间,也不能对其进行赋值。 在宏展开时,预处理程序仅对宏名作简单的字符串替换,不作任何检查。 在进行宏定义时,可以引用已定义的宏名 无参宏定义的一般格式: #define 标识符字符串 将这个标识符(名字)称为“宏名”,在用预编译时将宏名替换成字符串的过程称为“宏展开”。#define是宏定义命令。 带参宏定义的一般格式: #define 宏名(形参表)字符串 带参宏的调用和宏展开: 调用格式:宏名(实参表); 宏展开(又称为宏替换)的方法:用宏调用提供的实参直接臵换宏定义中相应的形参,非形参字符保持不变。 定义有参宏时,宏名与左圆括号之间不能留有空格。否则,C编译系统会将空格以后的所有字符均作为替代字符串,而将该宏视为无参宏。 有参宏的展开,只是将实参作为字符串,简单地臵换形参字符串,而不做任何语法检查。 为了避免出错,可以在所有形参外,甚至整个字符串外,均加上一对圆括号。 如: #define S(r) 3.14*(r)*(r) 则:area=S(a+b); 展开后为: area=3.14*(a+b)*(a+b); 调用有参函数时,是先求出实参的值,然后再复制一份给形参。而展开有参宏时,只是将实参简单地臵换形参。函数调用是在程序运行时处理的,为形参分配临时的内存单元;而宏展开则是在编译前进行的,在展开时不分配内存单元,不进行值的传递,也没有“返回值”的概念。调用函数只可得到一个返回值,而用宏可以设法得到几个结果。 在有参函数中,形参都是有类型的,所以要求实参的类型与其一致;而在有参宏中,形参和宏名都没有类型,只是一个简单的符号代表,因此,宏定义时,字符串可以是任何类型的数据。 使用宏次数多时,宏展开后源程序变长,因为每展开一次都是程序增长,而函数调用不会使源程序变长。 宏替换不占用运行时间,只占编译时间。而函数调用则占用运行时间(分配单元、保留现场、值传递、返回)。 在程序中如果有带实参的宏,则按#define命令行中指定的字符串从左到右进行臵换。如果字符串中包含宏中的形参,则将程序语句中相应的实参(可以是常量、变量或表达式)代替形参。如果宏定义中的字符串中的字符不是参数字符,则保留。

第八章 预处理命令

第八章预处理命令 一、选择题 1.C语言中,宏定义有效范围从定义处开始,到源文件结束处结束,但可以用 来提前解除宏定义的作用。(0级) A)# ifdef B)endif C)# undefine D)# undef 2.以下不正确的叙述是。(0级) A)预处理命令都必须以“#”号开始 B)在程序中凡是以“#”号开始的语句行都是预处理命令行 C)C语言在执行过程中对预处理命令行进行处理 D)# define ABCD是正确的宏定义 3.以下正确的叙述是。(0级) A)在程序的一行中可以出现多个有效的预处理命令行 B)使用带参宏时,参数的类型应与宏定义时的一致 C)宏替换不占用运行时间,只占编译时间 D)宏定义不能出现在函数内部 4.以下不正确的叙述是。(0级) A)宏替换不占用运行时间 B)宏名无类型 C)宏替换只是字符替换 D)宏名必须用大写字母表示 5. 以下正确的叙述是。(0级) A)C语言的预处理功能是指完成宏替换和包含文件的调用 B)预处理命令只能位于C源程序文件的首部 C)凡是C源程序中行首以“#”标识的控制行都是预处理命令 D)C语言的编译预处理就是对源程序进行初步的语法检查 6.在文件包含预处理语句(# include)的使用形式中,当之后的文件名用“”(双引号) 括起时,寻找被包含文件的方式是。(0级) A)直接按系统设定的标准方式搜索目录 B)先在源程序所在目录搜索,再按系统设定的标准方式搜索 C)仅仅搜索源程序所在目录 D)仅仅搜索当前目录 7.在文件包含预处理语句(# include)的使用形式中,当之后的文件名用<>(尖引号) 括起时,寻找被包含文件的方式是。(0级) A)直接按系统设定的标准方式搜索目录 B)先在源程序所在目录搜索,再按系统设定的标准方式搜索 C)仅仅搜索源程序所在目录 D)仅仅搜索当前目录 8.C语言的编译系统对宏命令的处理。(0级) A)在程序运行时进行的 B)在程序连接时进行的 C)和C程序中的其它语句同时进行编译的

MQL4命令中文详解手册

MQL4Reference MQL4命令手册 (本手册采用Office2007编写) 2010年2月

目录 MQL4 Reference (1) MQL4命令手册 (1) Basics基础 (12) Syntax语法 (12) Comments注释 (12) Identifiers标识符 (12) Reserved words保留字 (13) Data types数据类型 (13) Type casting类型转换 (14) Integer constants整数常量 (14) Literal constants字面常量 (14) Boolean constants布尔常量 (15) Floating-point number constants (double)浮点数常量(双精度) (15) String constants字符串常量 (15) Color constants颜色常数 (16) Datetime constants日期时间常数 (16) Operations & Expressions操作表达式 (17) Expressions表达式 (17) Arithmetical operations算术运算 (17) Assignment operation赋值操作 (17) Operations of relation操作关系 (18) Boolean operations布尔运算 (18) Bitwise operations位运算 (19) Other operations其他运算 (19) Precedence rules优先规则 (20) Operators操作符 (21) Compound operator复合操作符 (21) Expression operator表达式操作符 (21) Break operator终止操作符 (21) Continue operator继续操作符 (22) Return operator返回操作符 (22) Conditional operator if-else条件操作符 (23) Switch operator跳转操作符 (23) Cycle operator while循环操作符while (24) Cycle operator for循环操作符for (24) Functions函数 (25) Function call函数调用 (26) Special functions特殊函数 (27) Variables变量 (27) Local variables局部变量 (28) Formal parameters形式变量 (28)

Dmidecode命令详解

Dmidecode命令详解 Dmidecode 这款软件允许你在Linux 系统下获取有关硬件方面的信息。Dmidecode 遵循SMBIOS/DMI 标准,其输出的信息包括BIOS、系统、主板、处理器、内存、缓存等等。偶发现这个工具很有用,就总结一下。 一、Dmidecode简介 DMI (Desktop Management Interface, DMI)就是帮助收集电脑系统信息的管理系统,DMI信息的收集必须在严格遵照SMBIOS规范的前提下进行。SMBIOS(System Management BIOS)是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范。SMBIOS和DMI是由行业指导机构Desktop Management Task Force (DMTF)起草的开放性的技术标准,其中DMI设计适用于任何的平台和操作系统。 DMI充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI的主要组成部分是Management Information Format (MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。 dmidecode的输出格式一般如下: Handle 0×0002 DMI type 2, 8 bytes Base Board Information Manufacturer:Intel Product Name: C440GX+ Version: 727281-0001 Serial Number: INCY92700942 其中的前三行都称为记录头(recoce Header), 其中包括了: recode id(handle): DMI表中的记录标识符,这是唯一的,比如上例中的Handle 0×0002。 dmi type id: 记录的类型,譬如说:BIOS,Memory,上例是type 2,即”Base Board Information” recode size: DMI表中对应记录的大小,上例为8 bytes.(不包括文本信息,所有实际输出的内容比这个size要更大。)记录头之后就是记录的值 decoded values: 记录值可以是多行的,比如上例显示了主板的制造商(manufacturer)、model、version以及serial Number。 二、Dmidecode的作用 dmidecode的作用是将DMI数据库中的信息解码,以可读的文本方式显示。由于DMI信息可以人为修改,因此里面的信息不一定是系统准确的信息。 三、安装Dmidecode Dmidecode 在主流的Linux 发行版中都可以找到,只需通过所用发行版的包管理器安装即可,如:

c语言习题集合预处理命令

第六章预处理命令 6.1 选择题 1.下面叙述中正确的是()。 A. 带参数的宏定义中参数是没有类型的 B. 宏展开将占用程序的运行时间 C. 宏定义命令是C语言中的一种特殊语句 D. 使用#include命令包含的头文件必须以“.h”为后缀 2.下面叙述中正确的是()。 A. 宏定义是C语句,所以要在行末加分号 B. 可以使用#undef命令来终止宏定义的作用域 C. 在进行宏定义时,宏定义不能层层嵌套 D. 对程序中用双引号括起来的字符串内的字符,与宏名相同的要进行置换 3.在“文件包含”预处理语句中,当#include后面的文件名用双引号括起时,寻找被包含文件的方式为()。 A. 直接按系统设定的标准方式搜索目录 B.先在源程序所在目录搜索,若找不到,再按系统设定的标准方式搜索 C. 仅仅搜索源程序所在目录 D. 仅仅搜索当前目录 4.下面叙述中不正确的是()。 A. 函数调用时,先求出实参表达式,然后带入形参。而使用带参的宏只是进行简单的字符替 换 B. 函数调用是在程序运行时处理的,分配临时的内存单元。而宏展开则是在编译时进行的, 在展开时也要分配内存单元,进行值传递 C. 对于函数中的实参和形参都要定义类型,二者的类型要求一致,而宏不存在类型问题,宏 没有类型 D. 调用函数只可得到一个返回值,而用宏可以设法得到几个结果 5.下面叙述中不正确的是()。 A. 使用宏的次数较多时,宏展开后源程序长度增长。而函数调用不会使源程序变长 B. 函数调用是在程序运行时处理的,分配临时的内存单元。而宏展开则是在编译时进行的, 在展开时不分配内存单元,不进行值传递 C. 宏替换占用编译时间 D.函数调用占用编译时间 6.下面叙述中正确的是( )。 A. 可以把define和if定义为用户标识符 B.可以把define定义为用户标识符,但不能把if定义为用户标识符 C. 可以把if定义为用户标识符,但不能把define定义为用户标识符 D. define和if都不能定义为用户标识符 7.下面叙述中正确的是()。 A.#define和printf都是C语句 B.#define是C语句,而printf不是

C二级 第9章 编译预处理和动态存储分配

1.以下叙述中正确的是()。 A) 在C语言中,预处理命令行都以"#"开头 B) 预处理命令行必须位于C源程序的起始位置 C) #include 必须放在C程序的开头 D) C语言的预处理不能实现宏定义和条件编译的功能 参考答案:A 【解析】预处理命令是以"#"号开头的命令,它们不是C语言的可执行命令,这些命令应该在函数之外书写,一般在源文件的最前面书写,但不是必须在起始位置书写,所以B),C)错误。C)语言的预处理能够实现宏定义和条件编译等功能,所以D)错误。 2.以下关于宏的叙述中正确的是()。 A) 宏替换没有数据类型限制B) 宏定义必须位于源程序中所有语句之前 C) 宏名必须用大写字母表示D) 宏调用比函数调用耗费时间 参考答案:A 【解析】宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头,所以B)选项中宏定义必须位于源程序中所有语句之前是错误的。宏名一般用大写,但不是必须用大写,所以C)选项错误。宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值),所以D)选项错误。 3.有以下程序: #include #define PT 3.5 ; #define S(x) PT*x*x ; main() {int a=1,b=2;printf("%4.1f\n" ,S(a+b));} 程序运行后的输出结果是()。 A) 7.5 B) 31.5 C) 程序有错无输出结果D) 14.0 参考答案:C 【解析】宏定义不是C语句,末尾不需要有分号。所以语句printf("%4.1f\n" ,S(a+b));展开后为 printf("%4.1f\n" ,3.5;*a+b*a+b;);所以程序会出现语法错误。 4.若程序中有宏定义行: #define N 100 则以下叙述中正确的是 A) 宏定义行中定义了标识符N的值为整数100 B) 在编译程序对C源程序进行预处理时用100替换标识符N C) 上述宏定义行实现将100赋给标示符N D) 在运行时用100替换标识符N 参考答案:B 【解析】本题考查预编译相关知识,宏定义在编译程序时做了一个简单的替换,所以选项B正确。 5.有以下程序 #include #define N 3 void fun( int a[][N], int b[] ) { int i, j; for( i=0; i

预处理命令行

预处理命令行都必须以【1】号开始. 答案: ======(答案1)====== # 设有以下宏定义 # define WIDTH 80 # define LENGTH (WIDTH +40) 则执行赋值语句:v= LENGTH*20;(v为int型变量)后,v的值是【1】. 答案: ======(答案1)====== 2400 设有以下宏定义 # define WIDTH 80 # define LENGTH WIDTH +40 则执行赋值语句:v= LENGTH*20;(v为int型变量)后,v的值是【1】.80+40*20 答案: ======(答案1)====== 880 以下程序的运行结果是【1】. #include #define MIN(x,y) (x)

main() { inti=10,j=15,k ; k=10*MIN(i,j); printf("%d\n",k); } 答案: ======(答案1)====== 100 下列程序运行结果为: #define P 3 #define S(a) P*a*a main() {intar; ar=S(3+5);//3*3+5*3+5 printf("\n%d",ar); } #define宏都是直接替换的,不会计算后再替换。s(3+5) = p*3+5*3+5 = 9+15+5 =29 若想计算后在替换,需要加上括号: #define S(a) P*(a)*(a)

若有宏定义如下: #define X 5 #define Y X+1 #define Z Y*X/2 则执行以下printf语句后,输出结果是(). inta;a=Y; printf("%d ",Z); printf("%d\n",--a); A) 7 6 B) 12 6 C) 12 5 D) 7 5 答案:D 请读程序: #include

UNIX命令大全详解-完整版

UNIX命令大全详解-完整版.txt爱尔兰﹌一个不离婚的国家,一个一百年的约定。难过了,不要告诉别人,因为别人不在乎。★真话假话都要猜,这就是现在的社会。 vi全屏幕编辑器 vi(Visual)是以视觉为导向的全屏幕编辑器、共分为三种方式(mode): command方式: 任何输入都会作为编辑命令,而不会出现在屏幕上,若输入错误则有“岬”的声音;任何输入都引起立即反映 insert方式: 任何输入的数据都置于编辑寄存器。在command方式下输入(I,a,A等),可进入insert方式,insert方式下按ESC,可跳回command方式。 escape方式: 以“:”或者“/”为前导的指令,出现在屏幕的最下一行,任何输入都被当成特别指令。 进入vi(在系统提示符下面输入以下指令): vi 进入vi而不读入任何文件 vi filename 进入vi并读入指定名称的文件(新、旧文件均可)。 vi +n filename 进入vi并且由文件的第几行开始。 vi +filename 进入vi并且由文件的最后一行开始。 vi + /word filename 进入vi并且由文件的word这个字开始。 vi filename(s) 进入vi并且将各指定文件列入名单内,第一个文件先读入。 vedit 进入vi并且在输入方式时会在状态行显示“INSERT MODE"。 编辑数个文件(利用vi filename(s))进入vi后) :args 显示编辑名单中的各个文件名 :n 读入编辑名单中的下一个文件 :rew 读入编辑名单中的第一个文件

:e# 读入编辑名单内的前一个文件 :e file 读入另一个文件进vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则应先以: w 存档。 :e! file 强迫读入另一个文件进入vi,原文件不作存档动作。 存储及退出vi :w filename 存入指定文件,但未退出vi(若未指定文件名则为当前工作的文件名)。 :wq 或者 :x或者zz 存文件,并且退出vi. :q 不作任何修改并退出vi。 :q! 放弃任何修改并退出vi。 :!command 暂时退出vi并执行shell指令,执行完毕后再回到vi。 :sh 暂时退出vi到系统下,结束时按Ctrl + d则回到vi。 加数据指令 i 在关标位置开始插入字符,结束时候按ESC键。 I 在光标所在行的最前面开始加字,结束时按ESC键。 a 在光标位置后开始加字,结束时按ESC键。 A 在光标所在行的最后面开始加字,结束时按ESC键。 o 在光标下加一空白行并开始加字,结束时按ESC键。 O 在光标上加一空白行并开始加字,结束时按ESC键。 !command 执行shell指令,并把结果加在光标所在行的下一行。 删除指令 nx 删除由光标位置起始的n个字符(含光标位置,按一个x表示删除光标所在的字符) nX 删除由光标位置起始的n个字符(不含光标位置)。 ndw 删除光标位置其实的n个字符组(word)。

第六讲编译预处理

第6讲编译预处理 6.1 编译预处理的根概念和特点 预处理——是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。 6.1.2 编译预处理的特点 ⑴预处理命令均以“#”号开头,在它前面不能出现空格以外的其他字符。 ⑵每一行命令独占一行。 ⑶命令不以“;”为结束符,它不是C语句。 ⑷预处理程序控制行的作用范围仅限于说明它们的那个文件。 ◇C语言提供的预处理功能有:宏定义、文件包含、条件编译等。 ◇合理地使用预处理功能编写的程序便于阅读、修改、移植和调试,也有利于模块化程序设计。 6.2 宏定义 宏——在C语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。 宏名——被定义为“宏”的标识符称为“宏名”。 宏代换(宏替换或宏展开)——在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。 6.2.1 不带参的宏定义 其定义的一般形式为:

#define 标识符字符串 ◇在前面介绍过的符号常量的定义就是一种无参宏定义。 #define PI 3.14.5926 ◇常对程序中反复使用的表达式进行宏定义。 例如: #define M (y*y+3*y) 用标识符M来代替表达式(y*y+3*y)。 在编写源程序时,所有的(y*y+3*y)都可由M代替。【例】 #include #define M (y*y+3*y) void main() { int s,y; printf("input a number: "); scanf("%d",&y); s=3*M+4*M+5*M; printf("s=%d\n",s); } 上例程序中首先进行宏定义,定义M来替代表达式(y*y+3*y),在s=3*M+4*M+5* M中作了宏调用。在预处理时经宏展开后该语句变为: s=3*(y*y+3*y)+4*(y*y+3*y)+5*(y*y+3*y); 注意:在宏定义中表达式(y*y+3*y)两边的括号不能少。否则会发生错误。如当作以下定义后: #difine M y*y+3*y 在宏展开时将得到下述语句: s=3*y*y+3*y+4*y*y+3*y+5*y*y+3*y;

第九章编译预处理与带参数的主函数

第九章编译预处理与带参数的主函数 一、单项选择题 1.C程序中,以#号带头的行是预编译(A)。 A.命令 B.语句 C.函数 D.字符串 2.下列正确的预编译命令是(B)。 A.define PI 3.14159 B.#define p(a,b) strcpy(a,b) C. #include stdio.h D. # define PI3.14159 3.下列命令或语句中,正确的是(C)。 A.#define MYNAME= “ABC” B.#include stdio.h C. for(i=0;i<10;i++); D.struct int stu{int name}; 4.下列命令或语句中,正确的是(A)。 A.#define PI 3.14159 B. include “stdio.h” C.for(i=0,i<10,i++)a++ D.static struct {int i;}b={2}; 5.下列命令或语句中,错误的是(B)。 A. #define PI 3.14159 B.#include C.if(2); D.for(; ;) if(1) break; 6.定义带参数的宏计算两式乘积(如x2+3x-5与x-6),下列定义中哪个是正确的(C)。 A.#define muit(u,v)u*v B.#define muit(u,v)u*v; C.#define muit(u,v)(u)*(v) D.#define muit(u,v)=(u)*(v) 7.宏定义#define div(a,b) a/b的引用div(x+5,y-5)替换展开后是(A)。 A.x+5/y-5 B.x+5/y-5; C.(x+5)/(y-5) D.(x+5)/(y-5); 8.定义带参数的宏“#define jh(a,b,t)t=a;a=b;b=t”,使两个参数a、b的值交换,下列表述中哪个是正确的(D)。 A.不定义参数a和b将导致编译错误 B.不定义参数a、b、t将导致编译错误 C.不定义参数t将导致运行错误 D.不必定义参数a、b、t类型 9.设有宏定义#define AREA(a,b) a*b,则正确的“宏调用”是(D)。 A.s=AREA(r*r) B.s=AREA(x*y) C.s=AREA D.s=c*AREA((x+3.5),(y+4.1)) 10.设有以下宏定义,则执行语句z=2*(N+Y(5+1));后,z的值为(C)。 #define N 3 #define Y(n) ((N+1)*n) A.出错 B.42 C.48 D.54 11.设有以下宏定义,int x,m=5, n=1时,执行语句IFABC(m+n,m,x);后,x的值为(B)。 #define IFABC(a,b,c) c=a>b?a:b A.5 B.6 C.11 D.出错 12.以下程序中的for循环执行的次数是(C)。 #include “stdio.h” #define N 2 #define M N+1 # define NUM (M+1)*M/2 void main( ) { int i,n=0;

#pragma预处理指令详解

在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作. 下面介绍了一下该指令的一些常用参数,希望对大家有所帮助! 一. message 参数。 message它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #pragma message(“消息文本”) 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条 指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法 #ifdef _X86 #pragma message(“_X86 macro activated!”) #endif 当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_ X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了 二. 另一个使用得比较多的#pragma参数是code_seg。格式如: #pragma code_seg( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "s egment-class" ] ) 该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序,函数在.obj文件中默认的存放节 为.text节 如果code_seg没有带参数的话,则函数存放在.text节中 push (可选参数) 将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名 pop(可选参数) 将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名 identifier (可选参数) 当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除 的时候和其相关的堆栈中的记录将被弹出堆栈 "segment-name" (可选参数) 表示函数存放的节名 例如: //默认情况下,函数被存放在.text节中 void func1() { // stored in .text } //将函数存放在.my_data1节中 #pragma code_seg(".my_data1") void func2() { // stored in my_data1 }

相关文档