从C语言到C++

linux下c程序c++程序混合编译,c程序中调用c++程序,c语言项目与c++语言项目的合并 把两个开源项目合并到一起,但是一个是c编写,一个是c++编写,在linux环境下实现两个项目的混合编译,以及互相的调用。 阅读详情

面向对象特征:
抽象,多态,继承,封装

1.条件编译

#if 0       #if 1     #ifdef    #ifndef
...         ...			...		...
#endif      #else	  #endif	#else
	       ...					...
            #endif 				#endif
***********/

2.输入输出流,名字空间

using namespace std;
using std::cin;
std::cin>>i;

3.访问和内部作用域变量同名的全局变量,要用全局作用域限定 ::

#include <iostream> 
using namespace std;
double a = 128;
int main (){
   double a = 256;
   cout << "Global a: " <<::a << endl;  //::是全局作用域限定    
   return 0;
}

4. 通过 try-catch处理异常情况 :正常代码放在try块,catch中捕获try块抛出的异常

     try {                        //放置正常代码,但可能出现问题
      if (a > 100) throw 100;   //throw 抛出异常(也称为抛弃异常),100为异常对象,出现异常则下面的语句不会执行
      if (a < 10)  throw 10;    //throw后下面语句便不执行了
      throw "hello";
   }
   catch (int result) {         //捕获异常
    ........
   }
   catch (char * s) {            //捕获字符串
	 ........
   }

5. 引用(别名),引用主要用于函数形参,C语言函数形参都是值参数

int a = 3, &r = a;   //r就是a
void swap(int &x, int &y) {  //利用别名,形参x就是实参a
	int t = x;
	x = y;
	y = t;
}

6.默认形参

void print(char ch, int n = 1) {   //n为默认形参,默认形参必须在右边。n若不传递参数就为1,传递则是传递的数
	for (int i = 0; i < n; i++)
		cout << ch;
}

7 函数重载 :允许有同名函数存在,只要形参不同,注意:不能根据返回类型区分同名函数

函数重载,函数重写,同名隐藏
https://blog.youkuaiyun.com/inter_peng/article/details/53940179
https://blog.youkuaiyun.com/u014725884/article/details/47213651

8函数模板,类模板

template<typename T>   //函数模板,  typename 也可写成class
T add(T x, T y) {
	return x + y;
}
int main() {
// cout << add<int>(5, 3) << endl; 
	cout << add(5.3, 7.8) << endl;
	cout << add((double)5, 7.8) << endl; //歧义性   ,//函数模板是不允许隐式类型转换的,调用时类型必须严格匹配
}
//类模板
template<class T>
class Array {
	T size;
	T *data;
public:
	Array(int s) {   //构造函数
		size = s;
		data = new T[s];
	}
	virtual ~Array() {
		delete[] data;
	}
};

9.string,vector,迭代器iterator

string类具体操作: https://www.cnblogs.com/X-Do-Better/p/8628492.html

//vector
#include <iostream> 
#include <vector>    // vector是一个类模板
using namespace std;
int main() {	
	vector<int> v = { 7, 5, 16, 8 }; 
	  vector<int >  V2;
	v.push_back(25);    //push_back(),最后添加一个元素  	//成员函数size()、下标运算符[]   
    int	 i = v.size(); 
	v.pop_back();    //删除最后元素
	v.resize(2);

}
string::const_iterator cii;    //const迭代器,不能修改,  iterator能修改  string::iterator cii;

10.new/delete

int *p = new int;              delete p;   //防止内存泄漏
int *p = new int[n];			delete[] p; 

11. this指针: 指向类对象自己,成员函数实际上隐含一个this指针

#include <iostream> 
#include <string> 
using namespace std;

struct student {
	string name;	   	double score;
	void print() {
		cout << this->name << " " << this->score << endl;
	}
};
int main() {
	student stu;
	stu.name = "Li Ping";	   stu.score = 78.5;
	stu.print();   // print(&stu);   
}

12.访问控制、类接口

struct和class区别: struct里的成员默认是public(公开的) class里的成员默认是private(私有的)
接口:public的公开成员(一般是成员函数)称为这个类的对外接口,外部函数只能通过这些接口访问类对象,
private等非public的包含内部内部细节,不对外公开,从而可以封装保护类对象!

13.构造函数 ,拷贝构造函数,析构函数

