预处理命令

Linux应用开发入门(转)

风格不统一 提交于 2020-01-25 08:01:54
今天偶然看到这篇文章,做个入门了解还是不错的。 前 一阵子在QQ上和朋友聊天的时候,总会看到有人说Linux上的应用程序开发是高手才可以完成的,而且这种“迷信”在目前似乎还很普遍。然而,情况并不是这样的,从程序库的支持方面,Linux平台为用户级应用程序的开发提供了很多功能强大且丰富的程序库,而且它们大部分是跨平台的(Boost、OpenGL、STL、Qt、Java等)和基于POSIX标准的(glibc等),同时Linux内核还为驱动程序的开发提供了功能完备的内核接口,从开发工具方面,Linux提供了功能强大的编译器GCC和调试器GDB,借助它们的帮助,我们可以很轻松的在Linu x上开发出可移植性的应用程序。既然如此,“迷信”又源于何来呢?我想,一方面由于详细介绍Linux各种开发的书籍较少,各种Linux应用在国内仍不普及,另一方面则是由于很多人在安装好一个Linux后,苦于找不到一个得心应手的IDE环境,从而感到不知所措,毕竟,我们很多人都习惯了写好程序后,按下F5,剩下的任务就让IDE全权代理了。其实想在Linux下如此这般当然也没问题。既然说到了IDE,就让我们从它开始吧,相信选择一个好的IDE环境是你整个学习过程的一个不错的开始。 工欲善其事 必先利其器——IDE篇 其实Linux下有许多功能强大的IDE环境,因为从某种意义上说,Linux是专为开发者准备的操作系统

C: 笔记整理7: 编译预处理命令 (总复习)

自作多情 提交于 2020-01-21 07:35:56
笔记整理7: 编译预处理命令 C语言中除了有说明语句和可执行语句以外,还用编译预处理命令。按我的理解, 其作用就是使画面更加简洁,程序更加灵活 。需要注意的是,其是编译系统在对源程序编译为目标程序之前进行的。所以它最先开始喔。 预处理命令 宏定义 文件包含 条件编译 不带参数的 带参数的 宏定义 1,不带参数的宏定义 #include 宏名 宏体 注意: 1,宏名为区别于变量,一般用大写字母表示。 2,在预处理阶段,即对源程序进行编译之前,将源程序的所有宏名都用宏体替换。 3, 宏体是什么样子,替换时就是什么样子 。(这里注意有无括号的区别) 4,程序中出现的""内的宏名一律当作 普通字符串 处理。 5,宏定义无须加;否则替换后,可能会报错。(C语言不检查) 6,宏定义时,可以使用以定义过的宏名,即嵌套。 例: #include <stdio.h> #define N 20 #define M N-5 int c; c=20*M; printf("%d",c); 这里输出的即是20*20-5,而非20*(20-5),二者差距还是挺大的 2,带参数的宏定义 #include 宏名(参数列表) 宏体 注意: 1,这里的参数列表和讲函数时类似,即实参。而宏体所指定的参数即是形参。运用时先将实参带入形参,再进行宏替换。 2, 宏名后一定不要加空格 ,否则会当成不带参数的宏定义进行处理。

名词解释----个人理解

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-17 13:43:10
编译:把代码翻译成电脑能识别的机器语言(把用高级 程序设计语言 书写的 源程序 ,翻译成等价的 机器语言 格式 目标程序 )。 预处理:在编译之前进行的处理。 在源程序中这些命令都放在函数之外, 而且一般都放在源文件的前面,它们称为预处理部分。所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。当对一个源文件进行编译时, 系统将自动引用预处理程序对源程序中的预处理部分作处理, 处理完毕自动进入对源程序的编译 来源: CSDN 作者: swang_shan 链接: https://blog.csdn.net/swang_shan/article/details/103805238

预处理——宏定义

丶灬走出姿态 提交于 2020-01-10 01:18:49
1,预处理 预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。 C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等。 本文介绍宏定义,文件包含参考:条件编译参考: 2,宏定义 在C语言源程序中允许用一个标识符来表示一个字符串,称为“宏” 在C语言中,“宏”分为有参数和无参数两种。 3,无参宏定义 格式: #define 标识符 字符串 说明: (1)宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。 (2)宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。 (3) 宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束(类似全局变量的作用域规则)。 (4)宏名在源程序中若用双引号括起来,则预处理程序不对其作宏代换。 示例: #define OK 100 int main() { printf("OK"); printf("\n"); printf("OK123"); } 输出: OK OK123 (5

