c语言基础学习02
=============================================================================
涉及到的知识点有: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语言以分号结尾的,而不是以行结尾的。
=============================================================================
c语言基础学习02的更多相关文章
- D02-R语言基础学习
R语言基础学习——D02 20190423内容纲要: 1.前言 2.向量操作 (1)常规操作 (2)不定长向量计算 (3)序列 (4)向量的删除与保留 3.列表详解 (1)列表的索引 (2)列表得元素 ...
- D01-R语言基础学习
R语言基础学习——D01 20190410内容纲要: 1.R的下载与安装 2.R包的安装与使用方法 (1)查看已安装的包 (2)查看是否安装过包 (3)安装包 (4)更新包 3.结果的重用 4.R处理 ...
- D03——C语言基础学习PYTHON
C语言基础学习PYTHON——基础学习D03 20180804内容纲要: 1 函数的基本概念 2 函数的参数 3 函数的全局变量与局部变量 4 函数的返回值 5 递归函数 6 高阶函数 7 匿名函数 ...
- D03-R语言基础学习
R语言基础学习——D03 20190423内容纲要: 1.导入数据 (1)从键盘输入 (2)从文本文件导入 (3)从excel文件导入 2.用户自定义函数 3.R访问MySQL数据库 (1)安装R ...
- Golang 汇编asm语言基础学习
Golang 汇编asm语言基础学习 一.CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器.控制器.运算器和时钟四个部分组成. 寄存器:用来暂时存放指令.数据等对象.它是一个更快的内存. ...
- go语言基础学习
go基础学习,面向对象-方法在Go语言中,可以给任意自定义类型(包括内置类型,但不包括指针类型)添加相应的方法 使用= 和:=的区别: // = 使用必须使用先var声明例如: var a a=100 ...
- C# 语言基础学习路线图
一直以来,对于很多知识点都是存于收藏夹中,随着时间地变更,收藏夹中链接也起来越多,从未进行整理,也很零散,所以想对曾经遇到并使用过的一些知识形成文档,作为个人知识库的一部分. 就从C# 语言基础开始, ...
- C语言基础学习基本数据类型-变量的命名
变量的命名 变量命名规则是为了增强代码的可读性和容易维护性.以下为C语言必须遵守的变量命名规则: 1. 变量名只能是字母(A-Z,a-z),数字(0-9)或者下划线(_)组成. 2. 变量名第一个字母 ...
- 从零开始系列-R语言基础学习笔记之二 数据结构(二)
在上一篇中我们一起学习了R语言的数据结构第一部分:向量.数组和矩阵,这次我们开始学习R语言的数据结构第二部分:数据框.因子和列表. 一.数据框 类似于二维数组,但不同的列可以有不同的数据类型(每一列内 ...
随机推荐
- 浅谈,html\css脱离标准文档流相关
(个人知识有限,难免有误,请见谅) 标准文档流,顾名思义,是要按照一定规矩排列的,默认的就是元素会从左至右,从上至下排列,块级会独占一行,行内元素会和小伙伴们共享一行. 本来在标准文档流下,各个元素相 ...
- GDB scheduler-locking 命令详解
GDB scheduler-locking 命令详解 GDB> show scheduler-locking //显示线程的scheduler-locking状态GDB> set ...
- MST系列
1.POJ2485 Highways 蛮水的 数组一开始开小了卡了一会儿 我可能是个傻逼 #include<iostream> #include<cstdio> #includ ...
- CentOS7.4 chrony时间同步服务器部署(替代NTPD)
Chrony是一个开源的自由软件,它能保持系统时钟与时钟服务器(NTP)同步,让时间保持精确. 它由两个程序组成:chronyd和chronyc. chronyd是一个后台运行的守护进程,用于调整内核 ...
- JAVA NIO学习二:通道(Channel)与缓冲区(Buffer)
今天是2018年的第三天,真是时光飞逝,2017年的学习计划还没有学习完成,因此继续开始研究学习,那么上一节我们了解了NIO,那么这一节我们进一步来学习NIO相关的知识.那就是通道和缓冲区.Java ...
- 使用 Kafka 和 ELK 搭建测试日志系统(1)
本文仅供自己学习,不合适转载. 这是两篇文章的第一部分. 1. 安装 ELK 1.1 安装 ElasticSearch 在海航云上创建一个 Ubutu 16.4 虚机,2核4GB内存. (1)执行以下 ...
- lesson - 15 Linux系统日常管理4
内容概要:1. rsync 命令格式rsync [OPTION]... SRC DESTrsync [OPTION]... SRC [USER@]HOST:DESTrsync [OPTION].. ...
- java数组去重
java数组去重 1.创建新数组,用于保存比较结果 2.设定随机数组最大最小值 3.开始去重 4.计算去重所需时间 package org.zheng.collection; import java. ...
- 活动倒计时-兼容ios
最近要做一个活动,需要用倒计时,写好之后再IOS上无效,经过百度知道了,原来IOS不能识别格式"2017-11-09 --",所以要进行转换才有效 直接上代码了: <!DOC ...
- 微信小程序开发模板消息的时候 出现 errcode: 41028, errmsg: "invalid form id hint:
小程序开发模板消息的时候 出现 errcode: 41028, errmsg: "invalid form id hint: 我是使用的微信支付发送模板消息,提示的formid无效的 大家 ...