构造函数是和类名同名且没有返回类型的函数,在定义对象时会自动被调用,而不需要在单独调用专门的初始化函数如init
构造函数用于初始化类对象成员,包括申请一些资源,如分配内存、打开某文件等
如果不写构造函数,编译器会默认生成一个String(){ }

析构函数是在类对象销毁时被自动调用,用于释放该
为了防止内存泄漏的发生,最好将基类的析构函数写成virtual虚析构函数。

默认的“拷贝构造函数”是“硬拷贝”或“逐成员拷贝”,指针指向同一块内存区域,当多次释放同一块内存就出错了!

#include <iostream> 
using namespace std;
class String {
	char *data; //C风格的字符串 
	int n;    //字符个数
public:
	~String() {
	..........
		if(data)
			delete[] data;
	}

	String(const String &s) {   // 重定义拷贝构造函数  硬拷贝{data=s.data;	s=s.n},
	                             //执行默认拷贝构造函数时s3和str2指向同一个地址,改变s3那么str2也改变
		cout << "拷贝构造函数!\n";	
               //当需要申请资源时,后需要将资源释放掉,最好重新定义拷贝构造函数,防止析构时多次释放
		data = new char[s.n + 1];		
		........
	}

	String(const char *s=0) {   //构造函数 ,:函数名和类名相同且无返回类型的成员函数
	. . . . .
		}
  ............
};

ostream& operator<<(ostream &o, String s) {
	for (int i = 0; i < s.size(); i++)
		cout << s[i];
	return o;
}

void f() {
	String str,str2("hello world");
	str2[1] = 'E';
//	cout << str2 << endl; 

	String s3 = str2; 			//拷贝构造函数   执行默认拷贝构造函数时s3和str2指向同一个地址,改变s3那么str2也改变
	cout << str2 << endl;  //str2传递给s调用ostream& operator<<(ostream &o, String s) 时 会默认调用拷贝构造函数
                           //调用时s和str2指向同一个地址,结束后调用析构函数s销毁,
						   //当f函数结束时,str2会销毁,造成了同一个内存多次销毁   所以要自定义拷贝构造函数 
}

14.运算符重载:针对用户定义类型重新定义运算符函数

运算符与普通函数在调用时的不同之处是:对于普通函数,参数出现在圆括号内;而对于运算符,参数出现在其左、右侧。

Complex a, b, c;   
…  
c = Add(a, b); // 用普通函数  
c = a + b;   // 用运算符+   
class Point{
	double x, y;
public:	
	double operator[](int i) const{ 	//const函数   。无法给通过下标赋值,为了和下面不一样。加了const,返回x复制品
		if (i == 0) 		return x;
		else if (i == 1)    return y;
		else throw "下标非法!"; 	//抛出异常     
	}
	double& operator[](int i) {   //下标可修改,返回x本身
		if (i == 0) return x;
		else if (i == 1) return y;
		else throw "下标非法!"; 	//抛出异常     
	}
	Point(double x_,double y_)       //构造函数
		x = x_; y = y_;
	}
	Point operator+(const Point q) {    //作为类的内部函数第一个参数就是调用操作本身。
		return Point(this->x+q[0],this->y + q[1]);
	}			
	friend ostream & operator<<(ostream &o, Point p);    //友元函数   
	friend istream & operator>>(istream &i, Point &p);
};

ostream & operator<<(ostream &o, Point p) {
	o <<p.x << " " << p.y<< endl;
	return o;
}
istream & operator>>(istream &i, Point &p) {
	i >> p.x >> p.y;
	return i;
}
/* Point operator+(const Point p,const Point q) { return Point(p[0] + q[0], p[1] + q[1]); } */

int main() {
	Point p(3.5, 4.8),q(2.0,3.0);	 //自动调用构造函数
	cout << p;
	cout << p[0] << "-" << p[1] << endl; //p.operator[](0)   
	p[0] = 3.45; p[1] = 5.67;
	cout << p<<q;	
	Point s = p + q; //p.operator+(q) 内部调用vs operator+(p,q)外部调用
	cout << s;
}

友元函数:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。
实际上具体大概有下面两种情况需要使用友元函数:(1)运算符重载的某些场合需要使用友元。(2)两个类要共享数据的时候

15. Inheritance继承(Derivation派生): 一个派生类(derived class)

