zoukankan      html  css  js  c++  java
  • C语言基础 (3) C语言介绍

    01回顾

    02 语言介绍

    语言是人和人交流,C语言是人和机器交流。

     

    03_为什么学C语言

    04_第一个C代码编译运行

    #include <stdio.h>

    int main()

    {

      // 这是第一个C代码

      printf(‘hello world’)

      return 0

    }

    gcc 01.c

    3、 return 0 代表程序正常结束

    // 使用某个函数前,添加头文件

    // 1、头文件类似于菜单,头文件包含函数的声明,菜单列举了菜名,

    // 函数调用,相当于点菜

    // <>通过包含系统的头文件(标准的头文件),” ” 包含自定义的头文件

    man 3 printf

    (

    1是普通的命令

    2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)

    3是库函数,如printf,fread

    vi usr/include/stdio.h

    // 1、函数调用,printf功能往标准输出设备(屏幕)打印内容

    // 2、 代表换行

    // 3、函数的调用必须放在{}内部

    06 C代码分析总结

    头文件什么时候需要包含?

    点菜的时候需要包含菜单,所以用函数的时候就需要包含头文件

    07 windows通过gcc编译代码

    windows编译代码
    1) cd 目录

    2) dir 查看目录信息

    3) gcc hello.c 默认在当前路径,生成a.exe

    gcc hello.c -o hello: 生成hello.exe

    4) 运行,在windows下运行

       ./a

       或者a.exe

       不能写./a.exe

    cmd

    gcc -v

    gcc hello.c

    gcc hello.c -o hello

    08 补充

    gcc(GNU compiler collection, GNU 编译器套件), 是由GNU开发的编译语言编译器。gcc原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X 等)采纳为标准的编译器,gcc同样适用于微软的Windows。

    gcc最初用于编译C语言,随着项目的发展gcc已经成为了能够编译C、C++、Java、…Object C、Object C++、Go语言的编译器大家族。

    linux编译的只能在linux运行 32只能在32 64只能在64。

    windows编译只能在window运行 32的可以在64运行, 64只能在64运行。

    09 System调用命令

    man 3 system

    system函数的使用

    #include <stdio.h>

    int system(const char* command);

    功能:在已经运行的程序中执行另外一个外部程序

    参数:外部可执行程序名字

    返回值:不同系统返回值不一样

    # include <stdio.h>
    # include <stdlib.h>

    int main(){

    printf(‘before sys ’)

    system(‘ls -alh’)    //取决于程序当前所在的目录

    printf(‘after sys ’)

    return 0

    }

    11. system调用外部程序

    #include <stdio.h>

    # include <stdlib.h>

    int main(){

           printf(‘asdsad’)

           system(‘waibu) //外部也是一个编译好的文件

           printf(‘after sys’)

    }

    13 system不同系统返回值不一样

     

    # include <stdio.h>

    # include <stdlib.h>

    int main(){

      printf(“before sys ”)

      // 1 需要头文件 #include <stdlib.h>

      // 2 system功能: 调用外部程序

      int a = system(“waibu”)  // .waibu.exe

      printf(“a = %d ”,a)

      printf(“after sys ”)

      return 0

    }

    waibu

    # include <stdio.h>

    int main(){

      return 250

    }

    windows下输出250

    linux下输出的不是250

    结论:C语言所有的库函数的调用,只能保证语法是一致的,但不能保证执行结果是一致的,同样的库函数在不同的操作系统下执行结果可能是一样的,也可能是不一样的。

    在学习Linux发展史时,我们得知Linux的发展离不开POSIX标准,只要符合这个标准的函数,在不同的系统下执行的结果就可以一直。

    Unix和Linux很多库函数都是支持POSIX的,但Windows支持的比较差,如果将Unix代码一直到linux一般代价很小,如果把Windows代码一直到Unix或者Linux就比较麻烦

    POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。

    POSIX标准意在期望获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。

    POSIX 并不局限于 UNIX。许多其它的操作系统,例如 DEC OpenVMS 支持 POSIX 标准,尤其是 IEEE Std. 1003.1-1990(1995 年修订)或 POSIX.1,POSIX.1 提供了源代码级别的 C 语言应用编程接口(API)给操作系统的服务程序,例如读写文件。POSIX.1 已经被国际标准化组织(International Standards Organization,ISO)所接受,被命名为 ISO/IEC 9945-1:1990 标准。

    14 字符串编码介绍

    1)windows默认支持的中文编码为gbk,gb2312,ANSI,

    2)linux默认支持的中文编码为utf-8(Unicode

    15 Qt调用system

    只在windows有效

    calc

    mspaint

    Qt调用system

    17 MFC调用system

    qt可以用来做界面

    MFC( Microsoft foundation class) 是微软出的做界面的,在Visual Studio里面使用

    18 GCC编译过程

    预处理和 链接一定是确定的两个步骤。 编译和汇编 是不确定的(有些书本是反过来的)

    包含头文件的作用:

    // 定义一个变量a,类型为整型

    int a;

    预处理: 宏定义

     

    (其实是把左边的放到右边了)

    *其实可以分步编译:

    怎么记呢? Esc iso

    gcc -E hello.c -o hello.i

    预处理:在包含头文件的地方把头文件放进来。

    (头文件展开)

    编译:gcc -S hello.i -o hello.s

    (已经是汇编语言了,生成了汇编文件)

    gcc -c hello.s -o hello.o

    (已经是目标文件了,还需要链接一些库什么的)

    gcc hello.o -o hello

    (现在就可以运行了)

    ldd hello 呈现出需要哪些动态库

    windows:

    dependency walker软件(用这个软件查看一下 需要哪些动态库)

    linux:

    可以用ldd命令来查看

    19 课堂答疑:动态库的作用

    写的程序,通常都需要函数调用

    1)函数调用类似于点菜

    2)函数调用可能需要链接动态库,只是点菜,菜从厨房(动态库)实现

    如果把qt的环境变量给关闭了,就不能运行了。

    20 gcc编译过程总结

    第一步 预处理 替换.h文件 这里没有语法检查

    第二步 编译  生成汇编语言

    第三步 汇编  生成二进制代码

    第四步 链接  对外部的库进行链接

    21 交换文件说明

    比如写一个文件写了一半没有保存关机了,

    然后重新 vi 这个文件的时候会报下面这个错

    交换文件说明:

    1) vi写文件,没有保存就关闭,自动生成一个后缀为.swp交换文件,

      保存了前面写的内容

    大写字母R来恢复。

    但是:这样恢复之后每次打开还是会提示这个,需要把这个减缓文件删除

    2)先恢复,再删除

     ls -a rm .xxxx.c.swp -rf

    22 寄存器介绍

    23 VS反汇编

    vs 嵌套汇编代码(了解)

     

    vs反汇编:

    1.设置断点

    2.

    上面的是Windows的示例,

    如果在Linux下就直接 gcc -esc -iso。。。那一大堆生成hello.s就可以查看了

    不同的编译器 不同的平台还会有所差异。

    24 VS的使用

    用vs进行C开发时,微软认为有些操作是不安全的,比如:

    解决方法1:

    25 qt的使用

     

    通过vs、qt编译代码,必须新建工程(项目),把代码加载到工程后才能编译运行。

  • 相关阅读:
    [BZOJ2038]小Z的袜子
    [BZOJ5016]一个简单的询问
    [BZOJ1008][HNOI2008]越狱
    [FZU2254]英语考试
    利用Map 的merge方法统计数量
    List 原生态类型
    try-with-resource 关闭 io流
    利用构建器创建对象
    linux 安装 vault
    git 上传文件
  • 原文地址:https://www.cnblogs.com/eret9616/p/9710019.html
Copyright © 2011-2022 走看看