C语言【编译器、变量、输入输出有关的】
C语言【编译器、变量、输入输出有关的】
一些想到的【从编译器到变量到输入输出有关的】的问题,有些是按自己理解写的答,有些待解决。
C语言可以跨平台,汇编不可以,编译时C语言会根据不同系统翻译成不同形式的汇编语言。
C语言中算数运算会在寄存器中运行,变量保存在堆或栈中。
遗留问题: C语言变量名如何在汇编语言中表现的?
一些C标准:
C89 = C90 = ANSIC = 标准C
C99 引入了一些新特性(如 单行注释)
C11 (2011年发行)
......
C语言、C语言标准、C编译器 之间的联系?
C语言 是一个泛指。
C语言标准 是一些权威机构(也许也有个人)定义的一些语法规范。
C编译器 是按照C语言标准将C语言代码翻译成机器可以识别的指令的程序。
C编译器比如 gcc、clang等。
可以通过gcc或clang编译C语言代码时指定C标准,如下:
gcc -std=c89 main.c -o main # c89的"c"一定要小写
clang -std=c99 main.c -o main
mingw和cygwin都是用于安装C语言编译器的跨平台工具, cygwin是一个类Unix环境的模拟器 。
- 遗留问题:makefile的编写规则?make为什么可以运行makefile?在win上如何使用make?
遗留问题:标准输入输出等函数是编译器提供的吗?它们属不属于编译器的一部分?尝试下载gcc或clang编译器,查看不同编译器之间库函数有什么不同。
main函数返回值返回到了哪里?-----操作系统。 有没具体点的回答呢?
待附图:C语言的执行过程?
预处理。 .c 文件 ----> .i 文件。 .i 文件为解决了#(预处理)后的文件。
gcc -E xxx.c -o xxx.i
编译。 .i 文件 ----> .s 文件。 .s文件为汇编代码文件。
gcc -S xxx.i -o xxx.s
汇编。 .s 文件 ----> .o 文件 / .obj 文件。 .obj 为二进制文件。
gcc -c xxx.s -o xxx.obj # 或
gcc -c xxx.s # 这样默认输出为 .o 文件
# .o文件是Linux下默认的二进制文件
链接。 多个 .o 文件 或 .obj 文件 ----> .exe文件(或其他格式可执行文件)
gcc xxx.o -o xxx.exe # 后面的-o xxx.exe可以不写
使用 scanf(...) 输入数据时,输入数据的格式要与 scanf(...) 中第一个参数的格式相同。且使用 scanf(...) 时不能加提示语,想要提示输入的话,可以前面加 printf(...)
// 格式之间是用逗号隔开,则输入之间也用逗号隔开
scanf("%d,%d,%d", &num1, &num2, &num3);
// 格式之间是用空格隔开,则输入之间也用空格隔开
scanf("%d %d %d", &num1, &num2, &num3);
逗号表达式和同时多个声明并赋值使用逗号的区别?
两种根本不是一回事。
int a=10, b=20, c, d=30; // 这就是连续声明或声明并赋值
a = (10, 2*2, 5); // 这个是只执行最后一个值或表达式并赋值给a
遗留问题:可不可以用"%d"输出字符类型的数据?反过来呢?其他的格式和变量混乱输出形式呢? 像"%d"这样的占位符还有哪些,分别有什么作用?
%d 表示十进制整数。其他问题待查 。
- 遗留问题:有哪些变量默认初始值为0?全局变量是吗?数组呢?局部变量?......
vscode + gcc 时,C语言文件的路径不能有中文存在。
C语言中的标识符是什么,有没有长度限制,区不区分大小写?
程序中各种变量名、函数名、数组名、结构体名、枚举类型名等。
C语言标识符可以包含字母、数字、下划线,但不能以数字开头。
没有长度限制(也许有些编译器或平台会限制),但不建议写太长。
区分大小写。
记四个有点眼生的存储类型关键字: auto、extern、register、static 分别有什么作用待查
记几个C99增加的关键字:inline、restrict、_Bool、 _Complex、Imaginary 分别有什么作用待查,似乎用处不是很广泛
记几个C11增加的关键字:_Alignas、 _Alignof、 _Atomic、 Static_assert、 _Noreturn、 _Thread_local、 _Generic
初步认识常量
字面量常量。如1、2、3......
标识符常量。
第一种表示: #define 常量名 常量值 //预处理方式 ,一种替换,后面跟表达式时记得加括号,不加分号
第二种表示: const 类型 常量名 = 常量值;
枚举常量 待学
遗留问题:main函数中的参数 int argc, char const * argv[] 有什么含义?
C语言没有乘方运算符,但可以使用math.h头文件中的函数 pow(2, 3) 即表示2的3次方,返回double类型。
遗留问题:C标准库中的头文件只是函数声明的功能吗?比如stdio.h有没有对应的体文件?
遗留问题:getchar()的具体细节?
C语言【编译器、变量、输入输出有关的】的更多相关文章
- 第一个C语言编译器是怎样编写的?
首先向C语言之父Dennis MacAlistair Ritchie致敬! 当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用C语言编写的,有一些语言比如Clojure,Jython等是基于J ...
- iOS开发环境C语言基础 变量 、 数据类型和变量赋值 、 其他 、 运算符
1 变量使用常用错误汇总 1.1 问题 在我们使用变量的过程中,会遇到一些问题,在此将这些问题进行汇总,在今后使用的过程中,不出错.即使出现错误也可以很快地找到问题所在. 1.2 方案 变量在使用的过 ...
- windows系统安装gcc编译器----c/c++语言编译器
1.安装MinGW编译管理安装软件 官方下载:https://osdn.net/projects/mingw/releases/ 作者百度云备份下载:https://pan.baidu.com/s/1 ...
- C语言编译器CL.exe
下载地址CL.7z版权问题:仅供学习交流,请于24小时内删除,本人不承担版权问题… 基本使用: 1.解压缩,例如解压缩到E盘根目录下 2.打开cmd命令行界面(快捷方式win+R输入cmd回车)cd命 ...
- C语言中变量名及函数名的命名规则与驼峰命名法
一.C语言变量名的命名规则:(可以字母,数字,下划线混合使用) 1. 只能以字母或下划线开始:2. 不能以数字开始:3. 一般小写:4. 关键字不允许用(eg:int float=2//error ...
- C/C++语言中变量作用域:局部变量,全局变量,文件级变量
C/C++语言中的变量分为全局变量和局部变量. 这样的划分方式的根据是变量的可见范围或者叫做作用域. 1 局部变量 局部变量指的是定义在{}中的变量,其作用域也在这个范围内.尽管常见的局部变量都是定义 ...
- C语言进阶——变量属性05
C语言变量属性: C语言的变量可以有自己的属性 在定义变量的时候加上“属性”关键字 “属性”关键字指明变量的特有意义 语法:property type value_name; auto关键字: aut ...
- C语言编译器为什么能够用C语言编写?
不知道大家有没有想过一个问题:C语言编译器为什么能够用C语言编写? 所谓C语言编译器,就是把编程得到的文件,比如.c,.h的文件,进行读取,并对内容进行分析,按照C语言的规则,将其转换成cpu可以执行 ...
- Visual Studio2013的C语言编译器对C99标准的支持情况
Visual Studio2013终于开始比较良好地支持C99特性了.在此之前,如果用C语言写代码的话,变量名都需要放到函数体的前面部分,代码写起来十分别扭. 而Visual Studio2013中的 ...
- go语言的变量和定量
1.变量: 1.var go 的变量非常灵活引入了关键字var. 如 var v1 int var v2 string var v3 [10]int 在go语言中变量申明有更快捷的办法可以把若干个变量 ...
随机推荐
- 事务,不只ACID
1. 什么是事务? 应用在运行时可能会发生数据库.硬件的故障,应用与数据库的网络连接断开或多个客户端端并发修改数据导致预期之外的数据覆盖问题,为了提高应用的可靠性和数据的一致性,事务应运而生. 从概念 ...
- python实现在函数中捕获某个异常,然后将异常的具体信息写入error.txt文件中;
在程序开发中,如果对某些代码的执行不能确定(程序语法完全正确) 可以增加try来捕获异常 try这个关键字来捕获异常try:尝试执行的代码except:出现错误的处理 def func(): try: ...
- IOS App内嵌H5 swiper 轮播出现卡顿白屏闪烁
话说在前头:前端开发同学遇到这个问题不慌,因为接下来你要踩的坑我都帮你们踩完了,所以有了这一篇博客.希望能帮到你 轮播组件:swiper@4.5.1 (4x稳定的最后一个版本) 设备:ios版本15x ...
- Mybatis框架的搭建和基本使用
本文总结最原始Mybatis框架的搭建和最基本使用(不涉及Spring框架体系). 1 依赖 首先,我们要引入Mybatis依赖: <dependency> <groupId> ...
- qBittorrent如何运行脚本 BT实现自动改名并方便Jellyfin的搜刮器
qBittorrent如何运行脚本 BT实现自动改名并方便Jellyfin的搜刮器 很多影视网站下载的视频名字大概是为了规避监测,命名非常奇葩,比如:z灼f流,y骨y等等.如果你使用了Jellyfin ...
- 系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理
虚拟内存 虚拟内存是一种操作系统提供的机制,用于将每个进程分配的独立的虚拟地址空间映射到实际的物理内存地址空间上.通过使用虚拟内存,操作系统可以有效地解决多个应用程序直接操作物理内存可能引发的冲突问题 ...
- 4.go语言复合类型简述
目录 1. 本章前瞻 2.来自leetcode的例题 描述 分析 题解 3. 复合类型新版本的变化 3.1 string和[]byte的高效转化 3.2 内置函数clear 4. 复合类型概述 4.1 ...
- elasticsearch wildcard 慢查询原因分析(深入到源码!!!)
大家好,我是蓝胖子,前段时间线上elasticsearch集群遇到多次wildcard产生的性能问题, elasticsearch wildcard 一直是容易引发elasticsearch 容易宕机 ...
- Java开发面试--Redis专区
1. 什么是Redis?它的主要特点是什么? 答: Redis是一个开源的.基于内存的高性能键值对存储系统.它主要用于缓存.数据存储和消息队列等场景. 高性能:Redis将数据存储在内存中,并采用单线 ...
- Flask框架——模板、数据库ORM
文章目录 1 模板 1 重定向 1.1 什么是重定向? 1.2 为什么要有重定向? 1.3 如何使用重定向? 1.3.1 暂时性重定向(代码实例): 1.3.2 永久性重定向(代码实例) 2 jinj ...