C++程序设计基础-1

    技术2024-06-11  85

    C++程序设计基础-1

    目录

    C++程序设计基础-10.写在前面——程序运行顺序1.正文开始——预编译指令1.1 预编译指令概念1.2 预编译指令格式1.3 #include 指令1.4 #define 指令1.5 #if #endif #elif 指令

    0.写在前面——程序运行顺序

    编译器在运行代码的时候,会且只会运行main函数 初学者先不用去管什么是函数,只是知道有这么个东西就好了,那三条注意事项也不必深究 注意1:main函数不能包含在任何结构或者类里面(C#的情况其他博客会讲) 注意2:main函数的名字只能叫main,不能叫其他的名字 注意3:main函数的定义告诉我们:一个源代码(包括导入的头文件)中有且只有一个函数叫做main 示例如下:

    int main() { return 0; }

    同样,初学者也不用管 return 0;是什么意思,其他博客会有写)

    1.正文开始——预编译指令

    1.1 预编译指令概念

    首先,一个“预”字说明它是在整个程序开始编译前就执行的,事实上,不管预编译指令在代码的哪个位置,它总是最先被编译 并且,预编译指令是对编译器“下命令”,就像老板先要对员工下特定的命令,员工才能按照指示去干活

    1.2 预编译指令格式

    1、一定要以 # 开头 2、每个预编译指令单独占一行 3、行末不加分号 示例:

    include <bits/stdc++.h> //非法,预编译指令一定要以 `#` 开头 #include <bits/stdc++.h> //合法 #define N 100000 #define M 15000 //非法,每个预编译指令单独占一行 #define K 1e9; //非法,行末不加分号

    1.3 #include 指令

    include ,字面的意思是“包括”,而它的实际意思也是把指定的文件契合到代码中,就好比小明和小红是一家(在一个文件中),小刚和小梅是一家(也在同一个文件中),户口普查时,有人告诉工作人员(也就是编译器),小明是小刚家的,那么,工作人员(编译器)就会很自然的把小明、小红、小刚、小梅分到一家(也就是一起编译)

    格式如下:

    #include <cstdio> //表示在系统指定的目录下查找一个名为"cstdio"的文件,并导入到编译器中 #include <bits/stdc++.h> //表示系统指定的目录下的"bits"目录下查找一个名为"stdc++.h"的文件,并导入到编译器中 #include "cstdio" //表示先在用户目录下查找一个名为"cstdio"的文件,如果找不到再在系统指定的目录下查找,并导入到编译器中

    以下两种方式等价:

    /*文件1:名字叫做"abc.h"*/ int abc(int a, int b, int c) { return (c >= a) && (c >= b); } /*文件2:也就是要编译运行的代码*/ #include "abc.h" int main() { int a = 10, b = 20, c = 50; cout << abc(a, b, c); //此时输出1 return 0; } int abc(int a, int b, int c) { return (c >= a) && (c >= b); } int main() { int a = 10, b = 20, c = 50; cout << abc(a, b, c); //此时输出1 return 0; }

    1.4 #define 指令

    在程序设计中,常常要一个东西写好几次,感觉烦,(复制粘贴更烦), 怎么办? 我们可以把一个很长很复杂的东西用一个短一点的东西来代替! 而且并不是我们去查找替换,而是编译器去做! 所以,要用到预编译指令 define就是专门做这个的

    注意事项: 1、只有#define 后面的第一个字符串会被替换! 2、类型不限,只要能输入代码,编译器就能给你替换 3、三字符组(不懂的就baidu)编译器会自动替换,无需手写

    格式:(以下两个代码等价)

    int main() { unsigned long long int a = 1000000000; unsigned long long int b = 1000000000; unsigned long double d = 10000000.00000; unsigned long double e = 10000000.00000; } #define LL unsigned long long int #define UD unsigned long double #define 1+11 10000000000 #define 1.09 10000000.00000 int main() { LL a = 1+11; LL b = 1+11; UD d = 1.09; UD e = 1.09; }

    注意:请仔细阅读以下两个程序:

    #include <iostream> int main(){ int a; a = 1; //运行之后a会等于多少??????/ a = 2; cout << a; //输出1 return 0; } #include <iostream> int main(){ int a; a = 1; //运行之后a会等于多少??????/ a = 2; cout << a; //输出2 return 0; }

    为什么? 因为 ??/ 就是一个三字符组,编译器自动把他替换成 \ 而在注释行后面加 \ 是会把下面一行也换成注释的,所以第一个程序里a并没有被赋值为2

    1.5 #if #endif #elif 指令

    初学者如果没学过分支结构,可直接跳过 在学分支结构的时候,大家肯定熟练的掌握了以下代码:

    int main() { int a; cin >> a; if (a < 0) cout << "negative"; else if (a == 0) cout << "zero"; else cout << "positive"; return 0; }

    可是大家知不知道,这段代码和上面的代码等价?:

    int main() { int a; cin >> a; #if a < 0 cout << "negative"; #elif a == 0 cout << "zero"; #else cout << "positive"; #endif return 0; }

    其实,他们的实现原理都是一样的 但是,他们之间有天差地别! 区别: 1、编译层面: 预处理分支是提前处理的,普通分支结构是运行时处理的 2、作用范围层面: 预处理分支的作用范围是不受任何限制的,普通分支结构只能在函数内部

    Processed: 0.009, SQL: 9