C语言常见关键字

typedef关键字-类型重命名

c 复制代码
#include <stdio.h>
typedef unsigned int uint;
typedef struct  Node
{
	int data;
	struct Node *next;
}Node;

int main(){
	//1. typedef 类型重命名用于变量
	unsigned int a = 10;
	uint b = 10;//上下两种写法等价
	printf("%d\n", b);
	// 2.typedef 类型重命名用于结构体
	struct Node n;
	Node n2; // 上下两种写法等价
	return 0;
}

static关键字修饰变量和函数

  1. 修饰局部变量称为静态局部变量
c 复制代码
#include <stdio.h>
void test()
{
	int a = 1;
	a++;
	printf("%d ", a);//打印结果为10个2。
	//原因是局部变量a的生命周期在每一次test()执行结束后都会结束。
	//每次在循环中调用test()时均会再重新创建局部变量a
}
int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}

	return 0;
}
c 复制代码
#include <stdio.h>
void test()
{
	static int a = 1;
	a++;
	printf("%d ", a); // 打印结果为2 3 4 5 6 7 8 9 10 11
	// 原因是static修饰局部变量的时候,局部变量出了作用域是不销毁的。
	// 本质上,static修饰局部变量的时候改变了变量的存储位置,影响了变量的生命周期(变长)和程序的生命周期相同。
	// 局部变量放在栈区,由static修饰的变量(静态变量)放在静态区。
}
int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}

	return 0;
}
  1. 修饰全局变量称为静态全局变量
c 复制代码
//新建文件,创建一个全局变量
int g_val = 2022;
c 复制代码
// 声明外部符号
extern int g_val;
int main()
{
    printf("%d\n", g_val);//2022

    return 0;
}

全局变量在 add.c 文件中,keywords.c 文件中用'extern'关键字引用了该全局变量并进行了打印

这里在使用 gcc 生成.exe 文件时踩了两个坑:

问题 1:因需要用 gcc编译器同时编译 C_2_Keywords 文件夹中的两个.c 文件但是 task.json无法识别.*通配符 报错问题

解决:

利用chatgpt解决vscode中gcc编译器的task.json无法识别通配符问题(无法通过.c编译全部文件)_gcc.exe: error: *.c: invalid argument-CSDN博客

问题 2:C-LANGUAGE文件夹是工作区,此文件夹中有 C_1 和C_2_Keywords 两个子文件夹但用 gcc执行文件夹中的C_2_Keywords/keywords.c文件时使用的是C-LANGUAGE/.vscode/tasks.json文件而不是C_2_Keywords/.vscode/tasks.json文件
原因:即使当前在编辑一个子文件夹中的文件,VS Code仍然使用工作区根目录下的tasks.json,C_2_Keywords/.vscode/tasks.json 会被忽略了,除非为子文件夹中单独打开一个VSCode窗口(即将C_2_Keywords作为工作区根目录打开),或者你配置了多根工作区。

解决:

VSCode多根工作区配置避坑指南:8个常见错误及修复方法-CSDN博客

注意: 当 add.c 文件中的全局变量被 static 关键字修饰时,全局变量的外部链接属性就变成了内部链接属性,其他源文件(.c)就不能再使用到这个全局变量了。

  1. 修饰函数称为静态函数--和修饰全局变量情况类似
c 复制代码
int Add(int x, int y)
{
    return x + y;
}
c 复制代码
extern int Add(int x, int y);
int main()
{
    int a = 10;
    int b = 20;
    int z = Add(a, b);
    printf("%d\n", z);
    return 0;
}

注意:一个函数本来是具有外部链接属性的但是当 add.c 文件中的函数被 static 关键字修饰时,外部链接属性就变成了内部链接属性,其他源文件(.c)就不能再使用了。

register 关键字

c 复制代码
int main()
{
    // 寄存器变量
    register int num = 3; // 建议将3放到寄存器中
    return 0;
}
相关推荐
我还记得那天1 小时前
数组的2个应用举例
c语言·开发语言·二分查找·数组
学困昇1 小时前
Linux IPC 详解:匿名管道、命名管道、共享内存与信号量
linux·运维·服务器·c语言·c++·人工智能
『昊纸』℃3 小时前
作为小白,C语言如何从零开始呢
c语言·ide·学习·编程·教材
iCxhust3 小时前
个人计算机的起点,INTEL 8088
c语言·单片机·嵌入式硬件·微机原理·8088单板机
聆风吟º3 小时前
深入理解C语言 islower 函数详解:判断字符是否为小写字母
c语言·开发语言·库函数·字符处理·islower
冉卓电子4 小时前
MPC5604B/C MC_RGM 复位模块全解
c语言·开发语言·单片机·嵌入式硬件
鱼子星_4 小时前
【数据结构与算法】数据结构基础——树(上):树的存储结构,满二叉树,完全二叉树,二叉树的存储结构
c语言·数据结构·算法
丘山望岳4 小时前
C++模板特化:类型与常量的灵活掌控
c语言·开发语言·c++
是main不是漫4 小时前
【数据结构--双向链表】从前有个节点,它想要两头讨好…
c语言·数据结构·链表
晚烛5 小时前
CANN 自定义算子开发:Ascend C 编程接口与算子实现完整指南
c语言·开发语言·人工智能·python