
1. 预处理就是将里面的内容拷贝到目前文件中。
2.预处理里面的#define A b 就是把A改成b显示在编译后。
3.函数可以在一个cpp文件定义,在另一个文件申明后即可使用。当要使用头文件 .h里的函数时,则要求预处理加上所指向的头文件。
4.运行包含编译和链接,当单文件可以编译的时候不一定代表就可以运行。
5.当我们运行报错时error后会跟随两种错误,一种是 C开头的编译时语法报错,另一种是link链接时报错。
6.运行后的exe文件必须有个入口,基本上为main
7.
如果log函数定义在另一个文件中,但将另一个名字改错为logr时,函数multiply也会报错。这时把函数里的 log("multiply"); 引掉,没有问题,但是如果将 std::cout << multiply(5,8) < 8. 函数在调用时必须找到一模一样的格式,不可以更改,链接会出错,必须要完全识别才可以。 完全相同的函数可以在一个或者多个文件重复申明,但不可以重复定义。 9. 要记住在头文件写类似 #include “s.h" 时,如果多个.cpp 都写了则会出现已经定义的问题。 1)一种方法时在 .h 文件定义时在最前面加上 static 表示其他文件对着这个函数include时只对该文件内部有效。每个文件会有自己版本的该函数,对其他文件编译好的obj文件不可见。 2)第二种是还是将.h文件定义时最前面加上 inline变成内联函数,把函数的身体拿来取代调用。就是把 .cpp文件调用函数时直接把 例如 log(1111) 形式变成 1111(假如log函数为 这样的话) 3)第三种就是作者常用的把.h文件中只留下函数的申明,而把定义部分放到两个.cpp文件中的一个文件。 10. 在C++中不同类型变量之间唯一的区别就是大小,这个变量占据了多少内存。 int 为4字节,可存储大概-21亿 - 21亿 , char 为 1字节;short 为2字节;long一般为4字节。long long 一般为8字节, float 一般为4字节,double 为8字节。bool类型为1字节。 定义float 要在数据后加上 f(or F),不然就算 定义 也会变成double (隐式转换)。 11.数据类型会支持你输出的数据为什么类型,例如定义 char a = 65,cout <
12.如果我们在头文件#include内容时就是把该文件内容完整复制到该位置。 13.寻址是只能寻址到1 byte 而不能寻址到1bit. 14. 有返回值的函数可以直接定义个变量存储返回值。 15. 函数封装重复的事件(代码)可以简化代码。 但是太过分了不行,函数调用栈,参数存放在栈上,函数主要目的是为了防止代码重复。 16. 只有main函数可以不用指定返回值,默认返回0. 17. vs文件夹随便在哪建文件都可以,例如可以在程序文件夹建立头文件,但一般还是对应点比较好。 18. 把 .h文件都放函数声明,然后在一个.cpp存放函数定义,在其他包含 .main() 的.cpp 直接使用,当然都要有.h的头文件。 19. #pragma once是最常用也是最新的,也是基本上所有的编辑器都支持它。 #开头的为预处理命令(指令)。#pragma once意思是只#include这个文件一次,他是头文件保护符,防止我们在一个.cpp多次include一个.h,但不是防止在多个.cpp include。 为什么会出现一个.cpp多次#include呢,因为会出现一个.h 叫player,可能include log,然后player 又被include到其他文件。比如两个.h,其中一个include另一个.h,但是.cpp同时include两个.h。 20. 除了#pragma once ,还可以使用下面的方式,但是此方法不常用。它的原理是首先会检查_log_h这个符号是否存在,不存在的话就将两行中间的代码都Include到编译里,如果被定义了则两行中间的都会被禁用。也就是第一次运行时已经定义了 _LOG_H,则后面不会再重复了。 #ifndef x //先测试x是否被宏定义过 #define 宏定义 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。“define”为宏定义命令。 被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。 21. #include中的 " " (引号)表示文件存在于该文件的相对位置,但对于<>(方括号)来说,永远没有说这个文件的相对位置,他们必须存在于所有include目录的某一个里面。 现在<>(方括号)只用于编译器的include路径,而" "则用于所有,即使把方括号改为引号也可以正常运行。 22. 欢迎分享,转载请注明来源:内存溢出int multiply(int a, int b)
{
log("multiply");
return a*b;
}
int main(void)
{
std::cout << multiply(5,8) <void log(const char* message)
{
std::cout <#ifndef _LOG_H
#define _LOG_H
......
#endif
#define x
程序段1 //如果x没有被宏定义过,定义x,并编译程序段 1
#endif
程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段 1
微信扫一扫
支付宝扫一扫
评论列表(0条)