素材路径:https://www.codeforge.cn/read/428275/bsmap-2.74-_-main.cpp__html

1.C/C++预处理指令,常见的预处理指令如下:

  1. #空指令,无任何效果
  2. #include包含一个源代码文件
  3. #define定义宏
  4. #undef取消已定义的宏
  5. #if如果给定条件为真,则编译下面代码
  6. #ifdef如果宏已经定义,则编译下面代码
  7. #ifndef如果宏没有定义,则编译下面代码
  8. #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
  9. #endif结束一个#if……#else条件编译块
  10. #error停止编译并显示错误信息

参考:https://www.cnblogs.com/zi-xing/p/4550246.html

什么是预处理指令?

预处理指令是以#号开头的代码行(起注释作用是双反斜杠开头,eg:  //global variables)。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。

以前没有在意的学者注意了,预处理指令是在编译器进行编译之前进行的操作.预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。在很多编程语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码(防止重复包含某些文件)。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。

#include 用法

这个预处理指令,我想是见得最多的一个。放在代码文件头,用于告诉编译器,文件中包含的头文件属于预处理文件的一部分。

语法为:

#include <iostream.h> (这句是程序编译时搜索系统目录文件) 这种格式告诉预处理程序在编译器自带的或外部库的头文件中搜索被包含的头文件。

#include “HName.h" (这句是程序编译时搜索当前项目的文件)这种格式告诉预处理程序在当前被编译的应用程序的源代码文件中搜索被包含的头文件,如果找不到,再搜索编译器自带的头文件。

采用两种不同包含格式的理由在于,编译器是安装在公共子目录下的,而被编译的应用程序是在它们自己的私有子目录下的。一个应用程序既包含编译器提供的公共头文件,也包含自定义的私有头文件。采用两种不同的包含格式使得编译器能够在很多头文件中区别出一组公共的头文件。

2.C++编程时几乎每次都敲上using namespace std;但这行代码究竟有什么作用呢?

C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。

  早些的编码将标准库功能定义在全局空间里(所以并不需要注明使用什么命名空间),声明在带.h后缀的头文件里。C++标准为了和C区别开,也为了正确地使用命名空间,规定头文件不使用后缀.h。因此,当使用<iostream.h>时,相当于在C中调用库函数,使用的是全局命名空间,也就是早期的C++实现。当使用<iostream>时,该头文件没有定义全局命名空间,必须使用namespace std,指明在哪里的命名空间,这样才能使用类似于cout这样的C++标识符。

由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:
直接指定标识符
例如:
std::iostream而不是iostream。完整语句如下: std::cout << std::hex << 3.4 << std::endl;
使用using关键字
例如:
using std::cout; using std::endl; using std::cin; 以上程序可以写成如下代码:
using std::cout <<using std::hex << 3.4 <<using std:: endl;
使用using namespace std
例如:
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。

为什么尽量不要使用using namespace std? 参考知乎:https://www.zhihu.com/question/26911239

说法一:通常来讲,一个能平衡洁癖和效率的方法是只在cpp文件里面using namespace。只要编译器不抱怨,你就写using namespace std;。直到有一个名字冲突了,再用一些诡异的方法来解决。不然要用什么都写一大串using std::cout,那算上其他库,加上什么IO啊、GUI啊、各种乱七八糟的,你得写几万行using,不要活了。我不相信有人在写一个实用的企业程序的时候,能够坚持不using namespace。而且那些喜欢搞极端主义的人,其实他们的做法还可以再极端——名字都用::开头,完美保证不会被覆盖。

说法二:就是怕名字冲突嘛。可是,你写的什么代码,能和系统库冲突?只是千万不要在头文件里用,你不知道这个using能覆盖到多大范围。在cpp文件,所有include之后用,没什么问题。(不要在任何include之前用,那和放在头文件里没区别);

说法三:还有是不建议用的,譬如大牛说法;

说法四:就是引诱有一堆自以为很牛逼的人,爱写max min swap move forward 这样的“单谓词”函数名。这些牛逼的命名很容易和std名字空间有冲突。推荐咱们自己的函数(不是类的成员函数)命名,最好使用谓语+宾语规则。如果怕和std有冲突,要么是谓语和宾语加分隔符,要么定义大写命名规范。

个人观点:支持一二四的说法和建议。



转载于:https://www.cnblogs.com/Formulate0303/p/9012171.html

