c语言入门自学零基础 c语言与c++有什么区别和联系

C语言和C++的区别到底在哪里?
作为一个即用过C,也用过C++的人来说,不一定能说出它俩错综复杂的关系 。秒懂生活也是略懂一二 。

c语言入门自学零基础 c语言与c++有什么区别和联系


简单来说
C++是C发展来的 。
C++是面向对象的语言,而C是结构化的语言(面向过程) 。
C的大部分代码在C++上都能应用,而C++的代码在C上不能应用 。(记住是大部分,不是所有)
具体来说:C语言是一个结构化语言,它的重点在于算法与数据结构 。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制) 。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制 。所以C语言和C++的最大区别在于它们解决问题的思想方法不一样 。
c语言入门自学零基础 c语言与c++有什么区别和联系


具体来说
C语言是一个结构化语言,它的重点在于算法与数据结构 。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制) 。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制 。所以C语言和C++的最大区别在于它们解决问题的思想方法不一样 。
C语言主要用于嵌入式领域,驱动开发等与硬件直接打交道的领域,C++可以用于应用层开发,用户界面开发等于操作系统打交道的领域 。
C++对C的“增强”,表现在几个方面
(1) 类型检查更为严格 。
(2) 增加了面向对象的机制 。
(3) 增加了泛型编程的机制(Template) 。
(4) 增加了异常处理 。
(5) 增加了运算符重载 。
(6) 增加了标准模板库(STL) 。
(7)增加了命名空间 , 避免全局命名冲突 。
c语言入门自学零基础 c语言与c++有什么区别和联系


与C不兼容之处
上面说了C的大部分代码在C++上都能run的溜溜的 , 但是也有少数C代码会在C++中失效,或者在C++中有不同的行为 。例如:隐式转换 。
1).最常见的差异之一是,C允许从void*隐式转换到其它的指针类型,但C++不允许 。下列是有效的C代码:
//从void*类型隐式转换为int*类型
int*i=malloc(sizeof(int)*5);
但要使其在C和C++两者皆能运作,就需要使用显式转换:
int*i=(int*)malloc(sizeof(int)*5);
2).在C中,多次声明一个全局变量虽然不可取,但不算错.在C++中,多次声明同一个全局变量会引发错误.
3).另一个常见的可移植问题是,C++定义了新关键字,例如如new,class,它们在C程序中可以作为识别字(例:变量名)的 。
在C标准(C99)中去除了一些不兼容之处,也支持了一些C++的特性,如//注解 , 以及在代码中混合声明 。不过C99也纳入几个和C++冲突的新特性(如:可变长度数组、原生复数类型和复合逐字常数) 。
4).若要混用C和C++的代码 , 则所有在C++中调用的C代码,必须放在 extern “C” { /* C代码 */ } 内 。
在你使用过程中遇到的问题可能比这里讲的要多,没关系,你只要记住没有一个程序员不是从问题堆里走出来的就行了 。
讲了这么多 , 是不是对C和C++有了更深刻的了解 。两者各有长处,各有缺点,其实就看你在哪个领域去用它 。
c语言入门自学零基础 c语言与c++有什么区别和联系


C语言之网络通信源码+笔记源码
#include<stdio.h>
#include<sys/socket.h>
#include<sys/un.h>
#include<unistd.h>
#define PATH “/tmp/ser”
int main(int argc,char * argv[])
{
struct sockaddr_un addr = {0};
int serfd;
ssize_t num;
char buf[128];
//1 套接字
serfd = socket(AF_UNIX,SOCK_STREAM,0);
addr.sun_family = AF_UNIX;
【c语言入门自学零基础 c语言与c++有什么区别和联系 - 秒懂生活 www.miaodongshenghuo.com】
strncpy(addr.sun_path,PATH,sizeof(addr.sun_path) – 1);
//连接
connect(serfd,(struct sockaddr *)&addr,sizeof(addr));
//读写
while((num = read(STDIN_FILENO,buf,128)) > 0)
{
write(serfd,buf,num);
}
return 0;
}
笔记
#include<sys/socket.h>
#include<stdio.h>
#include<string.h>
#include<sys/un.h>
#include<unistd.h>
#define PATH “/tmp/ser”
int main(int argc,char *argv[])
{
//1 套接字
struct sockaddr_un addr;
int serfd,clifd;
ssize_t num;
char buf[128];
memset(&addr,0,sizeof(struct sockaddr_un));
serfd = socket(AF_UNIX,SOCK_STREAM,0);
//绑定
addr.sun_family = AF_UNIX;
strncpy(addr.sun_path,PATH,sizeof(addr.sun_path)-1);
bind(serfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_un));
//监听
listen(serfd,4);
//读写
for(;;)
{
clifd = accept(serfd,NULL,NULL);
while((num = read(clifd,buf,128)) > 0)
{
write(STDOUT_FILENO,buf,num);
}
close(clifd);
}
return 0;
}

秒懂生活扩展阅读