C++编译过程

C++编译过程

C++的开发工具

记事本 Notepad++ 使用命令行

Visual Studio

Visual C++ 6.0

code :: blocks

其他开发工具 Dev C++ ,Clion,Eclipse…

典型的HelloWorld程序

#include<iostream>
using namespace std;
int main(){
    
    cout<<"HelloWorld"<<endl;
    
    return 0;
}

解析HelloWorld程序

#include

  1. 以#号开头的语句成为预处理命令
  2. #include不是必须的,但是如果一旦程序中有该语句,就必须把他放在程序的开始处!

iostream

  1. iostream文件中的内容添加到程序中
  2. iostream中包含了有关输入输出语句的函数

iostream

iuput & output

stream 流,这是一个抽象的概念

图表对照:头文件命名约定

头文件类型约定实例说明
C旧式风格以 .h 结尾stdio.h
math.h
C,C++通用
C++旧式风格以 .h 结尾iostream.hC++可以使用
C++新式风格没有扩展名iostreamC++可以使用,需要使用
using namespace
转换后的C加上前缀c
没有扩展名
cmath
ctype等
C++使用

using namespace std;

使用名称空间 std --> [standard](javascript:😉

名称空间是一项C++的特性,用来编写大型程序时组织源代码;

其他用法:

using std::cout;
using std::cin;
using std::endl;

说明:

<< 符号表示把内容发送给 cout 打印

endl 是控制符,表示重启一行(\n) --> end line ;

endl 与 \n的区别:\n只是表示单纯的换行操作,endl 表示:1 换行 2清空缓存 fflush(stdin)

原理说明:

  1. 从概念上来讲,输出是一个流,可以理解成从程序流出一系列字符
  2. cout对象表示这种流,在iostream文件中定义
  3. cout右边<<符号是插入运算符,可以将右侧信息插入到流中

关于编码规范

C++编码风格

每条语句各占一方

每个函数都有一个开始和和结束的花括号{},花括号成对出现

函数中的语句对应花括号缩进

与函数名称相关的小括号周围没有空格

书写注释是一个良好的编程习惯

有助于对代码的阅读

注释应该准确,简洁,易懂

 // 这是单行注释

/*

这是多行注释

*/

//这是文档注释:

/*******************************

*时间:

*作者:

*版本:

*/

C++的执行和编译

1) 预处理

将.c 文件转化成 .i文件

使用的gcc命令是:gcc –E

对应于预处理命令cpp

2) 编译

将.c/.h文件转换成.s文件

使用的gcc命令是:gcc –S

对应于编译命令 cc –S

3) 汇编

将.s 文件转化成 .o文件

使用的gcc 命令是:gcc –c

对应于汇编命令是 as

4) 链接

将.o文件转化成可执行程序

使用的gcc 命令是: gcc

对应于链接命令是 ld

总结起来编译过程就上面的四个过程:
    预编译处理(.c) 
    编译、优化程序(.s、.asm)
    汇编程序(.obj、.o、.a、.ko) 
    链接程序(.exe、.elf、.axf等)。

命令提示符

windows+R 打开窗口,输入 cmd

[command](javascript:😉

推荐博客链接:https://www.cnblogs.com/mickole/articles/3659112.html

运行练习:

Microsoft Windows [版本 10.0.18363.720]
(c) 2019 Microsoft Corporation。保留所有权利。

F:\我的程序人生\CSDN博客>gcc -o HelloWorld.ii -E HelloWorld.cpp
'gcc' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

F:\我的程序人生\CSDN博客>gcc -v
'gcc' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

F:\我的程序人生\CSDN博客>g++ -v
'g++' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

F:\我的程序人生\CSDN博客>
Microsoft Windows [版本 10.0.18363.720]
(c) 2019 Microsoft Corporation。保留所有权利。

F:\我的程序人生\CSDN博客\C++编译过程>g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=E:/codeblocks/MinGW/bin/../libexec/gcc/mingw32/4.9.2/lto-wrapper.exe
Target: mingw32
Configured with: ../../../src/gcc-4.9.2/configure --build=mingw32 --enable-languages=ada,c,c++,fortran,lto,objc,obj-c++ --enable-libgomp --enable-lto --enable-graphite --enable-libstdcxx-debug --enable-threads=posix --enable-version-specific-runtime-libs --enable-fully-dynamic-string --enable-libstdcxx-threads --enable-libstdcxx-time --with-gnu-ld --disable-werror --disable-nls --disable-win32-registry --disable-symvers --enable-cxx-flags='-fno-function-sections -fno-data-sections -DWINPTHREAD_STATIC' --prefix=/mingw32tdm --with-local-prefix=/mingw32tdm --with-pkgversion=tdm-1 --enable-sjlj-exceptions --with-bugurl=http://tdm-gcc.tdragon.net/bugs
Thread model: posix
gcc version 4.9.2 (tdm-1)

F:\我的程序人生\CSDN博客\C++编译过程>g++ -o HelloWorld.ii -E HelloWorld.cpp

F:\我的程序人生\CSDN博客\C++编译过程>g++ -o HelloWorld.s -S HelloWorld.ii

F:\我的程序人生\CSDN博客\C++编译过程>g++ -o HelloWorld.o -c HelloWorld.s

F:\我的程序人生\CSDN博客\C++编译过程>g++ -o HelloWorld.exe HelloWorld.o

F:\我的程序人生\CSDN博客\C++编译过程>HelloWorld
TestHelloWorld

F:\我的程序人生\CSDN博客\C++编译过程>exit

在这里插入图片描述
结果

在这里插入图片描述

你不知道的事

  • [MinGW](javascript:😉 编译器;工具链;安装

  • Characteristics:是一个标志的集合,其中大部分的位用在目标文件(OBJ)或库文件LIB)中: Bit 0 (IMAGE_FILE_RELOCS_STRIPPED):置1表示文件中没有重定向信息。每个段都 有它们自己的重定向信息。

  • … /bin 使用者可执行的 binary file 的目录 /lib 系统会使用到的函数库 /lib 系统会使用到的函数库

  • 计算机是用数字电路搭成的,数字电路中只有1和0两种状态,或者可以说计算机只有两个手指,所以对计算机来说二进制Binary)是最自然的计数方式。根据“逢二进一”的原则,十进制的1、2、3、4分别对应二进制的1、10、11、100。

  • 一、简介:
    gcc 最初是 “GNU C Compiler” 的简称,只是当作一个 C 语言的编译器,现在已经变成了 “GNU Compiler Collection”,可以编译多种语言。

    二、编译的四个阶段:
    在使用 gcc 编译程序时,编译过程可以被细分为 4 个阶段:

    ◆ 预处理(Pre-Processing)

    ◆ 编译(Compiling)

    ◆ 汇编(Assembling)

    ◆ 链接(Linking)

  • gcc与g++的区别:

    1) 都可以用于编译.c或.cpp文件;
      
    2) gcc将.c文件当成C程序,g++将.c文件当成C++程序;
      
    3) g++的语法检测更严格一些;
      
    4) 对于cpp文件,gcc与g++在编译阶段是等价的,g++会调用gcc;
      
    5) 链接由g++完成,由两种方式:g++ 或 gcc -lstdc++
    
  • gdb:调试器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值