多重继承: 从一个类派生出多个不同的类
多重派生: 从多个不同的类派生出一个类来
. 从1个或多个父类(parent class) / 基类(base class)继承,即继承父类的属性和行为,但也有自己的特有属性和行为.

#include <iostream> 
#include <string> 
using namespace std;
class Employee{
	string name;
public:
	Employee(string n);
	void print();
};
class Manager: public Employee{    //子类
	int level;
public:
	Manager(string n, int l = 1);
	//void print();
	};

Employee::Employee(string n) :name(n)//初始化成员列表  
{
	//name = n; 	
}
void Employee::print() {
	cout << name << endl;
}

Manager::Manager(string n, int l) :Employee(n), level(l) {
}
//通过调用基类的构造函数对基类成员初始化
//派生类的构造函数只能描述它自己的成员和其直接基类的初始式,不能去初始化基类的成员。 
Manager::Manager(string n, int l) : name(n), level(l) {  //错的
}
int main() {
	Manager m("Zhang",2);
	Employee e("Li");
	m.print();
	e.print();
}
//子类和父类有同名函数
class Manager : public Employee
{
	int level;
public:
	Manager(string n, int l = 1);
	void print();
};
Manager::Manager(string n, int l) :Employee(n), level(l) {
}
void Manager::print() {
	cout << level << "\t";
	Employee::print();
}
int main() {
	Manager m("Zhang");
	Employee e("Li");
	m.print();     //打印的是manage的print
	e.print();
}

派生类的指针可以自动转化为基类指针

int main() {
	Employee *p;
	Manager m("Zhang", 1);
	p = &m;
	p->print();   //此时打印的是employee中成员不是manage的
}

16.虚函数Virtual Functions,多态

上面代码可以将print声明为虚函数Virtual Functions :用virtual关键字,根据实际指向的类型输出,多态性,否则指针输出的是基类
静态成员函数不能是虚函数。

1.基类中必须包含虚函数(在成员函数之前加上virutal 关键字),并且在派生类中对基类中的虚函数进行重写
2.在派生类中重写的函数在基类中必须是虚函数(派生类中可以加virtual 关键字,不加的时候仍然会保持虚函数特性,但是建议加上)
3.派生类中虚函数必须与基类中虚函数的原型保持一致(返回值,函数名,参数列表和返回值都要相同,如果不同则会构成同名隐藏)
例外:析构函数(函数名不同)
例外:协变:基类的虚函数返回基类的引用或指针,派生类的虚函数返回派生类的引用或指针
4.基类与派生类中函数的访问权限可以不同,不过基类中虚函数必须是public权限
5.通过基类的指针或者引用来调用虚函数
6.静态成员函数不能定义为虚函数

多态:对于通过基类指针调用基类和派生类中都有的同名、同参数表的虚函数的语句,编译时并不确定要执行的是基类还是派生类的虚函数;而当程序运行到该语句时,如果基类指针指向的是一个基类对象,则基类的虚函数被调用,如果基类指针指向的是一个派生类对象,则派生类的虚函数被调用。这种机制就叫作“多态。

17.纯虚函数和抽象类

主要作用:相当于上述的基类,抽象类专门用来存放多态的接口,它是所有要实现多态的类的基类。
一 般的抽象类只是为了构成多态,并且其中的纯虚函数只是为了在其它的类种进行重写。
如果一个类继承于一个虚函数,那么这个函数种必须要重写抽象类中的纯虚函数。
写法:只有public的成员函数,并且只是声明,而且声后面加上 = 0,此函数叫做纯虚函数。
构成:以纯虚函数作为成员函数的类叫做抽象类,抽象类不能直接实例化,但是抽象类的指针是可以定义的。

18.内联函数:inline

内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。

void Foo(int x, int y);   
inline void Foo(int x, int y) // inline与函数定义体放在一起  
{   
…  
}   

