zoukankan      html  css  js  c++  java
  • c语言基础学习02_helloworld

    =============================================================================
    涉及到的知识点有:include有两种用法、{}大括号用法解释、C语言自定义名字的要求、
    c语言库函数printf的解释、编译错误有两种、调用system函数、c语言编译过程、
    操作系统结构、指令集中的cpu架构 、QT常用快捷键、vs常用快捷键

    =============================================================================
    将windows的可执行文件上传到linux,看能够执行吗?
    sftp> put a.exe

    出现下面错误:没有权限;拒绝访问
    -bash: ./a.exe: Permission denied
    那我们提升下a.exe的权限试试
    chmod u+x a.exe
    则出现下面错误:不能执行二进制文件:执行格式错误
    -bash: ./a.exe: cannot execute binary file: Exec format error
    说明windows的可执行文件不能再linux系统下执行

    fatal error   致命错误

    =============================================================================
    #include的意思是头文件包含,使用c语言库函数需要提前包含所用到的库函数对应的头文件
    c语言中如果要用到printf函数,在使用前必须 #include <stdio.h>
    -----------------------------------------------------------------------------
    include有两种用法:
    1、#include <文件名>    说明需要包含的文件在系统目录下
    2、#include “文件名”      说明需要包含的文件在当前目录下
    -----------------------------------------------------------------------------
    可执行代码必须放在{}大括号里面
    ; 在c语言中一行只写一个分号是可以的,表示是空语句。
    c语言中一组大括号里也可以再有多组大括号。
    -----------------------------------------------------------------------------
    int a;      //定义一个变量。
    extern int b;  //声明一个变量。
    -----------------------------------------------------------------------------
    C语言自定义名字的要求:
    可以使用大小写字母、下划线、数字,但第一个字母必须是字母或者下划线。
    且字母区分大小写。(注意:BASIC语言不区分大小写)
    -----------------------------------------------------------------------------

    printf 是c语言库函数,功能是:向标准输出设备输出一个字符串
    (注意:标准输出设备不仅仅指的是控制台、屏幕,还有打印机等等什么的。)
    printf 函数只能用在控制台程序里面(就是字符界面下的),不能用在图形界面下,即不能把一个字符串输出到窗口里面。
    可以通过命令 man 3 printf 来查看。

    -----------------------------------------------------------------------------
    编译错误有两种
    warning   不影响编译,只是警告。
    error       编译器彻底罢工了,不干活了。
    -----------------------------------------------------------------------------

    第一种写法:

    int main()
    {
      return 0;
    }

    第二种写法:

    void main()
    {
      return ; //或者可以这句话不用写
    }

    对c语言,两种写法都对,但对于C++来讲,只支持第一种写法。
    -----------------------------------------------------------------------------
    在main函数中
    return 0;    代表程序执行成功,
    return -1;   代表程序执行失败。
    -----------------------------------------------------------------------------
    c语言文件的扩展名是.c,C++文件的扩展名就是cpp

    linux系统并不用后缀名来区分文件;
    Linux不像Windows一样区分文件后缀的,所以是可以改的,而且不影响使用的。
    1,mv可以移动文件,也可以用作更改文件名。
    2,修改命名:mv fileName.type fileName.newType就可以更改文件后缀了。
    3,但是一些特定的文件不要随意更改,例如配置文件。
    =============================================================================
    在使用system之前需要包含stdlib.h这个头文件,
    调用system函数,可以在c语言的代码中执行另外一个程序
    -----------------------------------------------------------------------------
    如果在命令行执行一个程序,那么这个程序的调用者就是操作系统;

    如果在代码中通过system,执行一个程序,那么这个程序的调用者就是自己写的代码本身。

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

    不同平台下的c语言的库函数只能保证调用语法一样,但不能保证执行结果也是一样的。
    (因为c语言对硬件的要求、对操作系统的要求太多啦!)
    所以用C语言在不同的平台写代码的时候,可能会有一些移植的工作量。
    -----------------------------------------------------------------------------
    POSIX是一个标准,只要符合这个标准的函数,在不同的系统下执行的结果就可以一致。
    如果有符合posix标准的函数,尽量使用。

    Unix和Linux很多库函数都是支持POSIX的,但windows支持的比较差。(曾经微软说过要表示大力支持,但说得多做得少!)
    所以说,如果将Unix代码移植到Linux一般代价很小,如果把windows代码移植到Unix或者linux就比较麻烦。
    -----------------------------------------------------------------------------
    system 返回的是一个整数。
    即system的返回值就是所被调用程序中main函数的return的值。

    =============================================================================
    c语言编译过程
    1、预编译 --> 2、编译 --> 3、链接
    -----------------------------------------------------------------------------
    预编译命令:
    gcc -o cc1.c c1.c -E 或者 gcc -o cc1.c -E c1.c 或者 gcc -E c1.c -o cc1.c
    (注意:-o 作用是指定输出文件的名字,如果不加-o的话,则生成的文件名字总叫a.out)
    预编译c1.c,预编译之后得到的文件的名字叫cc1.c。
    (注意:编译后的名字可以随意起,但是呢我们知道预编译后的文件还是文本的.c文件,所以为了好区分起名字为 xxx.c)
    在c语言中#开头的语句又叫预编译指令。
    #include <stdio.h>
    预编译的功能之一:会把include包含的头文件内容做一个简单的替换,即替换到.c文件里面去。
    ......
    //此处省略1万行
    ......
    预编译的功能之二:会把代码中的注释去掉。
    -----------------------------------------------------------------------------
    编译的命令:
    gcc -o cc1.o cc1.c -c 或者 gcc -o cc1.o -c cc1.c 或者 gcc -c cc1.c -o cc1.o
    编译cc1.c,编译之后得到的文件名字叫cc1.o.
    编译的功能是:把文本的c语言编译为二进制指令。
    -----------------------------------------------------------------------------
    链接的命令:
    gcc -o c1 cc1.o  或者 gcc cc1.o -o c1(注意:gcc没有单独的链接参数

    将系统库函数与cc1.o进行链接(简言之合并),得到可执行的程序,该程序的名字叫c1。

    我们想知道在linux系统下到底链接来了什么库来呢?(即可执行程序需要用到什么库呢?)
    使用命令 ldd c1 查看。

    (注意;用c语言写的代码依赖的库最少,如果使用其他语言依赖的库更多哦!!需要装好多包包。)
    那么在windows系统下的可执行程序需要用到什么库呢?
    使用一个小软件Depends.exe可以查看的到。

    =============================================================================
    操作系统结构
    1、用户模式
    我们目前写的程序都是在用户模式下运行的。
    2、内核模式
    操作系统本身、设备驱动等这些软件是在内核模式下运行的。
    -----------------------------------------------------------------------------
    一个CPU的一个寄存器可以放8个二进制位。
    例如:
    0000 0000
    1111 1111
    则这个CPU就是8位的CPU。
    -----------------------------------------------------------------------------
    一个CPU的一个寄存器可以放16个二进制位。
    0000  0000  0000  0000
    1111   1111   1111  1111
    则这个CPU就是16位CPU。
    -----------------------------------------------------------------------------
    总线有三种:数据总线、地址总线、控制总线。
    总线在大多数时候和CPU的寄存器位数是相同的。

    8位CPU的总线是8位。
    1111 1111
    f    f
    256BYTE(255字节)

    16位CPU的总线是16位。
    1111 1111 1111 1111
    f   f   f   f
    65536BYTE(64k字节)

    32位CPU的总线是32位。
    1111 1111 1111 1111 1111 1111 1111 1111
    f   f    f   f   f   f   f   f
    32位CPU管理内存有一个最大值,4G字节 = 4 x 1024M = 4 x 1024 x 1024 x 1024Byte(字节)。

    64位CPU的总线是64位。
    1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
    f    f    f   f    f    f     f     f     f    f      f     f    f   f     f   f
    理论上64位CPU管理内存是:2^64个字节,但同时又取决于综合的指标:比如主板、操作系统的支持等等。
    但至少是远远大于4G的。

    如果寄存器是64位,但总线是32位,这种cpu叫准64位CPU。
    (即里面可以做到很宽,但是外面的工艺却达不到)

    若在64位的CPU架构上运行了64位的软件操作系统,那么这个系统是64位的;
    若在64位的CPU架构上运行了32位的软件操作系统,那么这个系统是32位的。
    -----------------------------------------------------------------------------
    指令集中的cpu架构
    精简指令集RISC(服务器端用的)比如:SPARC、ARM属于精简指令集。

    复杂指令集CISC(比如Inter的CPU)比如:X86属于典型的复杂指令集。
    -----------------------------------------------------------------------------
    cpu内部里面所有的计算都得在寄存器里面来完成。

    cpu内部的寄存器还有名字哦:
    8位cpu(x86构架)    16位CPU   32位CPU   64位CPU
    a           ax,al,ah      eax       rax
    b           bx,bl,bh        ebx               rbx
    c           cx          ecx               rcx
    d             dx       edx     rdx
    -----------------------------------------------------------------------------
    使用Qt时,再用到system函数时,会出现一个控制台的窗口。
    为什么呢?
    答:因为system函数在windows系统下就是一个基于控制台的函数(就是字符界面的函数),所以即使在图形界面下调用system也会出现一个控制台窗口。
    那么如何在图形界面下调用该函数又不显示控制台呢?
    答:可以换另外一个函数啊!该函数是 WinExec("notepad",SW_NORMAL); 但是该函数需要包含一个头文件是 #include <windows.h>。

    QT常用快捷键
    Ctrl + I        自动格式化代码
    Ctrl + /     注释代码/取消注释代码
    Ctrl + r    不调试运行代码
    Ctrl + b    编译代码但不运行代码
    Alt + enter    自动完成类函数定义
    F9           设置断点
    F5      调试运行
    F10       next调试
    F11       step调试
    -----------------------------------------------------------------------------
    vs常用快捷键
    Ctrl + F5             不调试运行代码
    Ctrl + k,Ctrl + f      自动格式化代码
    Ctrl + k,Ctrl + c     注释代码
    Ctrl + k,Ctrl + u     取消注释代码
    Ctrl + Shift + b        编译,不运行代码
    F5           调试运行
    F9                     设置断点

    注意:C语言以分号结尾的,而不是以行结尾的。
    =============================================================================

    Copyright ©2018-2019
    【转载文章务必保留出处和署名,谢谢!】
  • 相关阅读:
    fzuoj Problem 2177 ytaaa
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest Capture the Flag
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest Team Formation
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest Beauty of Array
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest Lunch Time
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest Convert QWERTY to Dvorak
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest May Day Holiday
    zoj The 12th Zhejiang Provincial Collegiate Programming Contest Demacia of the Ancients
    zjuoj The 12th Zhejiang Provincial Collegiate Programming Contest Ace of Aces
    csuoj 1335: 高桥和低桥
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/8028303.html
Copyright © 2011-2022 走看看