キーワードtypedef
Typedef名前が示すように、これは型の定義であり、型の名前変更として理解する必要があります。
//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
//观察num1和num2,这两个变量的类型是一样的
unsigned int num1 = 0;
uint_32 num2 = 0;
return 0;
}
キーワード静的
まず、変数のライフサイクルを知る必要があります。変数の作成から変数の破棄までの期間です。
1.ローカル変数のライフサイクルは次のとおりです。スコープに入るライフサイクルが始まり、スコープから出るライフサイクルが終わります(破棄されます)。
2.グローバル変数のライフサイクルは次のとおりです。プログラム全体のライフサイクル。
C言語の場合:
staticは、変数と関数を変更するために使用されます。
1.ローカル変数の変更-静的ローカル変数と呼ばれ、ローカル変数のライフサイクルを変更します(より長く、プログラムのライフサイクルと同じ)
つまり、ローカル変数がstaticによって変更された場合、スコープ外になっても破棄されませんが、保持されます。
そのような:
//代码1
#include <stdio.h>
void test()
{
int a = 1;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
for(i=0; i<10; i++)
{
test(); //结果为2 2 2 2 2 2 2 2 2 2
}
return 0;
}
//代码2
#include <stdio.h>
void test()
{
static int a = 1;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
for(i=0; i<10; i++)
{
test(); //结果为2 3 4 5 6 7 8 9 10 11
}
return 0;
}
2.グローバル変数の変更-静的グローバル変数と呼ばれ、グローバル変数のスコープを変更します(変数は、それが配置されているソースファイル内でのみ使用できます)
そのような:
//代码1正常,代码2在编译的时候会出现连接性错误。
//代码1
//add.c
int g_val = 2018;
//test.c
int main()
{
printf("%d\n", g_val);
return 0;
}
//代码2
//add.c
static int g_val = 2018;
//test.c
int main()
{
printf("%d\n", g_val);
return 0;
}
3.変更された関数-静的関数と呼ばれるものは、関数の使用範囲を変更します。この関数は、それが配置されているソースファイル内でのみ使用できます。
そのような:
//代码1正常,代码2在编译的时候会出现连接性错误
//代码1
//add.c
int Add(int x, int y)
{
return c+y;
}
//test.c
int main()
{
printf("%d\n", Add(2, 3));
return 0;
}
//代码2
//add.c
static int Add(int x, int y)
{
return c+y;
}
//test.c
int main()
{
printf("%d\n", Add(2, 3));
return 0;
}
キーワードextern
外部シンボルを宣言するために使用されます
そのような:
//代码1报错,代码2正常运行
//代码1
//test.c
int g_val = 2022;
//test2.c
#include <stdio.h>
int g_val;
int main()
{
printf("g_val = %d\n", g_val);
return 0;
}
//代码2
//test.c
int g_val = 2022;
//test2.c
#include <stdio.h>
extern int g_val; //声明外部符号
int main()
{
printf("g_val = %d\n", g_val);
return 0;
}