【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; }