C语言学习——bsmap-2.74_main.cpp相关推荐

  1. 攻破c语言笔试与机试难点,如何攻破C语言学习、笔试与机试的难点.doc

    如何攻破C语言学习.笔试与机试的难点 第一节??C语言编程中的几个基本概念1.1? ?? ?#include< >与#include" "? 1.? ?#include ...

  2. c语言谭浩强ppt课件,编程_C语言学习课件_谭浩强_PPT~1216F.ppt

    编程_C语言学习课件_谭浩强_PPT~1216F.ppt ,第一章,C语言概述本章要点,C语言的特点 C程序的结构 在计算机上运行C程序的方法主要内容,1.1 语言出现的历史背景 1.2 程序的特点 ...

  3. C++语言学习笔记15:Clean 垃圾清理插件

    C++语言学习笔记15:Clean 垃圾清理插件 对话框 STET1 图片切换功能 导入位图资源 插入图片控件并修改属性 添加消息处理函数 step2 开发思路及类关系图 step3 添加控件及MFC ...

  4. c 语言学习大全 值得收藏的文章

    语言学习大全 C 语言的基础语法 第一部分 软件的安装 1.推荐使用 visual studio 编辑器 2.Vc6++ 3.学校 自己教学用的软件 第二部分 入门hello world 内容 流程就 ...

  5. C语言学习笔记09-数组、字符数组、字符串数组、二维数组(单字符输入输出putchar、getchar,字符串输入输出的scanf、gets、puts)

    C语言数组   数组作用:可以用来保存很多记录(可以看成一种大容器).一些简单游戏也基本由数组实现,如游戏地图(二维数组)等等.   一个数组 划分 多个单元(下标区分) -存放-> 多个同类元 ...

  6. C++语言学习(十二)——C++语言常见函数调用约定

    C++语言学习(十二)--C++语言常见函数调用约定 一.C++语言函数调用约定简介 C /C++开发中,程序编译没有问题,但链接的时候报告函数不存在,或程序编译和链接都没有错误,但只要调用库中的函数 ...

  7. 微软提出CLIPBERT:通过稀疏采样的视频语言学习

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家带来经典或 ...

  8. c语言错误的等式,C语言学习中几个常见典型错误分析.docx

    C语言学习中几个常见典型错误分析 打开文本图片集 摘要:C语言是一门优秀,应用广泛的结构化程序设计语言,是中职计算机.机电和电子技术等专业一门理论和实践相结合的课程,教学实践中,学生常觉得c语言难学, ...

  9. 二级C语言学习宝典下载,二级C语言学习宝典

    二级C语言学习宝典app是一款专注于全国二级计算机等级C语言学习所开发的应用软件,它能够给你带来全新的功能板块,让你轻松掌握超多优质的考试训练,享受到手机端做题刷题的畅快体验,让你轻松备考,而且在该软 ...

  10. Makefile学习笔记 - 我的CPP之路 - C++博客

    Makefile学习笔记 - 我的CPP之路 - C++博客 Makefile学习笔记 Makefile学习笔记 先列出一个很简单的Makefile例子: --------- hd.cpp #incl ...

最新文章

  1. 使用 IntraWeb (36) - TIWServerControllerBase
  2. webpack打包第三方类库的正确姿势
  3. Spring boot国际化
  4. Tkinter的Scrollba组件
  5. Atitit 图像扫描器---基于扫描线
  6. 筋斗云newcloud错误码列表
  7. HotSpot虚拟机对象揭秘
  8. Permute 3 for mac(全能媒体格式转换器)
  9. 基于tensorflow的iris数据集分类示例
  10. AI--调用百度OCR文字识别API进行图片文字识别
  11. html caption属性,html元素caption标签的使用方法及作用
  12. Django 创建项目app
  13. Ubuntu主机合盖子不休眠
  14. java与c#哪个用得多_Java和c#哪个更值得学习?
  15. 悟空问答死于知乎十周年
  16. MAC_BOOKPRO苹果电脑系统常用快捷键大全
  17. Django--基于Python的Web应用框架
  18. 论文阅读笔记:Multi-view adaptive graph convolutions for graph classification
  19. Java操作大数据量Excel导入导出万能工具类(完整版)
  20. python画猪猪侠_python的学习笔记/002-3(2018-5-20)

热门文章

  1. 2018-CBAM论文讲解
  2. 为什么使用3msip2协议_TCP协议专场
  3. 【知识索引】【李宏毅机器学习】
  4. BZOJ3832: [Poi2014]Rally(拓扑排序 堆)
  5. WPF中一个控件绑定另一个控件的属性
  6. 基于redis集群实现的分布式锁,可用于秒杀,定时器。
  7. 研究预测2022年全球VoLTE市场规模达348亿美元
  8. 定做属于自己的Lodop安装程序
  9. [Java] Maven 建立 Spring MVC 工程
  10. HDOJ 1106 排序