C言語ノート:一般的なキーワード(後で追加されます)

キーワード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;
}

おすすめ

転載: blog.csdn.net/m0_62934529/article/details/123101740