C语言中,预处理命令都是以什么开头的? , C语言:预处理是什么意思?就是看不懂这句话的解释!越具体越好,也可以通俗一点!

您所在的位置:网站首页 预编译处理命令必须以什么开头 C语言中,预处理命令都是以什么开头的? , C语言:预处理是什么意思?就是看不懂这句话的解释!越具体越好,也可以通俗一点!

C语言中,预处理命令都是以什么开头的? , C语言:预处理是什么意思?就是看不懂这句话的解释!越具体越好,也可以通俗一点!

2023-11-09 07:20| 来源: 网络整理| 查看: 265

本篇文章给大家谈谈 C语言中,预处理命令都是以什么开头的? ,以及 C语言:预处理是什么意思?就是看不懂这句话的解释!越具体越好,也可以通俗一点! 对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

C语言中define是定义的意思。define是C语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供方便。预处理命令以“#”号开头,如包含命令#include,宏定义命令#define等。一般都放在源文件的前面,它们称为

预处理命令是以#号开头的代码行,每一条预处理命令必须单独占用一行,由于不是C的语句,因此在结尾不能有分号“;”。宏被定义后,其作用域一般为定义它的文件,通常#define命令写在文件的开头,但这也并非规定,实际上宏

预处理命令是以“#”号开头的命令,它们不是C语言的可执行命令,这些命令应该在函数之外书写,一般在源文件的最前面书写,称为预处理部分。在C编译系统编译源程序之前,先要对源程序中的预处理命令进行处理,处理完毕之后才能

C语言中通常以#include开头。#开头的是预处理指令,不是C语句的一部分,以#开头的语句,在预处理阶段,由预处理器处理,例如:#include。预处理器会将stdio.h文件的内容加入到当前文件的头部。C语言中通常以#include 开头

C语言的预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。预处理命令以符号“#”开头。宏定义命令:#define、#undef,用来定义和解除宏。(值得注意的是还可以定义带参数的宏)文件包含命令:#include

预处理指令通常以 `#` 符号开头,是C语言编译过程中的第一个阶段。以下是一些常见的C语言预处理指令:1. **`#define`:** 用于定义宏,可以用来替代常量、函数或代码片段。2. **`#include`:** 用于包含其他文件的

C语言中,预处理命令都是以什么开头的?

这种格式告诉预处理程序在编译器自带的或外部库的头文件中搜索被包含的头文件。 第二种方法是用双引号把头文件括起来。这种格式告诉预处理程序在当前被编译的应用程序的源代码文件中搜索被包含的头文件,如果找不到,再搜索

C语言的编译过程分为:预处理-汇编-编译-链接 的过程。预处理的意思是,为下一步汇编(生成汇编)做准备。包括 头文件包含,即#include包含的文件添加进来 宏展开,即#define 定义的宏在程序中代入进去 条件编译,选择具体

pragma 提供 机器专用的特性,同时保证与C++的完全兼容 这些是预处理的命令,只能你理解的不是很全,有时别的文件已经编译过了,我们不需要再编译一次,因为那是很痛苦的,所以为了效率,我们就可以用预处理的方法来搞定,处

预处理,再编译前需要做的工作。预处理主要处理两部分东西,头文件和宏。对于头文件,做展开操作。比如再某个.c中include了一个头文件,这一行预处理时就会被替换为头文件的内容。对于宏,比如你define了一个宏。这里就会

在c语言中,什么是预处理部分,预处理部分是不是也是头文件,即是不是包含文件?预处理部分的作用是什么?

fun是函数名,x和y叫参数,如果它出现在函数定义时x和y就是实际参数,如果出现在函数调用时x和y就是形式参数。例如:void fun(x,y){ int m=x+y;} void main(){ fun(a,b);} 这里x和y叫形参,a和b叫实参,

