• C Primer Plus(6) 中文版 第2章 C语言概述 2.2 示例解释


    2.2 示例解释
    典型的C程序
      #include   ---预处理指令
      
      int main( void ) ---main()总是第1个被调用的函数
                       ---语句 ---组成函数的语句
                       
      function a()     ---语句 
      
      function b()        ---语句 
      函数是C程序的构造块

    C语言中的6中语句:
    标号语句
    复合语句
    表达式语句
    选择语句
    迭代语句
    跳转语句

    C语句
    关键字
    标识符
    运算符
    数据
    2.2.1 第1遍:快速概要
    #include  <---包含另一个文件
    该行告诉编译器把stdio.h中的内容包含在当前程序中。stdio.h是C编译器软件包的标准部分,它提供键盘输入和屏幕输出的支持。
    int main( void ) <---函数名
    C程序包含一个或多个函数,它们是C程序的基本模块。圆括号main()表示一个函数名。int表明main()函数返回一个整数,
    void表明main()不带任何参数。
    /*一个简单的注释*/ <---注释
    注释在/*和*/两个符号之间,这些注释能提高程序的可读性。注释只是为了帮助读者理解程序,编译器会忽略它们。
    {  <---函数体开始
    左花括号表示函数定义开始,右花括号表示函数定义结束。
    int num; <---声明
    该声明表明,将使用一个名为num的变量,而且是num是int(整数)类型。
    num = 1; <---赋值表达式语句
    语句num = 1;把值1赋给名为num的变量。
    printf( "I am a simple " ); <---调用一个函数
    调用printf()函数,在屏幕上显示I am a simple,光标停在同一行。printf()是标准的C库函数。在程序中使用函数叫作调用函数。
    代码\n告诉计算机另起一行,即把光标移至下一行。
    %d告诉计算机以何种形式输出num的值,打印在何处。
    return 0; <---return语句
    C函数可以给调用方提供(或返回)一个数。目前,可暂时把该行看作是结束main()函数的要求。
    } <---结束
    必须以右花括号表示程序结束。
    2.2.2 第2遍:程序细节
    1.#include指令和头文件
    #include
    #include的作用相当于把stdio.h文件中的所有内容都输入该行所在的位置。实际上,这是一种“拷贝---粘贴”的操作。#include文件提供了一种方便的途径共享许多程序共有的信息。
    #include这行代码是一条C预处理器指令(preprocessor directive)。通常,C编译器在编译前会对源代码做一些准备工作,即预处理(preprocessing)。
    所有的C编译器软件包都提供stdio.h文件。该文件名的含义是标准输入/输出头文件。
    在大多数情况下,头文件包含了编译器创建最终可执行程序要用到的信息。
    ANSI/ISO C规定了编译器必须提供那些头文件。特定C实现的文档中应该包含对C库函数的说明。这些说明确定了使用哪些函数需要包含哪些头文件。 
    注意 为何不内置输入和输出
    原因之一是,并非所有的程序都会用到I/O(输入/输出)包,轻装上阵表现了C语言的哲学。正是这种经济使用资源的原则,使得C语言称为流行的嵌入式编程语言。
    #include中的#符号表明,C预处理器在编译器接受之前处理这条指令。
    2.main()函数 
    C程序一定从main()函数开始执行(目前不必考虑例外的情况)。除了main()函数,你可以任意命名其他函数。而且main()函数必须是开始的函数。
    main()函数的返回的值返回给操作系统。
    通常,函数名后面的圆括号中包含一些传入函数的信息。圆括号内是单词void表明没有传递任何信息。
    3.注释
    /*一个简单的注释*/
    C语言注释的好处之一是,可将注释放在任意的地方,甚至是与要解释的内容在同一行。较长的注释可单独放一行或多行。
    /*这是一条C注释*/
    /*这也是一条注释,
      被分成两行。*/
    /* 
      也可以这样写注释。
    */
    /*
    /*这条注释无效,因为缺少了结束标记。
    */
    C99新增了另一种风格的注释,普遍用于C++和Java。这种风格使用//符号创建注释,仅限于单行。
    //这种注释只能写成一行。
    int rigue; //这种注释也可置于此。
    因为一行末尾就标志着注释的结束,所以这种风格的注释只需在开始标明//符号即可。 
    这种新形式的注释是为了解决旧形式注释存在的潜在问题。假设有下面的代码: 
    /*
        希望能运行。
    */
    x = 100;
    y = 200;
    /* 其他内容已省略 */
    接下来,假设你决定删除第4行,但不小心删掉了第3行(*/)。代码如下所示:
    /*
        希望能运行。
    y = 200;
    /* 其他内容已省略 */
    现在第1行的/*和第4行的*/配对,导致4行代码全都成了注释。而//形式的注释只对单行有效,不会导致“消失代码”的问题。
    4.花括号、函数体和块
    {
        ...
    }
    一般而言,所有的C函数都使用花括号标记函数体的开始和结束。这是规定,不能省略。只有花括号({})能其这种作用。
    花括号还可用于把函数中的多条语句合并为一个单元或块。
    5.声明
    int num;
    这行代码叫作声明(declaration)。声明是C语言最重要的特性之一。
    int是一种数据类型(即,没有小数点或小数部分的数)。编译器使用这些信息为num变量在内存中分配存储空间。分号在 C语言中是大部分语句和声明的一部分。
    int是C语言的一个关键字(keyword)。关键字是语句定义的单词,不能用于其他用途。
    示例中的num是一个标识符(identifier),也就是一个变量、函数或其他实体的名称。因此,声明把特定标识符与计算机内存中特定位置联系起来,同时也确定了存储在某位置的信息类型或数据类型。
    在C语言中,所有变量都必须先声明才能使用。这意味着必须列出程序中用到的所有变量名及其类型。
    以前的C语言,还要求把变量声明在块的顶部,其他语句不能在任何声明的前面。也就是说,main()函数体如下所示:
    int main() //旧规则
    {
        int doors;
        int dogs;
        doors = 5;
        dogs = 3;
        //其他语句 

    C99和C11遵循C++的惯例,可以把声明放在块中的任何位置。尽管如此,首次使用变量之前一定要先声明它。
    int main() //目前的C规则
    {
        int doors;
        doors = 5; //第1次使用doors
        int dogs;
        dogs = 3; //第1次使用dogs 
        //其他语句 
    }
    数据类型
    C语言可以处理多种类型的数据,如整数、字符和浮点数。
    命名
    给变量名命名时要使用有意义的变量名或标识符。如果变量名无法清楚地表达自身的用途,可在注释中进一步说明。这是一种良好的编程习惯和编程技巧。
    C90和C11允许使用更长的标识符名,但是编译器只识别前63个字符。对于外部标识符只允许31个字符。实际上,你可以使用更长的字符,但是编译器会忽略超出的字符。
    可以用小写字母、大写字母、数字和下划线(_)来命名。而且,名称的第1个字符必须是字母或下划线,不能是数字。
    操作系统和C库经常使用以一个或两个下划线开始的标识符,因此最好避免在自己的程序中使用这种名称。标准标签都以一个或两个下划线开始,如库标识符。这样的标识符都是保留的。这意味着,虽然使用它们没有语法错误,但是会导致名称冲突。
    C语言的名称区分大小写。
    为了让C语言更加国际化,C99和C11根据通用字符名(即UCN)机制扩展字符集。其中包含了除英文字母以外的部分字符。 
    声明变量的4个理由
    *把所有的变量放在一起,方便读者查找和理解程序的用途。
    *声明变量会促使你在编写程序之前做一些计划。程序在开始时要获得哪些信息?希望程序如何输出?表示数据最好的方式是什么?
    *声明变量有助于发现隐藏在程序中的小错误,如变量名拼写错误。
    *如果事先未声明变量,C程序无法通过编译。
    C99之前的标准要求把声明都置于块的顶部,这样规定的好吃是:把声明放在一起更容易理解程序的用途。C99允许在需要时才声明变量,这样做的好处是:在给变量赋值之前声明变量,就不会忘记给变量赋值。
    6.赋值
    num = 1;
    这行代码是赋值表达式语句。C语言是通过赋值运算符而不是赋值语句完成赋值操作。赋值是C语言的基本操作之一。可以给num赋不同的值,这就是num之所以被称为变量(variable)的原因。
    7.printf()函数
    printf( "I am a simple " );
    printf( "computer.\n" );
    printf( "My favorite number is %d because it is first.\n", num );
    圆括号表明printf是一个函数名。圆括号中的内容是从main()函数传递给printf()函数的信息。该信息被称为参数,或者更确切地说,是函数的实际参数(actual argument)。在C语言中,实际参数(简称实参)是传给函数的特定值,形式参数(简称形参)是函数中用于存储值的变量。printf函数会查看双引号中的内容,并将其打印在屏幕上。
    当程序运行到这一行时,控制权被转给已命名的函数。函数执行结束后,控制权被返回至主调函数(calling function)。双引号中的\n字符并未输出。这是因为\n的意思是换行。\n组合(依次输入这两个字符)代表一个换行符(newline character)。对于printf()而言,它的意思是“在下一行的最左边开始新的一行”。也就是说,打印换行符的效果与在键盘按下Enter键相同。为何不再键入printf()参数时直接使用Enter键?因为编译器可能认为这是直接的命令,而不是存储在源代码中的命令。换句话说,如果直接按下Enter键,编辑器会退出当前行并开始新的一行。但是,换行符仅会影响输出的显示格式。
    换行符是一个转义序列(escape sequence)。转义序列用于代表难以表示或无法输入的字符。\t代表tab键,\b代表Backspace键(退格键)。每个转义序列都以反斜杠字符(\)开始。 
    %d相当于是一个占位符,其作用是指明输出num值的位置。
    %提醒程序,要在该处打印一个变量,d表明把变量作为十进制整数打印。printf函数名中的f提醒用户,这是一种格式化打印函数。
    8. return语句
    return 0;
    C标准要求main()函数返回一个整数。有返回值的C函数要有return语句。该语句以return关键字开始,后面是待返回的值,并以分号结尾。如果遗漏main()函数中的return语句,程序在运行至最外面的右花括号(})时会返回0。因此,可以省略main()函数末尾的return语句。但是,不要在其他有返回值的函数中漏掉它。因此,强力建议读者养成main()函数中保留return语句的好习惯。对于某些操作系统(包括Linux和UNIX),return语句有实际的用途。 
     

  • 相关阅读:
    【GEE笔记3】发布APP(简易版)
    【C++初阶】C++入门(一)
    国内优质企业网盘推荐:满足您的文件存储与共享需求
    第十六章《正则表达式》第1节:正则表达式入门
    C 语言进阶
    HTTP请求报文与响应报文
    都这麽大了还不快了解防火墙(2)?
    SpringBoot日志框架选型——Log4j2的配置与使用
    记录pytorch实现自定义算子并转onnx文件输出
    cookie、session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/126124485