Linux C第八課
キーワード
register registerの役割は、コンパイラにできるだけ変数をCPUの内部レジスタに保存するように要求することであり、CPUがメモリからデータを読み出す時間を省き、プログラムの実行効率を向上させることである.通常、頻繁にアクセスされる変数をレジスタ変数に設定します.registerキーワードを使用するには、いくつかの点に注意してください.一、registerはローカル変数しか修飾できません.グローバル変数は複数のプロセスによってアクセスできます.register変数に設定すると、現在のプロセスだけが変数の位置を知っていて、他のプロセスは知りません.二、register変数のアドレスを&で取得できない場合、&で取得したアドレスを使用する場合、メモリのアドレス;三、register修飾の変数タイプは必ずCPUが納得できるタイプである.
static staticの役割は3つある:一、staticは局所変数を修飾し、静的局所変数と呼ばれ、局所変数のライフサイクルを延長し、この変数がプログラム全体の実行が終わった後に解放される.二、staticはグローバル変数を修飾し、静的グローバル変数と呼ばれ、本ファイルにのみアクセスでき、他のファイルにはアクセスできない.三、static修飾関数は静的関数と呼ばれ、本ファイルでしか呼び出せず、他のファイルでは呼び出せない.1つのファイルに非静的関数と静的関数が同時に表示される場合は、必ず静的関数を非静的関数の前に定義するか、非静的関数の前に静的関数を明記してから、後で静的関数を定義します.また、静的変数は、仮想アドレス空間に記憶する.dataセグメント、初期化されていない場合、システムのデフォルト初期化はゼロです.staticを使用する3つのケース:1、ローカル変数のライフサイクルを延長したい場合、staticでローカル変数を修飾します.この場合、静的局所変数の役割はグローバル変数と同じであるが、静的局所変数はグローバル変数よりも安全である.二、グローバル変数を本ファイルでしかアクセスできないようにしたい場合、またはグローバル変数を再定義したい場合はstaticを使用してグローバル変数を修飾します.三、関数を本ファイルでしか呼び出せないようにするには、static修飾関数を使用します.
const
const修飾変数は読み取り専用変数と呼ばれ、const修飾変数名で対応する空間の値を変更することはできない.num修飾変数を使用して、必ず初期化を行います.const修飾パラメータは、関数実装中に実パラメータの値を変更することを避けることができます.constの修飾準則:近水楼台は先に月を得て、誰に近いか、修飾の誰の例です.
extern
externは外部宣言で、現在のファイルで他のファイルで定義されたグローバル変数または関数を使用するには、現在のファイルで使用する変数または関数を宣言します.
typedef
typedefは基本データ型の名前を変更し、コードの移植性を高め、複雑なデータ型名を簡潔な名前に変え、プログラムの作成を容易にすると同時に、変数を定義しやすくし、変数に対して注釈の役割を果たした.
複合データ型
struct構造体
structの役割:データをカプセル化し、異なるデータ型のデータを一緒に置く
struct student stu;//構造体変数の構造体変数を定義する.構造体メンバー構造体ポインタ->構造体メンバー
*ワード整列とセミワード整列:各構造体メンバーに4バイトのスペースを割り当てるセミワード整列:各構造体メンバーに2バイトのスペースを割り当てる
構造体データメンバーを定義するときは、メモリの空洞を減らすために、できるだけ同じタイプのデータを一緒に配置します.
*関数は複数の値を返す方法①入力パラメータを使う②構造体変数を返す
sizeof(struct student)は、すべてのメンバーの長さの和によって決定されます.
Union共通体アクセス構造体と同じsizeof(union)メンバーの中で最も長い決定によってすべてのメンバーが共通の空間を持つとオーバーライドが発生します
*大端バイトシーケンスと小端バイトシーケンスint num=0 x 12345678;ただし、12は高バイト、78は低バイト
イテレーションイテレーション:ロー・アドレスにロー・バイトを格納ロー・アドレスに格納ロー・バイトを格納ロー・アドレスに格納
CPUが大端格納か小端格納か共用体を利用した空間被覆性を検証する
Enum列挙
アクセス:
列挙は整数マクロに相当する
int len = 3;//3は幻で、数字は解釈する能力がありません
マクロ#マクロ#
①マクロは定数とコマンド(幻を避ける)②文の末尾に「;③マクロ関数(関数式マクロ定義)マクロ関数は馬鹿式置換であり、文法検査を行わず、安全ではないが、効率が高く、関数をカスタマイズし、文法検査を行い、安全であるが、効率が低い
コンパイル時間でメモリ空間をスワップする例(時間でスペースをスワップ):マクロ関数でメモリ空間で実行時間をスワップする例(空間で時間をスワップする):inline関数(インライン関数、インライン関数)
④内蔵マクロ定義
じょうけんコンパイル
①大きなコード用のコメント
②ヘッダファイル重複除外による重複定義
判定bool値
register registerの役割は、コンパイラにできるだけ変数をCPUの内部レジスタに保存するように要求することであり、CPUがメモリからデータを読み出す時間を省き、プログラムの実行効率を向上させることである.通常、頻繁にアクセスされる変数をレジスタ変数に設定します.registerキーワードを使用するには、いくつかの点に注意してください.一、registerはローカル変数しか修飾できません.グローバル変数は複数のプロセスによってアクセスできます.register変数に設定すると、現在のプロセスだけが変数の位置を知っていて、他のプロセスは知りません.二、register変数のアドレスを&で取得できない場合、&で取得したアドレスを使用する場合、メモリのアドレス;三、register修飾の変数タイプは必ずCPUが納得できるタイプである.
static staticの役割は3つある:一、staticは局所変数を修飾し、静的局所変数と呼ばれ、局所変数のライフサイクルを延長し、この変数がプログラム全体の実行が終わった後に解放される.二、staticはグローバル変数を修飾し、静的グローバル変数と呼ばれ、本ファイルにのみアクセスでき、他のファイルにはアクセスできない.三、static修飾関数は静的関数と呼ばれ、本ファイルでしか呼び出せず、他のファイルでは呼び出せない.1つのファイルに非静的関数と静的関数が同時に表示される場合は、必ず静的関数を非静的関数の前に定義するか、非静的関数の前に静的関数を明記してから、後で静的関数を定義します.また、静的変数は、仮想アドレス空間に記憶する.dataセグメント、初期化されていない場合、システムのデフォルト初期化はゼロです.staticを使用する3つのケース:1、ローカル変数のライフサイクルを延長したい場合、staticでローカル変数を修飾します.この場合、静的局所変数の役割はグローバル変数と同じであるが、静的局所変数はグローバル変数よりも安全である.二、グローバル変数を本ファイルでしかアクセスできないようにしたい場合、またはグローバル変数を再定義したい場合はstaticを使用してグローバル変数を修飾します.三、関数を本ファイルでしか呼び出せないようにするには、static修飾関数を使用します.
const
const修飾変数は読み取り専用変数と呼ばれ、const修飾変数名で対応する空間の値を変更することはできない.num修飾変数を使用して、必ず初期化を行います.const修飾パラメータは、関数実装中に実パラメータの値を変更することを避けることができます.constの修飾準則:近水楼台は先に月を得て、誰に近いか、修飾の誰の例です.
const int num = 5;//const num, num++; num ;
const int * p = #//const *p , *p num (*p)++;
int const * p = #//const *p , *p num (*p)++;
int * const p = #//const p , p num p++;
extern
externは外部宣言で、現在のファイルで他のファイルで定義されたグローバル変数または関数を使用するには、現在のファイルで使用する変数または関数を宣言します.
typedef
typedefは基本データ型の名前を変更し、コードの移植性を高め、複雑なデータ型名を簡潔な名前に変え、プログラムの作成を容易にすると同時に、変数を定義しやすくし、変数に対して注釈の役割を果たした.
複合データ型
struct構造体
structの役割:データをカプセル化し、異なるデータ型のデータを一緒に置く
struct student stu;//構造体変数の構造体変数を定義する.構造体メンバー構造体ポインタ->構造体メンバー
*ワード整列とセミワード整列:各構造体メンバーに4バイトのスペースを割り当てるセミワード整列:各構造体メンバーに2バイトのスペースを割り当てる
構造体データメンバーを定義するときは、メモリの空洞を減らすために、できるだけ同じタイプのデータを一緒に配置します.
*関数は複数の値を返す方法①入力パラメータを使う②構造体変数を返す
sizeof(struct student)は、すべてのメンバーの長さの和によって決定されます.
Union共通体アクセス構造体と同じsizeof(union)メンバーの中で最も長い決定によってすべてのメンバーが共通の空間を持つとオーバーライドが発生します
*大端バイトシーケンスと小端バイトシーケンスint num=0 x 12345678;ただし、12は高バイト、78は低バイト
イテレーションイテレーション:ロー・アドレスにロー・バイトを格納ロー・アドレスに格納ロー・バイトを格納ロー・アドレスに格納
CPUが大端格納か小端格納か共用体を利用した空間被覆性を検証する
#include<stdio.h>
union demo
{
int num;
char ch;
};
int main()
{
union demo demo1;
demo1.num = 0x12345678;
char *p = #
if(demo1.ch == 0x78) //if(*p == 0x78)
{
printf("
");
}
else
{
printf("
");
}
return 0;
}
Enum列挙
アクセス:
printf("p.A = %d
",A);
enum node p = A;
printf("p.A = %d
",p);
列挙は整数マクロに相当する
int len = 3;//3は幻で、数字は解釈する能力がありません
マクロ#マクロ#
①マクロは定数とコマンド(幻を避ける)②文の末尾に「;③マクロ関数(関数式マクロ定義)マクロ関数は馬鹿式置換であり、文法検査を行わず、安全ではないが、効率が高く、関数をカスタマイズし、文法検査を行い、安全であるが、効率が低い
コンパイル時間でメモリ空間をスワップする例(時間でスペースをスワップ):マクロ関数でメモリ空間で実行時間をスワップする例(空間で時間をスワップする):inline関数(インライン関数、インライン関数)
④内蔵マクロ定義
printf("%d
",__LINE__);
printf("%s : %d",__func__,__LINE__);
// __DATA__,__TIME__
じょうけんコンパイル
①大きなコード用のコメント
#if 0
...
#endif
②ヘッダファイル重複除外による重複定義
#ifndef A_H
#define A_H
...
#endif
判定bool値
if(flag)
//if(!flag)