Linux 下C++工程编译

27 篇文章 2 订阅

创建文件夹

#include<iostream>
using namespace std;

int main(){

   cout<<"THis is C++ program Process!"<<endl;

}

编译执行命令:

g++ test.cpp  -o test

在这里插入图片描述

实际上,上述的命令包含了如下的四个过程:
在这里插入图片描述

1. 预处理

g++ -E test.cpp -o test.i

在这里插入图片描述
其中:test.i文件内容

# 1 "test.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "test.cpp"
# 1 "/usr/include/c++/5/iostream" 1 3
# 36 "/usr/include/c++/5/iostream" 3

# 37 "/usr/include/c++/5/iostream" 3

# 1 "/usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h" 1 3
# 194 "/usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h" 3

# 194 "/usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h" 3
namespace std
{
  typedef long unsigned int size_t;
  typedef long int ptrdiff_t;




}

2.编译:

g++ -S  test.i -o test.s

在这里插入图片描述
test.s文件内容
在这里插入图片描述

3.汇编:

 g++ -c test.s -o test.o

在这里插入图片描述

4.链接:

g++ test.o -o test

在这里插入图片描述
在这里插入图片描述

g++编译参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

man gcc   #查看gcc命令手册

Cmake

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
宏定义:
在这里插入图片描述

头文件的本质:
在这里插入图片描述
在这里插入图片描述

if endf 编译的时候禁用还是使用代码在这里插入图片描述

头文件:

  1. #pragma once
    表示只包含一次,防止头文件被重包含。

在这里插入图片描述
2.头文件保护符 #ifndef _LOG_H
#define _LOG_H

#endif

防止头文件被重包含。
在这里插入图片描述

类成员

#include<iostream>
#include<vector>

using namespace std;

class example
{
   public:
       example()
	   {
       		cout<<"example!"<<endl;
	   }
	   
	   example(int a)
	   {
	        cout<<"example!"<<a<<endl;	
	   }	
	
	
};


class Enity
{
	public:
	example m_value;
		
	Enity():m_value(example(8))
	{
		
	}
	
	
	
};

int main(){
	Enity e;
	
	
	
	
} 

在这里插入图片描述

模板:

#include<iostream>
#include<vector>

using namespace std;

template<typename T>

void printTemplate(T value){
	cout << value << endl;
} 
class Base
{
   public:
    virtual void getClassName()
	   {
       	  cout<<"Base Class"<<endl;
	   }	
};

class Second:public Base
{
	public:
	    void getClassName()
		{
	       cout<<"Second Class!"<<endl;	
		}
};

namespace orange{

	void print()
	{

		cout<<"ornage!"<<endl;
	}
}
namespace apple{
	namespace fruit {

		void print()
		{
			cout<<"apple!"<<endl;
		}	
	}
}

struct vertex{
	float x,y,z;	
};


int main(){
	//Base b;
	//b.getClassName();
	
	//Second sec;
	//sec.getClassName();
	Base *sec = new Second();
	
	//Base c = sec;
	
	sec->getClassName();
	
	delete sec;
	
	//using namespace apple;
	//using namespace fruit;
	apple::fruit::print();
//	print(); 
    vector<vertex> ver;
    ver.push_back({1,2,3});
    ver.push_back({4,5,6});
    for(int i = 0;i < ver.size();i++){
    	//cout << ver[i] << endl;
	}
	
	const char *a = "hello world!";
	int  b =3;
	printTemplate(3);
	
	
	
	
	
	
	
} 

内存分配:
在这里插入图片描述

宏定义

在这里插入图片描述

#define Log(x)     cout<< x  << endl;

#define MAIN int main() \
{\
    Log("hello world!");\
} 
MAIN

vecto迭代器

   vector<string> strings;
	strings.push_back("apple");
	strings.push_back("orange");
	
	for(vector<string>::iterator it = strings.begin();it != strings.end();it++){
		cout<< *it <<endl;
	}	
	

函数指针
在这里插入图片描述
传入函数指针在这里插入图片描述

使用函数指针调用函数

#include<iostream>
#include<vector>
//#include<array>

using namespace std;

#define Log(x)     cout<< x  << endl;


void print(int value)
{
	cout<<"values:"<<value<<endl;
}

void foreach(vector<int> values,void(*func)(int)){
	
	for(int i = 0;i < values.size();i++)
	      func(values[i]);
}

int main(){
	
	
	
//	array<int,6> arr;
//	arr[0] = 1;
//	arr[1] = 2;
//	cout<<arr[1]<<endl;*/
	
	vector<int> valueArr;
	valueArr.push_back(1);
	valueArr.push_back(2);
	valueArr.push_back(3);
	// = {1,2,3,4};
	foreach(valueArr,print);
	
	
	
} 

使用lamdba表达式

#include<iostream>
#include<vector>
//#include<array>

using namespace std;

#define Log(x)     cout<< x  << endl;


void print(int value)
{
	cout<<"values:"<<value<<endl;
}

void foreach(vector<int> values,void(*func)(int)){
	
	for(int i = 0;i < values.size();i++)
	      func(values[i]);
}

int main(){
	
	
	
//	array<int,6> arr;
//	arr[0] = 1;
//	arr[1] = 2;
//	cout<<arr[1]<<endl;*/
	
	vector<int> valueArr;
	valueArr.push_back(1);
	valueArr.push_back(2);
	valueArr.push_back(3);
	// = {1,2,3,4};
	//foreach(valueArr,print);
	foreach(valueArr,[](int calue){cout<<"valueArr:"<<value<<endl;});
	
	
	
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack Ju

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值