【C】Re04
一、类型限定符
extern
声明一个变量,extern声明的变量没有存储空间 const
定义一个常量,该常量必须赋值,之后且不允许更改 volatile
防止编译器优化代码??? register
定义寄存器变量,提高代码效率
register是建议型的指令,不是一般的命令型指令
在CPU存在空闲寄存器的情况下,register生效
反之寄存器没有空闲,就无法起效
volatile样例:
void volatileDemo() {
// 不使用volatile声明 编译器将舍去中间的赋值,直接从10 -> 51
int a = 10;
a = 11;
a = 1;
a = 31;
a = 41;
a = 51;
// 使用volatile声明 编译器将保留中间的赋值
volatile int b = 10;
b = 11;
b = 1;
b = 31;
b = 41;
b = 51;
}
register的意思:
把该变量注册到寄存器中,如果空闲寄存器发现,则触发生效,变量立刻寄存放入
等待CPU计算处理
但是注意这个问题:
因为该变量可能存放到寄存器中,所以我们无法使用&获取该变量的地址
因为&是从内存中获取的

三、数组
数组名称用法:
使用sizeof(数组名)获取整个数组占用的内存空间
如果除以对应的sizeof(数据类型),就可以获得该数组的长度【元素个数】
void arrayDemo () {
int arr[] = {11, 13, 21, 45};
// arr存储的地址 等同于 &arr[0]
printf("arr == &arr[0] ? %x == %x", arr, &arr[0]);
}
int main() {
arrayDemo();
return EXIT_SUCCESS;
}
四、函数剥离
脱离主函数文件编写程序
但是我的CLion上面就是引用失败,还找不到问题。。。
1、首先编写头文件
【demo.h】
#ifndef __DEMO_H__
#define __DEMO_H__
int sum(int n1,int n2);
#endif //__DEMO_H__
2、编写引用头文件的源文件
#include "demo.h"
#include <string.h>
#include <stdio.h> int sum(n1, n2) {
return n1 + n2;
}
3、在主函数源文件中的Main函数中调用文件的函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include "demo.h" int main() {
int result = sum(5, 6);
printf("sum 5、6 -> %d\n", result);
return EXIT_SUCCESS;
}
五、EXIT & RETURN
void exitAndReturn () {
exit(0); // 直接退出程序
return; // 当前这个函数结束
}
六、全局函数和静态函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h> void globalFunction() {
// todo... 全局函数
// 允许引用其他文件函数,然后调用
// extern void fromOtherFileFunction();
// fromOtherFileFunction();
} static void staticLocalFunction() {
// static修饰之后,该函数仅提供给此文件调用
} int main() { return 0;
}
【C】Re04的更多相关文章
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- Python高手之路【一】初识python
Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
- 【原】FMDB源码阅读(一)
[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...
随机推荐
- 【技巧】JS代码这么写,前端小姐姐都会爱上你
前言 缘由 JS代码小技巧,教你如何守株待妹 你想听的故事: 顶着『前端小王子』的称号,却无法施展自己的才能. 想当年本狗赤手空拳打入前端阵地,就是想通过技术的制高点来带动前端妹子.奈何时不待我,前端 ...
- node.js常用命令总结
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,用于构建快速.可扩展的网络应用程序.它使用事件驱动.非阻塞 I/O 模型,使其非常适合构建数据密集型的实时应用 ...
- 订单号规则,不能重复。redis去重 redis集合set应用
订单号规则,不能重复.redis去重 redis集合set应用 redis锁定商品解决并发售卖问题 RedisUtil工具类https://www.cnblogs.com/oktokeep/p/179 ...
- Shell读取整行
像C/C++,JAVA,Python等语言中,可以轻松地对文件进行按行读取. 那么,Shell中怎么实现对行读取呢? #!/bin/bash while read i do echo $i done ...
- MYSQL中怎么查询LONGBLOB类型数据的大小
在MySQL中,LONGBLOB 是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据.但是,LONGBLOB 数据类型本身并不直接存储数据的大小(长度).它存储的是二进制数据的实际内容. ...
- c/c++:带有返回类型的函数没有return语句会怎么样?
c/c++:带有返回类型的函数没有return语句会怎么样 背景 机器有时候启动的时候发现异常,跟踪了代码发现,有人在写一个int函数的时候,有一个分支没有return: 参考:https://www ...
- 3568F-视频开发案例
- GUI测试稳定性的关键技术
标签(空格分隔): GUI测试稳定性 GUI测试稳定性的关键技术 GUI 自动化测试稳定性,最典型的表现形式就是,同样的测试用例在同样的环境上,时而测试通过,时而测试失败. 这也是影响 GUI 测试健 ...
- vulhub - INFOSEC PREP: OSCP
vulhub - INFOSEC PREP: OSCP 信息收集 nmap 192.168.157.0/24 nmap -sT --min-rate 10000 -p- 192.168.157.162 ...
- 记一次 CDN 流量被盗刷经历
先说损失,被刷了 70 多RMB,还好止损相对即时了,亏得不算多,PCDN 真可恶啊. 600多G流量,100多万次请求. 怎么发现的 先是看到鱼皮大佬发了一篇推文突发,众多网站流量被盗刷!我特么也中 ...