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语言以分号结尾的,而不是以行结尾的。 =============================================================================

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java大联盟

Java面试手册:线程专题 ①

14720
来自专栏信安之路

看我如何收集全网IP的whois信息

今天给大家分享几个脚本,看看如何收集全网whois信息。首先了解一下whois.py这个基本程序。

16700
来自专栏python学习路

八、线程和进程 什么是线程(thread)?什么是进程(process)? 线程和进程的区别?Python GIL(Global Interpreter Lock)全局解释器锁

什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一...

51170
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(二十八) ——Redis集群节点结构与槽分配

《Redis设计与实现》读书笔记(二十八) ——Redis集群节点结构与槽分配 (原创内容,转载请注明来源,谢谢) 一、概述 redis集群是...

47260
来自专栏Android干货

Python IO编程

循环读取文件内容,一般读取文件内容一次读取完,内存是不够的,就要实现一次次少量数据读取

13520
来自专栏用户2442861的专栏

Linux下动态库(.so)和静态库(.a) 的区别

动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。

3.7K10
来自专栏互扯程序

java多线程-概念&创建启动&中断&守护线程&优先级&线程状态

在现代操作在运行一个程序时,会为其创建一个进程。例如启动一个QQ程序,操作系统就会为其创建一个进程。而操作系统中调度的最小单位元是线程,也叫轻量级进程,在一个进...

15330
来自专栏V站

PHP中上传图片表单$_FILES为空的解决办法

在文件上传中$_FILES接收不到值的情况有很多种,总结一下常见的错误有下边几种,也是大家在使用中容易犯的错误。 1.在form中忘记加enctype="mul...

63320
来自专栏刘望舒

React Native探索(五)使用fetch进行网络请求

前言 React Native可以使用多种方式来进行网络请求,比如fetch、XMLHttpRequest以及基于它们封装的框架,fetch可以说是替代XMLH...

33270
来自专栏社区的朋友们

django 初始化默认数据的一个方法

经常可能会有的一个需求就是,一个表中会有一些默认数据,这些数据未来是可以通过管理端来配置的。所以数据库在被建立之后,会有一些默认数据被插入表中。

2.9K30

扫码关注云+社区

领取腾讯云代金券