• c语言速记1(基本结构,编译运行,声明定义,类型,常量)


    1,环境centos7.4,查看是否有gcc编译器

    gcc -v

    结果:

    Using built-in specs.
    COLLECT_GCC=gcc
    COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
    Target: x86_64-redhat-linux
    Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=sr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootsap --enable-shared --enable-threads=posix --enable-checking=release --with-sysm-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-uniquobject --enable-linker-build-id --with-linker-hash-style=gnu --enable-languagec,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-aay --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x864-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-201502/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-ne=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
    Thread model: posix
    gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
    已安装效果

    补充:

    GCC(GNU Compiler Collection,GNU编译器套件)
    是由GNU开发的编程语言译器。
    GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,
    也包括了这些语言的库(如libstdc++,libgcj等。)
    gcc全称及简介

    2,实例:

    #include <stdio.h> 
    int main()
    {
       /* hello  C 程序 */
       printf("Hello, World! 
    ");
       
       return 0;
    }

    程序主要结构:

    结构概述:
    预处理器指令
    函数
    变量
    语句 & 表达式
    注释
    
    第一行 #include <stdio.h> 是预处理器指令,告诉 C 编译器在实际编译之前要包含 stdio.h 文件。
    下一行 int main() 是主函数,程序从这里开始执行。
    下一行 /*...*/ 将会被编译器忽略,这里放置程序的注释内容。它们被称为程序的注释。
    下一行 printf(...) 是 C 中另一个可用的函数,会在屏幕上显示消息 "Hello, World!"。
    下一行 return 0; 终止 main() 函数,并返回值 0

     3,操作

    在home目录中创建my_c目录并创建一个hello.c文件将上面代码放入:

    cd /home
    mkdir my_c
    cd my_c
    。。。 vim hello.c :wq

    编译执行

    gcc hello.c //编译后,默认生成a.out文件
    ./a.out //执行生成的文件
    
    Hello, World! //输出结果

    补充:设置编译后的文件名称:

    gcc hello.c -o hello.out //编译后的文件设置为hello.out
    另一种写法:gcc -o hello.out hello.c
    ./ hello.out //执行 还可以将多个源码编译成指定的名称的文件 gcc test1.c test2.c -o main.out

    补充:上面的编译其实包括:编译和链接

    宏观编译干了啥:源码转换为二维码。
    包括词法分析、语法分析、语义分析、性能优化、生成可执行文件五个步骤
    
    实际分为两部分:编译和链接
    
    编译:
    C语言代码经过编译以后,并没有生成最终的可执行文件(.exe/.out 文件),
    生成了一种叫做目标文件(Object File)的中间文件又叫对象文件(临时文件)。
    目标文件也是二进制形式的,它和可执行文件的格式是一样的。
    (但只是将我们自己写的代码变成了二进制形式)
    对于 Visual C++,目标文件的后缀是.obj;
    对于 GCC,目标文件的后缀是.o。
    
    链接:
    与系统组件(比如标准库、动态链接库等)组合起来。
    链接(Link)其实就是一个“打包”的过程,
    它将所有二进制形式的目标文件和系统组件组合成一个可执行文件。
    完成链接的过程也需要一个特殊的软件,叫做链接器(Linker)。
    
    总结:
    编译是针对一个源文件的,有多少个源文件就需要编译多少次,就会生成多少个目标文件。
    编译器每次只能编译一个源文件,生成一个目标文件,
    这个时候,链接器除了将目标文件和系统组件组合起来,
    还需要将编译器生成的多个目标文件组合起来。

     可以通过-c指明不链接编译

    1,将1.c文件不链接编译:
    gcc -c 1.c 
    //将输出1.o文件,
    
    2,进行链接和直接编译成可执行一样:
    gcc 1.o 
    //默认输出a.out
    
    3,指定输出文件名称:
    gcc -o 1.out 1.o

    4,数据类型

    在Linux中32位和64位系统的(long相关的)一些类型占用的字节不一样(Windows一样)

    可以通过函数sizeof查看类型占用字节大小,例子:

    #include <stdio.h>
    #include <limits.h>
     
    int main()
    {
       printf("int 存储大小 : %lu 
    ", sizeof(int));   
       return 0;
    }
    
    输出:
    int 存储大小 : 4 

    补充:printf函数

    特别是函数的前段参数说明:比如:
    "int 存储大小 : %lu 
    ":这是一串将直接输出的字符串
    特殊的两部分需要注意:
    %开头的占位符,这个占位符还能设置输出值的格式
    %lu 为 32 位无符号整数
    
    开头的转义符
    
     输出结果后换行

    归纳:

     1 常用基本数据类型占用空间(64位机器为例)
     2  char : 1个字节
     3  int :4个字节
     4  float:4个字节
     5  double:8个字节
     6 
     7 基本类型书写
     8 整数
     9  a,默认为10进制 ,102010  b,以0开头为8进制,04502111  c.,以0b开头为2进制,0b11101101。
    12  d,以0x开头为16进制,0x21458adf13 
    14 小数
    15 单精度常量:2.3f16 双精度常量:2.3,默认为双精度。
    17 
    18 字符型常量
    19 用英文单引号括起来,只保存一个字符'a''b''*' ,还有转义字符 '
    ''	'20 
    21 字符串常量
    22 用英文的双引号引起来 可以保存多个字符:"abc"23 
    24 1、数据类型转换:
    25 C 语言中如果一个表达式中含有不同类型的常量和变量,在计算时,会将它们自动转换为同一种类型;
    26 在 C 语言中也可以对数据类型进行强制转换;
    27 
    28 2、自动转换规则:
    29  a)浮点数赋给整型,该浮点数小数被舍去;
    30  b)整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中;
    31 3、强制类型转换形式: (类型说明符)(表达式)
    View Code

    5,声明和定义

    详见:C语言extern的概念(声明和定义的区别)

    6,常量

    常量包括:整数常量,浮点常量,字符常量,字符串常量

    定义常量:

    在 C 中,有两种简单的定义常量的方式:
    使用 #define 预处理器。
    使用 const 关键字。

    #define 预处理器定义常量的形式:

    #define identifier value
    
    特点:不用像java那样去指明类型,也不用等号赋值。

    例子:

    #include <stdio.h>
     
    #define LENGTH 10   
    #define WIDTH  5
    #define NEWLINE '
    ' //换行符
     
    int main()
    {
       int area;  
       area = LENGTH * WIDTH;
       printf("value of area : %d", area);
       printf("%c", NEWLINE);
    
       return 0;
    }

    结果:

    value of area : 50

    const 前缀声明指定类型的常量

    const type variable = value;
    
    貌似和java一样。

    例子:

    #include <stdio.h>
     
    int main()
    {
       const int  LENGTH = 10;
       const int  WIDTH  = 5;
       const char NEWLINE = '
    ';
       int area;  
       
       area = LENGTH * WIDTH;
       printf("value of area : %d", area);
       printf("%c", NEWLINE);
     
       return 0;
    }
  • 相关阅读:
    kvm虚拟机添加网卡
    rsync搭建
    hadoop副本数三个变为一个
    nginx日志ip提取参数介绍
    expect使用
    全球语言排行版查询
    mysql忘记密码(跳过权限修改)
    数据备份从阿里云主机(外网主机)拉取到本地服务器
    nginx+keepalived IP飘移(高可用)
    负载均衡配置
  • 原文地址:https://www.cnblogs.com/straybirds/p/14743406.html
Copyright © 2020-2023  润新知