Linux C一站式编程(第三章 简单函数)

    -
#include <math.h>
#include <stdio.h>
int main(void)
{
    double pi = 3.1416;
    printf("sin(pi/2)=%f\nln1=%f\n", sin(pi/2), log(1.0));
    return 0;
}

$ gcc main.c -lm
$ ./a.out
sin(pi/2)=1.000000
ln1=0.000000

gcc中的-lm选项:链接名称为libm.o或者libm.so的库文件,-l表示添加某个库,m表示添加数学库。

如果编译程序时得到undefined reference to ‘xxxx’这样的错误提示 :那你一定是缺少某个库。Linux的库命名是一致的,一般为libxxx.so,或libxxx.a,libxxx.la,那么你要链接某个库就用-lxxx,去掉头lib及”.”后面的so,la,a等即可。
同时,常见的库链接方法为:数学库 -lm ; posix线程 -lpthread


  • 函数原型:void threeline(void)这一行,声明了一个函数的名字、参数类型和个数、返回值类型,
  • 函数声明:一个函数原型,后面加;号结束,而不写函数体,void threeline(void);
  • 函数定义:只有带函数体的声明才叫定义

  • printf:可变参数(Variable Argument)的函数

  • 变量的作用域和生存周期
    • 作为局部变量,其作用域是其所在的函数之内,生存周期是从定义开始直到函数结束完成。
    • 作为全局变量,其作用域在整个程序的所有函数中都可以访问全局变量,生存周期在整个程序开始之前分配存储空间,在程序结束时释放存储空间。

出现了Bug往往就是因为在某个不起眼的地方对全局变量的读写顺序不正确,如果代码规模很大,这种错误是很难找出来的。
因此,虽然全局变量用起来很方便,但一定要慎用,能用函数传参代替的就不要用全局变量。



  • 全局变量的初始化:全局变量的初始化不能使用如下形式初始化 double pi = acos(-1.0); ,这是因为全局变量的初始值要求保存在编译生成的目标代码中,所以必须在编译时就能计算出来。

编译:指的是将代码转换成为二进制代码,并没有执行;因此,全局变量的要求决定了其不能被函数初始化。

猜你喜欢

转载自blog.csdn.net/lansehuanyingyy/article/details/81389623