对于任何内联函数,编译器在符号表里放入函数的声明(包括名字、参数类型、返回值类型)。如果编译器没有发现内联函数存在错误,那么该函数的代码也被放入符号表里。在调用一个内联函数时,编译器首先检查调用是否正确(**进行类型安全检查,或者进行自动类型转换,**当然对所有的函数都一样)。如果正确,内联函数的代码就会直接替换函数调用,于是省去了函数调用的开销。这个过程与预处理有显著的不同,因为预处理器不能进行类型安全检查,或者进行自动类型转换。假如内联函数是成员函数,对象的地址(this)会被放在合适的地方,这也是预处理器办不到的。

  C++ 语言的函数内联机制既具备宏代码的效率,又增加了安全性,而且可以自由操作类的数据成员。所以在C++ 程序中,应该用内联函数取代所有宏代码,“断言assert”恐怕是唯一的例外。assert 是仅在Debug版本起作用的宏,它用于检查“不应该”发生的情况。为了不在程序的Debug版本和Release版本引起差别,assert 不应该产生任何副作用。如果assert是函数,由于函数调用会引起内存、代码的变动,那么将导致Debug版本与Release版本存在差异。所以assert 不是函数,而是宏。
GCC和G++有什么区别?c++和g++程序的区别?GCC只能编译C语言吗?gcc 1.cpp和g++ 1.cpp有什么区别? gcc命令不止能编译C语言,还可以编译C++(内部等同于调用g++)或Fortran等(编译其它语言相当于调用对应语言的编译器),g++只能编译C或者C++.如果仅仅考虑C语言,参考此公式:g++ == gcc -xc++ -lstdc++ -shared-libgcc. 阅读详情

相关推荐

《第六篇》llama.cpp:纯 C/C++ 实现的大语言模型推理引擎详解

llama.cpp是一个纯C/C++实现的大语言模型推理引擎,由Georgi Gerganov开发。它通过量化技术将模型压缩为4bit/5bit/8bit等低精度格式,显著降低内存占用,使LLaMA等大模型能在消费级CPU上高效运行。项目采用自定义GGUF格式、优化KV缓存管理、多线程加速和SIMD指令等技术提升性能,支持LLaMA、Mistral等多种开源模型。具备跨平台、无需GPU依赖、内存占用低等特点,适合本地推理、嵌入式设备部署等场景,是隐私敏感型应用和教学研究的理想选择。

guoguozgw的博客 2868

从C语言到C++的进阶之C到C++的转变(篇一)

C++是在C语言的基础上发展出来的,在C语言的基础上又形成了新的对象、类、继承等用法,本文专注于从C语言到C++的转变与进阶,不断深入学习C++语言程序设计。

Viewinfinitely的博客 1671

“C语言与C++的七大区别 - 了解C语言与C++ cpp的差异“

而在C语言中,同样可以使用头文件来包含函数声明,但是C++中的头文件需要注意与C语言中的头文件区分开来。在C++中,我们可以通过定义类来描述一个对象的属性和方法,从而封装数据和行为。而在C语言中,没有类的概念,我们只能通过结构体来封装数据,没有对方法的支持。例如,在C++中,我们可以重载"+"操作符,使其能够执行字符串的拼接操作,这与C语言不同。而在C语言中,只有手动内存管理,需要使用malloc和free函数来进行内存管理。在C语言中,函数名必须唯一,无法定义同名函数,因此在C语言中不能进行函数重载。

DevForge的博客 401

C++ | 手把手带你从C语言到C++

命名空间的定义有关键字+命名空间名+{}组成,具体定义如下;//声明或定义(命名空间成员)int a;char c;以上代码定义了一个名叫zhangsan的命名空间,该命令空间有三个成员,分别声明了一个整型a,一个字符型c和一个函数Swap;注意:命名空间不可定义在函数和类的内部int main()int a = 0;int& ra1;// err 未初始化// 正确return 0;

Nice_W的博客 6576

Android keymint(keymaster)一RKP

Android RKP

weixin_47139576的博客 1万+

从零构建eSIM RSP服务:云原生架构与GSMA合规实践

本文详细阐述了从零开始构建一个符合GSMA SAS-SM安全标准的云原生eSIM RSP服务的完整路径。内容涵盖云原生基础设施选型、容器化部署、GSMA标准接口集成,并重点分享了通过SAS-SM安全审计的实战经验与避坑指南,为物联网及智能设备企业自建可控的远程SIM配置服务提供了系统性的解决方案。

weixin_29322553的博客 458

从C语言快速过渡到C++

帮助学会C语言的同学快速过渡到C++

CMtotoe的博客 6982

别再被SpringerLink虐了!手把手教你搞定LaTeX源文件提交(附正确文件顺序和类型选择)

