一、HelloWorld
1、源码
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello World\n");
return 0;
}
2、编译,链接,执行程序
参数argc:int,参数个数,例如命令行执行 ./HelloWorld,argc = 1;./HelloWorld test,argc = 2
参数argv:字符指针数组,例如命令行执行 ./HelloWorld,argc = 1,argv[0] = ./HelloWorld; ./HelloWorld test,argc = 2,argv[0] = ./HelloWorld,argv[1] = test
为了证明上面所说的情况,将代码稍作修改如下:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello World\n");
printf("%d\n", argc);
for (int i = 0; i < argc; ++i)
printf("%s\n", argv[i]);
return 0;
}
二、头文件
头文件是用来定义常量,声明函数,类,结构体等;linux环境下,大部分头文件都在/usr/inclue目录及其子目录中,那些依赖于特定linux版本的的头文件通常在/usr/include/sys和/usr/include/linux目录下
1.在调用C/C++编译器中,用 -I选项包含在子目录或非标准位置中的头文件
例如:我的chapter1目录下有test.cpp文件,代码如下:
#include "test.h"
int main(int argc, char *argv[]) {
printTest("Hello World");
return 0;
}
void printTest(const char *ch) {
printf("%s\n", ch);
}
而test.h文件在chapter1目录的上一级目录下
test.h源码如下:
#include <stdio.h>
void printTest(const char *ch);
此时不加任何选项的情况下,编译程序将发生报错如下
但加入 -I .. 将test.h所在的文件夹包含进来,再次编译,链接,执行成功
2.grep命令搜索包含某些特定定义和函数原型
例如:grep printf *.h :表示在当前目录下所有以.h结尾的文件中搜索printf
三、库文件
库是一组预先编译好的函数集合,并依据可重用的原则编写;linux环境下,标准库文件一般存放在/lib和/usr/lib目录下;库文件的名字总是以lib开头(以lib开头方便编译器快速查找到库文件),随后的部分指明这是什么库函数,文件名的最后部分以.开头,最后给出库文件的类型:.a,代表静态函数库,.so,代表共享函数库
1.用库所在的完整路径名或者-l选项告诉编译器要搜索的库文件
g++ -o Hello HelloWorld.cpp /user/lib64/libm.so 这条命令告诉编译器编译HelloWorld.cpp文件,并将生成的程序命名为Hello,并告诉编译器,除了搜索标准库外,还搜索数学库解决引用数学库函数的问题
g++ -o Hello HelloWorld.cpp -lm 达到的效果同上,但用-l选项如果有共享库,编译器会优先选用共享库
2.通过-L选项为编译器增加库的搜索路径
g++ -o Hello -L /usr/lib64 HelloWorld.cpp -lm 这条命令用/usr/lib64下的libm库来编译和链接Hello