一、C语言程序的结构 1.程序的构成,main函数和其他函数。2.头文件,数据说明,函数的开始和结束标志以及程序中的注释。3.源程序的书写格式。4.C语言的风格。二、数据类型及其运算 1.C的数据类型(基本类型,构造类型,

!的意思是用来取非运算的,!true的结果就是 false !false 的结果是 true。写程序中,?:用的比较少,!主要用在条件判断中。延展回答:1、C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以

有的时候为了程序的通用性,可以使用#define预处理宏定义命令,它的具体作用,就是方便程序段的定义和修改。举个例子吧,如果说你在做一个项目,这个项目的代码很长,有5000多行,而且基本上裏面的同一个常量N就占了3000

宏是一种预处理指令,它提供了一种机制,可以用来替换源代码中的字符串。1、条件编译:C语言中,预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换,预处理过程还会删除程序中的注释和多余

预处理是c语言中以#开头的命令,是在程序编译前进行的命令,有include,define,pragmma和一些判断,编译前的处理可以帮助提升程序运行和编译效率,include也能让我们调用其他的头文件和库 问题七:C语言:预处理是什么意思?就是看不懂这句话

C语言:预处理是什么意思?就是看不懂这句话的解释!越具体越好,也可以通俗一点!

C语言中,所有预处理命令都是以“#”号开头的。C语言程序设计预处理的概念:在编译之前进行的处理。 C语言的预处理主要有三个方面的内容:宏定义、文件包含、条件编译。

凡是以"#"开头的均为预处理命令 1. 第一种形式: #ifdef 标识符 程序段1 else 程序段2 endif 它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译.2. 第二种形式:ifndef 标识

宏代换是由预处理程序自动完成的。在C或C++语言中,“宏”分为有参数和无参数两种。2. 无参宏定义无参宏的宏名后不带参数。其定义的一般形式为:#define 标识符 字符串其中的“#”表示这是一条预处理命令。凡是以“

1.宏定义:用一个指定的标识符(即名字)来代表一个字符串,如:用PI代表3.1415926,#define PI 3.1415926 2.文件包含:指一个源文件可以将另外一个源文件的全部内容包含进来,#include 3.条件编译:对一

error指令强制编译程序停止编译,它主要用于程序调试。#error指令的一般形式是:error error-message 注意,宏串error-message不用双引号包围。遇到#error指令时,错误信息被显示,可能同时还显示编译程序作者预先定义的其他内容。4

以下是一些常见的C语言预处理指令:1. **`#define`:** 用于定义宏,可以用来替代常量、函数或代码片段。2. **`#include`:** 用于包含其他文件的内容,通常用于包含头文件(header files)。3. **`#ifdef`、`#ifnd

c语言中预处理命令都有哪些? C语言的预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。 预处理命令以符号“#”开头。 宏定义命令:#define、#undef,用来定义和解除宏。(值得注意的是还可以定义带参数的宏) 文件包含命令:#include "文件名" 或者 #include 。使用前者时会优先从当前目录查找头文件,使用后者时优先从默认的系统目录查找。 条件编译:#ifdef、#else、#endif、#elif 等。出于程序兼容性的考虑,有些语句希望在条件满足时才编译。这时候会用到条件编译的命令。我们可以在C源程序中插入传给编译程序的各中指令,这些指令被称为预处理器指令,它们扩充了程序设计的环境。现把常用的预处理命令总结如下: 1. 预处理程序 按照ANSI标准的定义,预处理程序应该处理以下指令: #if #ifdef #ifndef #else #elif #endif #define #undef #line #error #pragma #include 显然,上述所有的12个预处理指令都以符号#开始,,每条预处理指令必须独占一行。 2. #define #define指令定义一个标识符和一个串(也就是字符集),在源程序中发现该标识符时,都用该串替换之。这种标识符称为宏名字,相应的替换称为宏代换。一般形式如下: #define macro-name char-sequence 这种语句不用分号结尾。宏名字和串之间可以有多个空白符,但串开始后只能以新行终止。 例如:我们使用LEFT代表1,用RIGHT代表0,我们使用两个#define指令: #define LEFT 1 #define RIGHT 0 每当在源程序中遇到LEFT或RIGHT时,编译程序都用1或0替换。 定义一个宏名字之后,可以在其他宏定义中使用,例如: #define ONE 1 #define TWO ONE+ONE #define THREE ONE+TWO 宏代换就是用相关的串替代标识符。因此,如果希望定义一条标准错误信息时,可以如下定义: #define ERROR_MS “Standard error on input \n” 如果一个串长于一行,可在行尾用反斜线”\”续行,如下: #define LONG_STRING “This is a very very long \ String that is used as an example” 3. #error #error指令强制编译程序停止编译,它主要用于程序调试。#error指令的一般形式是: #error error-message 注意,宏串error-message不用双引号包围。遇到#error指令时,错误信息被显示,可能同时还显示编译程序作者预先定义的其他内容。 4. #include 程序中的#include指令要求编译程序读入另一个源文件。被读入文件的名字必须用双引号(“”)或一对尖括号()包围,例如: #include “stdio.h” #include 都使C编译程序读入并编译头文件以用于I/O系统库函数。 包含文件中可以包含其他#include指令,称为嵌套包含。允许的最大嵌套深度随编译器而变。 文件名被双括号或尖括号包围决定了对指定文件的搜索方式。文件名被尖括号包围时,搜索按编译程序作者的定义进行,一般用于搜索某些专门放置包含文件的特殊目录。当文件名被双括号包围时,搜索按编译程序实时的规定进行,一般搜索当前目录。如未发现,再按尖括号包围时的办法重新搜索一次。 通常,绝大多数程序员使用尖括号包围标准的头文件,双引号用于包围与当前程序相关的文件名。 5. 条件编译指令 若干编译指令允许程序员有选择的编译程序源代码的不同部分,这种过程称为条件编译。 5.1#if、#else、#elif #endif 条件编译指令中最常用的或许是#if,#else,#elif和#endif。这些指令允许程序员根据常数表达式的结果有条件的包围部分代码。 #if的一般形式是: #if constant-expression Statement sequence #endif 如#if后的常数表达式为真,则#if和#endif中间的代码被编译,否则忽略该代码段。#endif标记#if块的结束。 #else指令的作用与C语言的else相似,#if指令失败时它可以作为备选指令。例如: #include #define MAX 100 Int main(void) { #if MAX>99 printf(“Compiled for array greater than 99.\n”); #else printf(“Complied for small array.\n”); #endif return 0; } 注意,#else既是标记#if块的结束,也标记#else块的开始。因为每个#if只能写一个#endif匹配。 #elif指令的意思是“否则,如果”,为多重编译选择建立一条if-else-if(如果-否则-如果链)。如果#if表达式为真,该代码块被编译,不测试其他#elif表达式。否则,序列中的下一块被测试,如果成功则编译之。一般形式如下: #if expression Statement sequence #elif expression1 Statement sequence #elif expression2 Statement sequence . . . #elif expression Statement sequence #endif 5.2#ifdef和#ifndef 条件编译的另一个方法是使用编译指令#ifdef和#ifndef,分别表示“如果已定义”和“如果未定义”。#ifdef的一般形式如下: #ifdef macro-name Statement sequence #endif 如果macro-name原先已经被一个#define语句定义,则编译其中的代码块。 #ifndef的一般形式是: #ifndef macro-name Statement sequence #endif 如果macro-name当前未被#define语句定义,则编译其中的代码块。 我认为,用这种,可以很方便的开启/关闭整个程序的某项特定功能。 #ifdef和#ifndef都可以使用#else或#elif语句。 #inlucde #define T 10 Int main(void) { #ifdef t Printf(“Hi T\n”); #else Printf(“Hi anyone\n”); #endif #ifndef M Printf(“M Not Defined\n”); #endif Return 0; } 6. #undef #undef指令删除前面定义的宏名字。也就是说,它“不定义”宏。一般形式为: #undef macro-name 7. 使用defined 除#ifdef之外,还有另外一种确定是否定义宏名字的方法,即可以将#if指令与defined编译时操作符一起使用。defined操作符的一般形式如下: defined macro-name 如果macro-name是当前定义的,则表达式为真,否则为假。 例如,确定宏MY是否定义,可以使用下列两种预处理命令之一: #if defined MY 或 #ifdef MY 也可以在defined之前加上感叹号”!”来反转相应的条件。例如,只有在DEBUG未定义的情况下才编译。 #if !defined DEBUG Printf(“Final Version!\n”); #endif 使用defined的一个原因是,它允许由#elif语句确定的宏名字存在。 8. #line #line指令改变__LINE__和__FILE__的内容。__LINE__和__FILE__都是编译程序中预定义的标识符。标识符__LINE__的内容是当前被编译代码行的行号,__FILE__的内容是当前被编译源文件的文件名。#line的一般形式是: #line number “filename” 其中,number是正整数并变成__LINE__的新值;可选的“filename”是合法文件标识符并变成__FILE__的新值。#line主要用于调试和特殊应用。 9. #pragma #pragma是编译程序实现时定义的指令,它允许由此向编译程序传入各种指令。例如,一个编译程序可能具有支持跟踪程序执行的选项,此时可以用#pragma语句选择该功能。编译程序忽略其不支持的#pragma选项。#pragma提高C源程序对编译程序的可移植性。 10. 预处理操作符#和## 有两个预处理操作符:#和##,它们可以在#define中使用。 操作符#通常称为字符串化的操作符,它把其后的串变成用双引号包围的串。例如: #include #define mkstr(s) #s int main(void) { Printf(mkstr(I like C)); Return 0; } 预处理程序把以下的语句: Printf(mkstr(I like C)); 变成 Printf(“I like C”); 操作符##把两个标记拼在一起,形成一个新标记。例如: #include #define concat(a,a) a##b int main(void) { Int xy = 10; Printf(“%d”,concat(x,y)); Return 0; } 预处理程序把以下语句: Printf(“%d”,concat(x,y)); 变成 Printf(“%d”,xy); 操作符#和##主要作用是允许预处理程序对付某些特殊情况,多数程序中并不需要。 11. 预定义宏 C规范了5个固有的预定义宏,它们是: __LINE__ __FILE__ __DATE__ __TIME__ __STDC__ __LINE__和__FILE__包含正在编译的程序的行号和文件名。 __DATE__和内容形如month/day/year(月/日/年)的串,代表源文件翻译成目标码的日期。 __TIME__中的串代表源代码编译成目标码的时间,形如hour:minute:second(时:分:秒) 如果__STDC__的内容是十进制常数1,则表示编译程序的实现符合标准C。C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。 二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。 C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。 其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。 扩展资料: C语言的优势: 1.相比较其他的编程语言(像C++,JAVA),C语言是个低级语言。从总体上来说,低级的编程语言可以让你更好的了解计算机。 2.设备驱动程序和操作系统只能用C语言来编写。现在,你可能还从来没有编写过一个设备驱动程序或者一个操作系统,但是如果你需要去修改他们的时候,怎么办? 3.如果你想要得到一份编写微控制器程序的工作的时候,该怎么办?他们都是用C语言编写的。就因为不想学习一门新的语言,你就准备限制你能得到工作的机会吗? 4.C的程序比其他用别的语言写的程序,实现相同的功能,它用的代码行数更少,而它带来的运行效率更快。有时候,你的程序所需要的速度,只有C语言能做到。 5.如果你学习过C语言,你就能学习现在任何的高级编程语言。因为所有的高级语言都是以C语言为基础的(像JAVA,C++,C#等等)。 6.因为C语言已经存在很多年了,它有广泛的使用团体并且有大量的现成代码可以利用。这就使你能在过去程序的基础上,快速和高效的编写新的算法和函数。 7.C语言是一个开源组织的语言。一个开源组织的产物--LINUX,就是用C语言写的。如果你会C语言,你就能参加这个组织并且还能向众多的开源组织投稿,比如参加Source Forge并且给他们投稿。 8.C语言是唯一一个向你阐述指针的本质的语言。而C#和Java干脆跳过了指针这个题目。可是指针确实使C语言变得更加强大。 9.找编程开发方面的工作时,C语言仍然是最普遍需要的语言。所以它值得你花时间去学会它。 10.任何里面有微处理器的设备都支持C语言。从微波炉到手机,都是由C语言技术来推动的。 参考资料来源:百度百科-C语言 很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言? 我是一个教师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语言就是C语言。经过这些年的开发,我深深的体会到C语言对于一个程序设计人员多么的重要,如果不懂C语言,你想写底层程序这几乎听起来很可笑,不懂C语言,你想写出优秀高效的程序,这简直就是天方夜谭。为什么C语言如此重要呢? 第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os/2,没有一个里外的,如果你不懂C语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。第三:很多新型的语言都是衍生自C语言,C++,Java,C#,J#,perl...哪个不是呢?掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了,这个再一次验证了C语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C语言,你想加入it行业,那么就一定要掌握好C语言。 那么究竟怎样学习C语言呢? 1:工欲善其事,必先利其器这里介绍几个学习C语言必备的东东:一个开发环境,例如turbo C 2.0,这个曾经占据了DOS时代开发程序的大半个江山。但是现在windows时代,用turbo C有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。建议使用Visual C++,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。一本学习教程,现在C语言教材多如牛毛,但推荐大家使用《C语言程序设计》谭浩强主编 第二版 清华大学出版社,此书编写的很适合初学者,并且内容也很精到。除此以外,现在有很多辅助学习的软件,毕竟现在是Window时代了,学习软件多如牛毛,不象我们当初学习,只有读书做题这么老套。我向大家推荐一个“集成学习环境(C语言)”,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个windows下的trubo C,初学者甚至不用装其它的编译器,就可以练习编程了,非常适合初学者。还有一个“C语言学习系统”软件,不过感觉只是一个题库系统,如果你觉得题做的不够,不妨也可以试试。 2:葵花宝典学习计算机语言最好的方法是什么?答曰:读程序。没错,读程序是学习C语言入门最快,也是最好的方法。如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。当然,对于没有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,直到每一行都理解了,然后找几个编程题目,最好是和例程类似的或一样的,自己试图写出这段已经读懂的程序,不要以为例程你已经读懂了,你就可以写出和它一样的程序,绝对不一定,不相信你就试一试吧,如果写不出来,也不要着急,回过头来再继续研究例程,想想自己为什么写不出来,然后再去写这段程序,反反复复,直到你手到擒来为止,祝贺你,你快入门了。 3:登峰造极写程序的最高境界其实就是掌握各种解决问题的手段(数据结构)和解决问题的方法(算法)。是不是写出底层程序就是程序设计高手呢?非也,写底层程序,无非是掌握了硬件的结构,况且硬件和硬件还不一样,要给一个芯片写驱动程序,无非就是掌握这块芯片的各种寄存器及其组合,然后写值读值,仅此而已。这不过是熟悉一些io函数罢了。 那么怎样才算精通程序设计呢?怎样才能精通程序设计呢?举个例子:你面前有10个人,找出一个叫“张三”的人,你该怎么办?第一种方法:直接对这10个人问:“谁叫张三”。第2种方法:你挨个去问“你是不是张三?”,直到问到的这个人就是张三。第三方法:你去挨个问一个人“你认不认识张三,指给我看”。不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题的最优方法和你用的手段却是考验一个程序员程序设计水平的重要标志,而且是不容易达到的。刚才这个问题类似于数据结构和算法中的:Map数据结构,穷举查找和折半查找。所以掌握好数据结构和一些常用算法,是登峰造极的必然之路。最后给大家推荐严尉敏的《数据结构》清华大学出版社,希望每一个想成为程序设计高 手的人研读此书。[编辑:赵晋军] 二,语言学习方法 谈谈偶的学习方法,抛砖引玉! 学习不论讲不讲方法,最终都能学会。但是别人1个月学会了,而你却100年才学会,这不就晚了么?:)所以说,学习还是要讲究方法的。学习方法正确,事半功倍;学习方法不正确,事倍而功半。 什么才是学习C语言的捷径?我的答案是看书。书中所写,是前人数十年经验所写,看十本书,就相当于汲取了前人数十年的功力,那么你的内功也会迅速上升1甲子。:)书当然要看好书,只有好书才营养丰富。假如你花了1天时间看了一本破书,而该书介绍的知识虽然对于你来说是全新的知识,但是由于书中组织不当、或者深度不够,使你获取的营养很少,还不如自己研究一天来的快,这种书就不值当看了。学习C语言要看那些好书?我认为首先要把基础书给看扎实了,比如《C语言之四书五经》中介绍的4本。(虽然这些书很多已经绝版了,但我相信电子版也是很有益处。况且,如果你真的想看,我相信你一定有办法搞的到。)这些书你会在很短的时间内看完(比如一两个月),这取决于你的基础和悟性。 之后要看那些书呢?我不妨再列几本。Bjarne Stroustrup的《C++程序设计语言》theC++Programming Language)一定要看,这本书里面对于C的一些基础概念的定义,比我见过的其他任何C语言书都要全,都要仔细;Bjarne Stroustrup的《C++语言的设计与演化》(The Design and Evolution of C++)和David R.Hanson 的《C语言接口与实现 创建可重用软件的技术》(C Interfaces and Implaementations Techniques for Creating Reusable Software)一定要看,这两本书讲述了如何用C来实现异常处理、实现类型的封装和扩展等一些大的项目中经常用到的高级技术。其他的书,操作系统的要看,编译原理的要看,算法的要看,模式的也要看。读书破万卷,coding如有神。 总而言之,就如《传》中云:“生而知之者,上也;学而知之者,次也;困而学之又其次也。”我们不能总是因困而学之,而要做到兵马未动,粮草先行。看书是学习的导向,书中能一一介绍清楚概念,但书却不能把应用的细节一一介绍给你,因为应用总是招数繁复,变化多端。因此我们要想熟悉招数,懂得书中所讲怎么使用,还要多读源码。Linus给别人解答问题的时候,常说Read the fucking source code;候捷也在其文中提到“源码之前,了无秘密。”这就是大师的箴言呀。源码就像是动画、就像是幻灯片,把书中的招式一一演练给你看。可以说高手的经验大都是源自代码。源码和书一样,也是要看好的,不要看差的。在此,我推荐看Linux kernel source code 和 Linux tcp/ip source code。这两套代码都是开源的,垂手可得。此外,还可以配合着Andrew S.Tanenbaum的《操作系统的设计与实现》(Operating Systems:Design and Implementation)、毛德操 胡希明的《Linux内核 源代码情景分析》、Jonathan Corbet,Alessandro Rubini,Greg Kroah-Hartman合著的《Linux设备驱动程序》(Linux Device Driver,3e)、W.Richard Stevens《TCP/IP详解(3部)》 (TCP/IP Illustracted )、W.Richard Stevens《UNIX环境高级编程》(Advanced Programming in the UNIX Environment,新版增加了Linux kernel的内容)等书来看,方便的很。当然程序不是看出来的,是写出来的。我高中的时候每天坚持写6个小时程序,《数据结构》和排列组合、图论方面的习题反复做了N遍。到现在虽然已经时隔五六年,很多内容早已淡忘掉,但却培养了我很强的编码能力和调试能力,直到现在还对我的工作有很大的帮助。我们可以在C源程序中插入传给编译程序的各中指令,这些指令被称为预处理器指令,它们扩充了程序设计的环境。现把常用的预处理命令总结如下: 1. 预处理程序 按照ANSI标准的定义,预处理程序应该处理以下指令: #if #ifdef #ifndef #else #elif #endif #define #undef #line #error #pragma #include 显然,上述所有的12个预处理指令都以符号#开始,,每条预处理指令必须独占一行。 2. #define #define指令定义一个标识符和一个串(也就是字符集),在源程序中发现该标识符时,都用该串替换之。这种标识符称为宏名字,相应的替换称为宏代换。一般形式如下: #define macro-name char-sequence 这种语句不用分号结尾。宏名字和串之间可以有多个空白符,但串开始后只能以新行终止。 例如:我们使用LEFT代表1,用RIGHT代表0,我们使用两个#define指令: #define LEFT 1 #define RIGHT 0 每当在源程序中遇到LEFT或RIGHT时,编译程序都用1或0替换。 定义一个宏名字之后,可以在其他宏定义中使用,例如: #define ONE 1 #define TWO ONE+ONE #define THREE ONE+TWO 宏代换就是用相关的串替代标识符。因此,如果希望定义一条标准错误信息时,可以如下定义: #define ERROR_MS “Standard error on input \n” 如果一个串长于一行,可在行尾用反斜线”\”续行,如下: #define LONG_STRING “This is a very very long \ String that is used as an example” 3. #error #error指令强制编译程序停止编译,它主要用于程序调试。#error指令的一般形式是: #error error-message 注意,宏串error-message不用双引号包围。遇到#error指令时,错误信息被显示,可能同时还显示编译程序作者预先定义的其他内容。 4. #include 程序中的#include指令要求编译程序读入另一个源文件。被读入文件的名字必须用双引号(“”)或一对尖括号(>)包围,例如: #include “stdio.h” #include 都使C编译程序读入并编译头文件以用于I/O系统库函数。 包含文件中可以包含其他#include指令,称为嵌套包含。允许的最大嵌套深度随编译器而变。 文件名被双括号或尖括号包围决定了对指定文件的搜索方式。文件名被尖括号包围时,搜索按编译程序作者的定义进行,一般用于搜索某些专门放置包含文件的特殊目录。当文件名被双括号包围时,搜索按编译程序实时的规定进行,一般搜索当前目录。如未发现,再按尖括号包围时的办法重新搜索一次。 通常,绝大多数程序员使用尖括号包围标准的头文件,双引号用于包围与当前程序相关的文件名。 5. 条件编译指令 若干编译指令允许程序员有选择的编译程序源代码的不同部分,这种过程称为条件编译。 5.1#if、#else、#elif #endif 条件编译指令中最常用的或许是#if,#else,#elif和#endif。这些指令允许程序员根据常数表达式的结果有条件的包围部分代码。 #if的一般形式是: #if constant-expression Statement sequence #endif 如#if后的常数表达式为真,则#if和#endif中间的代码被编译,否则忽略该代码段。#endif标记#if块的结束。 #else指令的作用与C语言的else相似,#if指令失败时它可以作为备选指令。例如: #include #define MAX 100 Int main(void) { #if MAX>99 printf(“Compiled for array greater than 99.\n”); #else printf(“Complied for small array.\n”); #endif return 0; } 注意,#else既是标记#if块的结束,也标记#else块的开始。因为每个#if只能写一个#endif匹配。 #elif指令的意思是“否则,如果”,为多重编译选择建立一条if-else-if(如果-否则-如果链)。如果#if表达式为真,该代码块被编译,不测试其他#elif表达式。否则,序列中的下一块被测试,如果成功则编译之。一般形式如下: #if expression Statement sequence #elif expression1 Statement sequence #elif expression2 Statement sequence . . . #elif expression Statement sequence #endif 5.2#ifdef和#ifndef 条件编译的另一个方法是使用编译指令#ifdef和#ifndef,分别表示“如果已定义”和“如果未定义”。#ifdef的一般形式如下: #ifdef macro-name Statement sequence #endif 如果macro-name原先已经被一个#define语句定义,则编译其中的代码块。 #ifndef的一般形式是: #ifndef macro-name Statement sequence #endif 如果macro-name当前未被#define语句定义,则编译其中的代码块。 我认为,用这种,可以很方便的开启/关闭整个程序的某项特定功能。 #ifdef和#ifndef都可以使用#else或#elif语句。 #inlucde #define T 10 Int main(void) { #ifdef t Printf(“Hi T\n”); #else Printf(“Hi anyone\n”); #endif #ifndef M Printf(“M Not Defined\n”); #endif Return 0; } 6. #undef #undef指令删除前面定义的宏名字。也就是说,它“不定义”宏。一般形式为: #undef macro-name 7. 使用defined 除#ifdef之外,还有另外一种确定是否定义宏名字的方法,即可以将#if指令与defined编译时操作符一起使用。defined操作符的一般形式如下: defined macro-name 如果macro-name是当前定义的,则表达式为真,否则为假。 例如,确定宏MY是否定义,可以使用下列两种预处理命令之一: #if defined MY 或 #ifdef MY 也可以在defined之前加上感叹号”!”来反转相应的条件。例如,只有在DEBUG未定义的情况下才编译。 #if !defined DEBUG Printf(“Final Version!\n”); #endif 使用defined的一个原因是,它允许由#elif语句确定的宏名字存在。 8. #line #line指令改变__LINE__和__FILE__的内容。__LINE__和__FILE__都是编译程序中预定义的标识符。标识符__LINE__的内容是当前被编译代码行的行号,__FILE__的内容是当前被编译源文件的文件名。#line的一般形式是: #line number “filename” 其中,number是正整数并变成__LINE__的新值;可选的“filename”是合法文件标识符并变成__FILE__的新值。#line主要用于调试和特殊应用。 9. #pragma #pragma是编译程序实现时定义的指令,它允许由此向编译程序传入各种指令。例如,一个编译程序可能具有支持跟踪程序执行的选项,此时可以用#pragma语句选择该功能。编译程序忽略其不支持的#pragma选项。#pragma提高C源程序对编译程序的可移植性。 10. 预处理操作符#和## 有两个预处理操作符:#和##,它们可以在#define中使用。 操作符#通常称为字符串化的操作符,它把其后的串变成用双引号包围的串。例如: #include #define mkstr(s) #s int main(void) { Printf(mkstr(I like C)); Return 0; } 预处理程序把以下的语句: Printf(mkstr(I like C)); 变成 Printf(“I like C”); 操作符##把两个标记拼在一起,形成一个新标记。例如: #include #define concat(a,a) a##b int main(void) { Int xy = 10; Printf(“%d”,concat(x,y)); Return 0; } 预处理程序把以下语句: Printf(“%d”,concat(x,y)); 变成 Printf(“%d”,xy); 操作符#和##主要作用是允许预处理程序对付某些特殊情况,多数程序中并不需要。 11. 预定义宏 C规范了5个固有的预定义宏,它们是: __LINE__ __FILE__ __DATE__ __TIME__ __STDC__ __LINE__和__FILE__包含正在编译的程序的行号和文件名。 __DATE__和内容形如month/day/year(月/日/年)的串,代表源文件翻译成目标码的日期。 __TIME__中的串代表源代码编译成目标码的时间,形如hour:minute:second(时:分:秒) 如果__STDC__的内容是十进制常数1,则表示编译程序的实现符合标准C。属于编译器的命令,优化这一类的

关于 C语言中,预处理命令都是以什么开头的? 和 C语言:预处理是什么意思?就是看不懂这句话的解释!越具体越好,也可以通俗一点! 的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3