本文详细解析了SpringerLink投稿系统中LaTeX源文件提交的常见问题与解决方案,包括文件打包、类型选择和顺序排列等关键步骤。通过实战经验,帮助科研人员避开隐形陷阱,一次性完成LaTeX提交,提升投稿效率。特别针对`.bst`和`.cls`文件的正确处理提供了专业指导。

weixin_42522964的博客 444

一文带你从C快速过渡到C++

从C快速过度到C++!如果你学习过C语言,想要快速学会C++,不想重头开始看视频,那么该篇文章应该能帮助到您。

Dakhin的博客 1万+

笔记本电脑更换主板后出现2203:System configuration is invalid,以及2201、2202系统错误的解决

主板更换后刷新S/N

晓夏IT笔记 3516

DySAT+: Enhancing Dynamic Graph Representation Learning with Multi-Head Self-Attention and Temporal-

本文深入探讨了DySAT+模型在动态图表示学习中的创新应用,通过多头时空注意力机制和层级信息融合策略,有效解决了动态图数据中的时间维度信息捕捉和结构演变动态适应问题。该模型在社交网络异常检测和金融交易网络分析等场景中表现出色,显著提升了预测准确率和响应速度。

weixin_29035405的博客 334

超详细C转C++简单教程(算法竞赛所需)

说实话,用c语言来写算法竞赛(蓝桥杯,acm)也是完全没有问题的,说是转型c++,其实并不是,只是借助了c++的一些STL容器(听起来很高级,其实就是栈,队列啥的)和一些库函数,例如sort函数,比快速排序啥的都要快,c++只需要一行就搞定了,不用再像c语言一样写很多,并不是真正的转型,也没必要担心自己学不会,还是c语言那老一套,只不过scanf printf换成cin cout等等。不过,用c++来写,确实省时省劲,还是很值得去学的! 有很多教程和视频都做得十分晦涩难懂,生怕你学会了…所以我今天来做个简单

wfuzhuandaaliu的博客 2万+

控制台模拟前端请求实现快速刷网课时长

本教程仅用于学习前端技术和网页开发,旨在提供教育与技术指导。对于任何未经授权或违反规定的使用行为,本人不承担任何责任。注意到那个serive后面有timestamp时间戳,暗示它很可能就是每30秒汇报一次进度和播放时长的命令,我们右键——复制——复制为fetch。有的网站上的网课需要的不仅仅是进度,而是时长,所以倍速插件失效,但我们可以使用控制台命令来模拟请求实现快速刷网课时长。尝试修改即可,例如我修改time为800,然后复制粘贴到控制台执行。播放视频,等待前端请求出现,然后复制前端请求为fetch。

m0_74823408的博客 2065

C语言--C++调用C语言程序、C语言调用C++程序

1、C++中调用C语言程序 main.cpp文件 #include <iostream> #include "cfun.h" using namespace std; int main() { cout << "C++ Hello world!" << endl; cfun(); return 0; } #if 0 ou...

tyustli 757

第23章:代码迁移——用AI将Vue2迁移到Vue3、将JS迁移到TS

> - 用AI自动将Vue2 Options API转为Vue3 Composition API的完整流程 > - 将JavaScript项目批量迁移到TypeScript,自动添加类型推导 > - 处理依赖冲突、破坏性变更和迁移后的验证方法 > - 一个完整的Vue2到Vue3迁移案例(含路由、状态管理) > - 我如何用AI将公司一个10万行代码的老项目从JS升级到TS

sfishfly的博客 207

157、飞控中的鲁棒自适应控制

本文总结了飞控系统中鲁棒自适应控制的实践经验。作者通过炸机案例引出传统PID控制的局限性,分析了鲁棒性与自适应性的本质矛盾,提出"用鲁棒性兜底,用自适应性提性能"的设计原则。重点介绍了模型参考自适应控制(MRAC)的实现方法,包括参考模型设计、自适应律调参技巧(建议初始增益设为0.01)、直接/间接自适应的应用场景差异,以及防止参数漂移的鲁棒修正方法。文章还分享了实际调试中的三大关键问题(初始值设定、激励条件、执行器饱和)及解决方案,并推荐了"鲁棒PID+自适应前馈"的混合架构。最后强调调试顺序应为先保证鲁

2401_88858637的博客 27

c++语言程序的后缀,c++中后缀名.c 与.cpp的区别?