计算机系统大作业

孤者浪人 提交于 2020-01-04 14:03:39
#计算机系统大作业 题 目 程序人生-Hello’s P2P 专 业 软件工程 学   号 1183710227 班   级 1837102 学 生 孙兴博 指 导 教 师 史先俊 计算机科学与技术学院 2019年12月 摘 要 摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息。摘要应包括本论文的目的、主要内容、方法、成果及其理论与实际意义。摘要中不宜使用公式、结构式、图表和非公知公用的符号与术语,不标注引用文献编号,同时避免将摘要写成目录式的内容介绍。 论文内容主要是在预处理,编译,汇编,链接,进程管理,存储管理,和io管理等方面,对hello例程进行全面的系统级解释。 文章首先对源文件hello.c文件变为hello可执行文件的中的过程,以及产生的中间文件,来描述关于预处理,编译,汇编和链接的内容。再利用hello可执行文件执行过程中进程切换,内存分配情况和输入输出情况对有关于进程管理,存储时地址的管理,地址的映射和转换,Linux下的io管理方法接口等进行描述。 本文通过hello.c例程,对程序从源代码到可执行文件,再到被载入内存执行的过程,使用计算机系统的相关知识概念,进行解释。 关键词:计算机系统、编译,汇编,链接,进程,内存,shell,信号,cache; (摘要0分,缺失-1分,根据内容精彩称都酌情加分0-1分) 目 录 第1章

hello's life

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-01 13:58:00
计算机系统 大作业 题 目 程序人生-Hello ’ s P2P 专 业 计算机 学   号 1180300122 班 级 11803001 学 生 刘子睿 指 导 教 师 郑贵滨 计算机科学与技术学院 201 9 年12月 摘 要 本文主要介绍了 hello.c从编写到执行的全过程, 其中有 预处理、编译、汇编、链接 以及 hello进程创建直到回收的全部过程 , 通过这些过程介绍了程序的实现和生命周期。 关键词: 计算机系统 ; 进程;P2P;020; (摘要0分,缺失-1分, 根据内容精彩称都酌情加分0-1分 ) 目 录 第1章 概述 - 4 - 1.1 Hello简介 - 4 - 1.2 环境与工具 - 4 - 1.3 中间结果 - 4 - 1.4 本章小结 - 4 - 第2章 预处理 - 5 - 2.1 预处理的概念与作用 - 5 - 2.2在Ubuntu下预处理的命令 - 5 - 2.3 Hello的预处理结果解析 - 5 - 2.4 本章小结 - 5 - 第3章 编译 - 6 - 3.1 编译的概念与作用 - 6 - 3.2 在Ubuntu下编译的命令 - 6 - 3.3 Hello的编译结果解析 - 6 - 3.4 本章小结 - 6 - 第4章 汇编 - 7 - 4.1 汇编的概念与作用 - 7 - 4.2 在Ubuntu下汇编的命令 - 7 - 4.3

预处理指令

不想你离开。 提交于 2019-12-30 04:47:08
#define 宏名 字符串 #define 宏名 (参数1,参数2,....,参数n) 字符串 #undef 宏名 #include "文件名" (或<文件名>) # if 常量表达式 # ifdef 宏名 # ifndef 宏名 # else # endif # pragma 程序设计语言的预处理的概念:在编译之前进行的处理。 C语言的预处理主要有三个方面的内容: 1. 宏定义 ; 2. 文件包含 ; 3. 条件编译 。 预处理命令以符号“#”开头。 中文名 预处理命令 概 念 程序设计语言的预处理 符 号 “#”开头 格 式 #define 标识符 字符串(宏定义) 目录 1 宏定义 2 文件包含 3 条件编译 预处理命令宏定义 编辑 1.不带参数的宏定义: 宏定义 又称为宏代换、宏替换,简称“宏”。 格式: #define 标识符 文本 其中的标识符就是所谓的 符号常量 ,也称为“宏名”。 预处理( 预编译 )工作也叫做宏展开:将宏名替换为文本(这个文本可以是字符串、可以是代码等)。 掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。 即在对相关命令或语句的含义和功能作具体分析之前就要换: 例: #define PI 3.1415926 把程序中全部的标识符PI换成3.1415926 说明: (1)宏名一般用大写 (2

HITICS-2019大作业报告

