`

C语言基本知识点

 
阅读更多
编译和链接
1.编译并链接一个完全包含于一个源文件的C程序
    cc program.c
2.编译并链接几个C源文件
   cc main.c sort.c lookup.c
3.编译一个源文件,并把他和现存的目标文件链接在一起
    cc main.o. lookup.o sort.c
4.编译单个C源文件,并产生一个目标文件,以后再进行链接
    cc -c program.c
5.编译几个C源文件,并为每个文件产生一个目标文件
    cc -c main.c sort.c lookup.c
6.链接几个目标文件
    cc main.o sort.o lookup.o
关键字:auto、static、register、const、volatile 、extern
auto
  这个这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。

register
  这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。
static
  常见的两种用途:
    1>统计函数被调用的次数;
    2>减少局部数组建立和赋值的开销.变量的建立和赋值是需要一定的处理器开销的,特别是数组等含有较多元素的存储类型。在一些含有较多的变量并且被经常调用的函数中,可以将一些数组声明为static类型,以减少建立或者初始化这些变量的开销.
  详细说明:
    1>、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
    2>、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。
    3>当static用来修饰全局变量时,它就改变了全局变量的作用域,使其不能被别的程序extern,限制在了当前文件里,但是没有改变其存放位置,还是在全局静态储存区。

  使用注意:
    1>若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
    2>若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
    3>设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题(只要输入数据相同就应产生相同的输出)。

const
  被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。它可以修饰函数的参数、返回值,甚至函数的定义体。
  作用:
    1>修饰输入参数
      a.对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是提高效率。例如将void Func(A a) 改为void Func(const A &a)。
      b.对于内部数据类型的输入参数,不要将“值传递”的方式改为“const引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如void Func(int x) 不应该改为void Func(const int &x)。
    2>用const修饰函数的返回值
      a.如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类型指针。
       如对于: const char * GetString(void);
       如下语句将出现编译错误:
        char *str = GetString();//cannot convert from 'const char *' to 'char *';
       正确的用法是:
       const char *str = GetString();
      b.如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const修饰没有任何价值。 如不要把函数int GetInt(void) 写成const int GetInt(void)。
    3>const成员函数的声明中,const关键字只能放在函数声明的尾部,表示该类成员不修改对象.

   volatile
  表明某个变量的值可能在外部被改变,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。它可以适用于基础类型如:int,char,long......也适用于C的结构和C++的类。当对结构或者类对象使用volatile修饰的时候,结构或者类的所有成员都会被视为volatile.
  该关键字在多线程环境下经常使用,因为在编写多线程的程序时,同一个变量可能被多个线程修改,而程序通过该变量同步各个线程。
  简单示例:
   DWORD __stdcall threadFunc(LPVOID signal)
   {
     int* intSignal=reinterpret_cast(signal);
     *intSignal=2;
     while(*intSignal!=1)
     sleep(1000);
     return 0;
   }
  该线程启动时将intSignal 置为2,然后循环等待直到intSignal 为1 时退出。显然intSignal的值必须在外部被改变,否则该线程不会退出。但是实际运行的时候该线程却不会退出,即使在外部将它的值改为1,看一下对应的伪汇编代码就明白了:
     mov ax,signal
     label:
     if(ax!=1)
     goto label
  对于C编译器来说,它并不知道这个值会被其他线程修改。自然就把它cache在寄存器里面。C 编译器是没有线程概念的,这时候就需要用到volatile。volatile 的本意是指:这个值可能会在当前线程外部被改变。也就是说,我们要在threadFunc中的intSignal前面加上volatile关键字,这时候,编译器知道该变量的值会在外部改变,因此每次访问该变量时会重新读取,所作的循环变为如下面伪码所示:
     label:
     mov ax,signal
     if(ax!=1)
     goto label
  注意:一个参数既可以是const同时是volatile,是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

extern
  extern 意为“外来的”···它的作用在于告诉编译器:有这个变量,它可能不存在当前的文件中,但它肯定要存在于工程中的某一个源文件中或者一个Dll的输出中。

分享到:
评论

相关推荐

    C语言复习知识点.pdf

    标题和描述部分提到的“C语言复习知识点.pdf”意味着接下来的内容将涵盖C语言编程的一些基础知识点。根据提供的部分内容,我们将对以下几个方面进行详细的阐述: 1. C语言基本语法:包括变量、数据类型、运算符、...

    C语言重要知识点总结.pdf

    根据提供的文件信息,以下是对C语言重要知识点的详细总结: 1. C语言基础语法:包括关键字、标识符、变量、数据类型、运算符和表达式。 2. 数据类型:C语言中定义了多种数据类型,包括整型、浮点型、字符型等。例如...

    C语言知识点总结

    C语言知识点总结涉及了C语言的基础和核心概念,详细知识点...以上知识点是C语言编程中最基本、最常见的概念和技术,是掌握C语言编程的基础。在实际编程中,熟练掌握和灵活运用这些知识点是编写高效、稳定C程序的关键。

    C语言知识点总结.pdf

    根据提供的文件信息,可以看出该文档内容涉及到C语言编程的核心概念,但由于OCR扫描识别可能存在的误差,我将尽力推断并阐述C语言中关于程序结构的重要知识点,包括顺序结构、选择结构和循环结构。 首先,程序结构...

    C语言教程 总结的C语言的知识点

    以下是对C语言知识点的详细总结: 1. **基本语法与数据类型** - C语言的语句结构包括声明、表达式和控制结构。 - 数据类型包括基本类型(如int, float, double, char)和复合类型(如struct, union)。 - 变量的...

    嵌入式: C语言知识点 C51单片机及C语言知识点必备秘籍

    《C51单片机及C语言知识点必备秘籍》是一本专为嵌入式系统开发者设计的指南,尤其适合初学者和有一定基础的工程师。这本书深入浅出地讲解了C语言在C51单片机上的应用,帮助读者掌握在微控制器环境下编程的核心技能。...

    c语言程序设计知识点总结.doc

    本文总结了C语言程序设计的基本知识点,包括C语言基本知识、语句种类、运算符、表达式、数据类型、选择结构等。 一、C语言基本知识 * C语言源程序的框架:编译预处理、主函数main()、函数n()等 * C语言源程序的...

    2024新版c语言基础知识点,全新内容c语言基础知识点

    本文为你提供了2024年最全面的C语言面试题集锦,覆盖了从基础到高级的各类C语言知识点。内容涉及C语言的基本结构、数据类型、变量和常量、运算符、控制语句、函数、数组、指针、结构体和联合体等基础概念,以及动态...

    C语言知识点总结完美版.pdf

    本知识点总结将围绕C语言的基础知识、结构、数据类型、运算符、预处理和程序设计基础等方面展开。 首先,C语言程序的基本结构包括顺序结构、选择结构(分支结构)和循环结构。顺序结构就是程序按照编写顺序依次执行...

    数据结构C语言版知识点

    数据结构C语言版知识点,严蔚敏版数据结构书籍

    C语言学习者福利(二级C语言知识点速记).rar

    这个压缩包“C语言学习者福利(二级C语言知识点速记).rar”提供了丰富的学习资源,帮助考生有效地备考。 首先,我们要明确C语言的基础构成,它包括以下几个核心概念: 1. **基本语法**:C语言的语法简洁明了,...

    C语言知识点总结【完美版】.rar_C++知识点_C语言_C语言知识点

    这份"C语言知识点总结【完美版】"的文档涵盖了C语言的核心概念,是学习和复习C语言的宝贵资源。以下是对该文档中可能包含的重要知识点的详细解释: 1. **基本数据类型**:C语言有几种基本的数据类型,包括整型(如...

    c语言知识点入门笔记+实验代码

    这篇“C语言知识点入门笔记+实验代码”涵盖了C语言学习的核心内容,对于初学者来说是宝贵的资源。以下是一些主要的知识点: 1. **基础语法**:C语言的基础包括变量、数据类型、常量、运算符和表达式。变量是存储...

    2022山西专升本C语言知识点总结

    《2022山西专升本C语言知识点总结》 C语言是一门基础且重要的编程语言,对于山西专升本的学生来说,掌握其核心知识点至关重要。以下是对C语言的详细解读,包括基本定义、常考概念、算法以及进制转换等关键点。 一...

    C语言主要知识点巩固(学习Objective-C 的前提)

    在学习Objective-C之前,深入理解C语言的知识点至关重要。C语言以其高效、简洁和灵活性被广泛应用于系统编程、嵌入式开发、游戏引擎等领域。本资料主要涵盖了C语言的核心概念,旨在帮助你巩固基础,为之后学习...

    编程C语言基础知识

    谭浩强 基础c语言知识,适合c语言的初级学者,最基本的c语言知识点

    C语言基础学习知识点 C语言基础学习知识点

    C语言基础学习知识点 C语言基础学习知识点 C语言的具体结构 主函数 程序解释——注释 C语言标识符 变量及赋值 基本数据类型 格式化输出语句

    c语言知识点总结.docx

    C语言是一种广泛应用于计算机编程的基础语言,尤其对计算机科学考研者和初学者而言,掌握C语言的基本知识至关重要。本文将对C语言的一些关键知识点进行详细总结。 首先,C语言的源程序由一个或多个函数构成,但必须...

Global site tag (gtag.js) - Google Analytics