ubuntu环境下简单编译命令:
1,编译文件命令: gcc hello.c
生成 a.out
执行a文件 ./a.out
执行文件需要./
2,头文件:
每个C++/C程序通常由头文件(header files)和定义文件(definition files)组成;
头文件功能:用于调用库功能,让编译器从对应到库中提取相应到底层实现代码。
3,#ifndef:
C语言编译系统包括预处理,编译和链接等部分;
#ifndef x //先测试x是否被宏定义过
#define x
程序段1 //如果x没有被宏定义过,定义x,并编译程序段1
#endif
程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段1。
条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译。
4,头文件中定义举例:
#ifndef greeting_h
#define greeting_h
void greeting(char *name);
#endif
命令记录: gcc my_app.c functions/greeting.c -o my_app -I functions
5,编译过程:
编译过程又可以分成两个阶段:编译和汇编
源代码---》汇编代码---》目标代码---》可执行程序;
编译器 汇编器 链接器
.s .o .out
6,动态链接库和静态链接库
静态链接库(Static Link Library, 即Lib)
动态链接库(Dynamic-Link Library, 即DLL)
这两种库使用的主要区别是使用静态链接库的应用程序从函数库中得到所引用的函数的执行代码,然后把执行代码放进程序自身的执行文件中,这样,应用程序在运行时就可以不再需要静态函数库的支持了;而动态链接库是一种用来为其它可执行文件(包括EXE文件和其它DLL)提供共享的函数库,通常我们编写的应用程序中需要使用DLL的应用程序,我们可以调用DLL中的导出函数(imported function),在我们应用程序本身的执行代码中并不包含这些函数的执行代码,它们经过编译和链接之后,独立的保存在DLL中,使用DLL的应用程序只包括了用于从DLL中定位所引用的函数的信息,而没有函数具体实现,要等到程序运行时才从DLL中获得函数的实现代码。
7,makefile文件及make命令
makefile:文件代码:
my_app:greeting.o my_app.o
gcc my_app.o greeting.o -o my_app
greeting.o:functions/greeting.c functions/greeting.h
gcc -c functions/greeting.c
my_app.o:my_app.c functions/greeting.h
gcc -c my_app.c -I functions
终端运行:
test@ubuntu:~/code$ makefile
makefile:找不到命令
test@ubuntu:~/code$ make
gcc -c functions/greeting.c
gcc -c my_app.c -I functions
gcc my_app.o greeting.o -o my_app
test@ubuntu:~/code$ ./my_app
your nameSKanda
Hello SKanda!
8,类的定义:类的定义一般包括声明部分和实现部分:声明部分告诉使用者“干什么”,实现部分告诉使用者“怎么干”;
9,当类的成员函数的函数在类的外部定义时,必须由作用域运算符“::”来通知编译系统该函数所属的类;
10,不允许对所定义的类的数据成员进行初始化:
private:
int n = 19; //error
11,
1,JAVA中使用拷贝构造器创建对象的局部拷贝是不可行的.
Java的参数引用都是接口引用的方式, 传递进来的参数,可能是Interface的实现类,或者其他类的子类, 如果在拷贝构造函数中进行拷贝,是不能明确知道具体实现类型的
2,c++类的定义结束需要分号,java累的定义结束无分号。
3,c++的数据成员不能被初始化,如果需要初始化必须在结构体中定义
java的数据成员可以被直接初始化。
4,c++用 -> 表示指向对象的指针成员,而 . 用于表示一般对象的成员。
一下两种表示是等价的:
<对象指针名>-><成员变量>
(*<对象指针名>).<成员变量>
5,c++的构造函数和析构函数
c++的构造函数是:类建立时它会被自动执行,因此用于变量,对象的初始化都放在构造函数中,
析构函数的常用功能是删除对象时,做内存释放等清理工作。1,对象定义在函数体中,该函数调用结束后,析构函数被自动调用;2,用new为对象分配动态内存,当使用delete释放对象时,析构函数会被自动调用。
6,c++申明类: CMeter cm1;CMeter cm2(args...);
java申明类:CMeter cm1 = new CMeter();
c++基础补充
最新推荐文章于 2022-10-05 21:56:00 发布