女生的网名这么多〃 提交于 2019-12-30 01:24:03
计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算机类 *指 导 教 师 吴锐   * 计算机科学与技术学院 2019年12月 摘 要 当hello world这个句子显示在电脑上时,标志着世界上第一个程序的诞生。然而很多人都认为让hello world显示在屏幕上是一件很简单的事。殊不知,这个程序的所有执行周期却经历了很多阶段,当然,计算机科学家们在这个程序执行之前也做了大量的铺垫。所以,当我们研究hello world程序的整个生命周期时,我们发现这个程序是不平凡的,我们也理解了计算机科学家们的执着与智慧。从开始对这个程序的编码,再到预处理,编译的高级语言阶段。再到汇编成机器语言,转换成机器码。再进行链接生成可执行文件,再执行。在此过程中,CPU,操作系统,内存,磁盘等计算机的重要组成部分都有条不紊的相互协调工作,其中又产生了进程的创建与回收、异常处理、内存管理等后台。这些后台过程都默默地支持着程序的执行。本篇论文来告诉你hello world被打印在电脑屏幕里所要经历的所有过程。 **关键词:**程序 编码 执行 进程管理 储存管理 目 录 第1章 概述 - 4 - 1.1 Hello简介 - 4 - 1.2 环境与工具 - 4 - 1.3 中间结果 - 4 - 1.4 本章小结 - 4 - 第2章 预处理 - 5 - 2.1 预处理的概念与作用 -

“#if 0/#if 1 ... #endif”的作用

蓝咒 提交于 2019-12-24 07:01:15
今看到一帖子,讨论“#if 0/#if 1 ... #endif”的作用,感觉不错,故拿来分享。 原帖地址:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=2028608&bbs_page_no=1005&bbs_id=9999 1、先说“#if 0/#if 1 ... #endif”的作用,楼上诸位或多或少都说到了一点,但都没有说到关键的地方。我们知道,C标准不提供C++里的“//”这样的单行风格注释而只提供“/* */”这样的块注释功能,我们通常使用它写代码中说明性的注释文字(注释作用)以及在调试时关闭某段代码对编译器的可见性(屏蔽作用),当然,这里所谓的“注释作用”和“屏蔽作用”是我们从功能上下的主观定义,对预处理器而言,两者并无任何区别。对于前者,因为“注释”中不会再出现“注释”和“需要屏蔽的代码段”,所以不会有嵌套的需求,所以通常不会有问题;而对于后者,当我们在调试程序时需要“屏蔽”某段代码时,该段代码中可能包含着前述的“注释”和/或“已被屏蔽的代码段”,这时就产生了“/* */”嵌套使用的需求,但SB的C标准恰恰不允许我们这么干。当你试图使用嵌套的块注释功能时,会发现预处理器把最外层注释的开始和最内层注释的结尾这两者之间的内容处理成了注释,而其后一直到最外层注释结尾的内容被当作了“有效代码”—

Linux环境C语言编译与头文件等知识点小结

给你一囗甜甜゛ 提交于 2019-12-07 08:37:52
一、C语言的有关文件类型: 虽然,在Linux下“一切皆文件”,并且文件类型这个概念不是那么重要,一个“.c”文件可以用gcc编译,一个“.abcdef”文件照样可以用gcc编译。但是有类型的文件毕竟比无类型的文件更加具有直观性,所以我们还是得说说这个文件类型。 C语言的有关文件类型如下所示: .c /*源代码文件*/ .h /*C语言头文件*/ .i /*经过预处理之后的源代码文件*/ .s /*汇编代码文件*/ .o /*目标代码文件(二进制机器指令文件)*/ .a /*静态对象库文件*/ .so /*共享(动态)对象库文件*/ 一个程序的编译到运行gcc file.c执行了什么?其文件类型有何变化?如下图所示,最终我们只能看到a.out这个可执行文件: 二、gcc的有关选项参数与生成文件: 如果直接gcc file.c,就只会生成a.out执行文件,如果我们想看一下一个C语言文件从预处理到连接过程中各个文件的内容该怎么办?我们可以给gcc加上指定选项,进行指定操作,而不是由编译器直接生成a.out。首先说说这里会用到的重要的选项,如下所示: -o /*指定目标文件名*/ -E /*只进行预处理,不编译*/ -c /*只编译,不链接*/ -S /*汇编生成.s文件*/ -Wall /*显示所有警告,代码较长时最好加上*/ 我们来测试一下: (1)最初,我们只有一个main