ITMISS二者区别如下:.c 是c语言的源程序,.cpp是c++语言的源程序,这是两种不同的语言,语法不同。但是c++兼容c语言的绝大部分语法特性,所以该段代码在C++中可以运行,但是在C语言中就会报错。想要在C中运行,可以将定义变量放置在函数开头,修改后程序段如下:#includevoid main(){int a;a=7;float x,y,z;x=2.5;y=4.7;z=x+a...

weixin_34766614的博客 3278

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C语言.c文件调用C++ 中cpp文件中的类

C文件部分: #include "bbb.h"  //包含相应的头文件 test(param0,param1);//在合适的地方调用函数 -------------------------------------分割线------------------------------------------------------------------ 头文件部分:声明的函数在C文件和CPP文...

仗劍走天涯 8601

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

为什么说C++时C语言的plus——模板

为什么说C++是C语言的plus版本,这篇文章将通过C++模板的视角来见识一下C++的强大之处

终为nullptr 1072

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

c语言中.cpp英文全称,请问在c++中后缀名.c 与.cpp的区别?

qq_遁去的一_1二者区别如下:.c 是c语言的源程序,.cpp是c++语言的源程序,这是两种不同的语言,语法不同。但是c++兼容c语言的绝大部分语法特性,所以该段代码在C++中可以运行,但是在C语言中就会报错。想要在C中运行,可以将定义变量放置在函数开头,修改后程序段如下:#includevoid main(){int a;a=7;float x,y,z;x=2.5;y=4.7;z=x+...

weixin_34884417的博客 2729

c语言cpp编译,C和C++混合编译

1. 背景为了工作需要,在抽离一个开源库组件的时候,编译成功链接却失败,查找原因发现测试文件使用的是C++语言,而库的组件使用的是C语言,具体原因记录与此。2. 现场为了测试,写了一个单独的简单案例:新建win32工程,建立三个文件,分别是test.c、test.h和main.cpp。main.cpp#include "test.h"int main(){test(1);return 0;}tes...

weixin_28880469的博客 905

c程序设计语言cpp,c++中后缀名.c 与.cpp的区别?

二者区别如下:.c 是c语言的源程序,.cpp是c++语言的源程序,这是两种不同的语言,语法不同。但是c++兼容c语言的绝大部分语法特性,所以该段代码在C++中可以运行,但是在C语言中就会报错。想要在C中运行,可以将定义变量放置在函数开头,修改后程序段如下:#includevoid main(){int a;a=7;float x,y,z;x=2.5;y=4.7;z=x+a%3*(int)(x...

weixin_42382748的博客 3656

c语言怎么编译两个cpp,如何混合编译C语言和C++

如何混合编译C语言和C++实际开发过程中,C++中会调用C与语言编写的代码,我在网络上面找到一篇写得很好的文章就着上面的例子,我使用C语言采用两种方法重写了一下。方法一、全局函数和变量在devVar.c文件中实现,在extern.cpp文件中使用extern关键字声明在devVar.c文件中定义的函数和变量。devVar.c文件的代码如下所示:#include int i = 1;void fun...

weixin_32870457的博客 871

C语言和C++书籍分享

C语言和C++书籍分享

m0_49328056的博客 1437

c语言与cpp编程,C语言和CPP是什么关系?它们之间又有什么差异?

原标题:C语言和CPP是什么关系?它们之间又有什么差异?我们都知道,大学必学的C语言可以说是编程语言的基础,而C++却是被大多数人称为最难学的编程语言之一,C++是C语言的超集,但是C/C++又可以放在一起学!他们之间究竟有着怎么样的联系呢? 一、语言概述C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不...

weixin_33282146的博客 1738

C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件

C/C++语言中,如何在main.cpp中调用另一个.c文件主要有5种思路:   1、在VS2012 IDE中,将被引用的.c文件后缀名全部修改为.h,然后通过IDE的解决方案资源管理器中鼠标右键单击“头文件”-"添加"-“现有项”,选中修改后缀名后的.h文件-"添加",将待引用的文件添加到工程中。   添加到“头文件”而不是“源文件”的作用:主要是使头文件的项类型属性为“C/C++ 标头”,而不是“C/C++ 编译器”。后者是将该文件独立编译成目标文件*.obj。用户可右键单击某个.h文件-属性-

云海唯C的专栏 1万+
上一篇: C语言内存
下一篇: C++程序要调用已经被编译后的C函数
Hello_World_10
博客等级 码龄8年 8粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值