[C言語] [Linuxが] "ストップ学習をプログラミングLinuxのC" 上巻の取得

プログラムの基本的な考え方

  • そして、プログラミング言語
    • C言語 - (コンパイラ) - アセンブリ言語 - (アセンブラ) - 機械語(オブジェクトコード/実行可能コード)
    • ポータブル/プラットフォームに依存しない:それはコンピュータ・プラットフォームまたはオペレーティングシステムのアーキテクチャの組み合わせを意味する、またはその両方。異なるプラットフォームは異なる命令セット、命令フォーマット異なる認識のマシンを持っています
    • プログラムのうち一部のコンピュータのアセンブラやマシンの指示に直接書き込むには、コンピュータのさまざまな上の走行が自分のコンピュータのマシン命令にCプログラムをコンパイルすることができ、Cコンパイラを持っていることをコンピュータ上でのみ使用可能です
    • コンパイル/インタプリタ言語:言語翻訳、ライン毎、インタプリタにより実行される、オブジェクトコードを生成することなく解釈さ
  • 自然言語と形式言語
    • 自然言語は、中国語、英語、フランス語など、人間の言語を話されています
    • こうした数学記号、分子式、プログラミング言語として設計言語と考えられ、特定のアプリケーションのための形式言語、
    • 厳格な形式言語の文法(構文)ルールがあります。
    • で構成されている文法規則記号(トークン)と構造(構造)についてのルールがあります。
    • 記号:事前に定義された演算子、記号の字句規則は(語彙)ルールであります
    • 構造:規則的な構造の文法上のシンボルの配置(文法)規則
    • 解析(パース):文構造解析処理
    • 自然言語と形式言語の違い
      • 曖昧(あいまい):明確な、あいまいさのない、各文の設計要件の正式言語は関係なく、文脈の明確な意味を持っています
      • 冗長性(冗長性):自然言語は、冗長性の導入を明確にするために、冗長性はほとんど形式言語
    • 一貫文字通りの意味:メタファーの完全な自然言語(メタファー)、文字通り本当の意味での言語の形で
    • (コンピュータプログラムを含む)推奨読書形式言語
      • コンパクトの言語よりも、自然言語の形式では、時間の読書を過ごします
      • 構造は、右下または左に、上から読んでいないが、脳内で解決しなければならない、トークンを識別し、ブレークダウン・ストラクチャー、非常に重要です
      • そのようなスペルミスとシンボルエラーなど細部へのこだわり、
  • デバッギング
    • バグ分類
      • コンパイル時エラー:構文エラーコンパイルが失敗します
      • 実行時エラー:コンパイラのチェックではないが、クラッシュのプログラムエラーを発生させた(二つの概念の区別に注意してくださいは、コンパイル時と実行時)ランタイム
      • 論理エラーとセマンティックエラー:コンパイルと非常にスムーズに実行されますが、期待される結果を達成できませんでした
    • プログラミングのアドバイス
      • プログラミング=デバッグ:デバッグプログラムは徐々に所望の結果を達成するためになるまで
      • 常にすべての小さなステップの変更はすぐにデバッグを行い、正常に実行するために小規模なプログラムから起動します

定数、変数、および式

  • 定義、割り当て、初期化
    • 定義:メモリ領域を割り当てると、そのようなint型の時間として、それに名前を与えます。
    • 割付:例えば= 11時間のようなメモリ空間に格納された値、。
    • 初期化:int型の時間として定義+割当= 11。
  • 初期化は特殊変数定義文ではなく、割り当てです
  • 等号の左側の変数名に加えて、割り当てを表し、他の場合は取り出され、その値は、置換を表します。
  • 操作者(オペレータ)およびオペランド(オペランド)組成物による式(式)
  • 代入文は、の表現であります
  • オペレータは、このようなデフォルトの優先順位計算の必要性の括弧(カッコ)によって望ましくないと、優先順位(優先順位)を持っています
  • C言語提供の結果は、オペレータが等号の左辺の値が与えられているに等しいです
  • 定数は、変数に割り当てることができ、変数であってもよいし、オペレータが一緒になって式を形成します
  • 単一の定数または変数組成物の最も単純な表現
  • 任意の式は、式を追加することができ、値を有し;米国特許式文を構成します

シンプルな機能

  • 罪の機能(関数)、罪がある(PI / 2)は、π/ 2は、パラメータ(引数)で、関数呼び出し(関数呼び出し)であります
  • 関数呼び出しSIN(PI / 2)は、関数呼び出し演算子によって表現され()と2つのオペランド、式(戻り値)の関数値の戻り値
  • C言語の関数は副作用の概念上のそれと数学関数の基本的な違いである(副作用)を有することができ、
  • 式A = B、戻り値が変更された値、副作用の値であります
  • 我々はサイド機能の効果はなく、printfなどの戻り値、()を懸念している多くの場合、戻り値ではなく、印刷よりも、実際に印刷された文字の数です
  • 完全に機能するために利用さ副作用は、戻り値の空のように定義することができます
  • 関数プロトタイプ(試作品):関数名やパラメータの型+ +戻り値の型の数
  • 使用後の関数の最初の文
  • カラムは、同じ変数の型ではなく、そのようなボイドprint_time(int型の時、分)としての機能パラメータの定義で変数を定義することができるとき、{}、間違った言葉遣い
  • 関数で定義された変数に対応するパラメータ(パラメータ)は、送信パラメータのプロセスへの関数呼び出しの対応を初期化するために、パラメータ、変数および引数(引数)の値によって定義されます
  • 関数は、インターフェイス(Interface)を提供し、呼び出し側の関数は、インタフェースが一貫していなければならないという前提を使用して、このインタフェースを使用することです
  • 関数のパラメータの受け渡しの代わりにグローバル変数を使用することはできません
  • グローバル変数は、定数式で初期化することができ、ローカル変数は、式のいずれのタイプで初期化することができます
  • 合法的であり、二重PI = ACOS(; C言語は、コンパイルされたオブジェクトコードに格納されたグローバル変数の初期値を所定のコンパイルされたとき、そのようなグローバル変数は= 3.14 + 0.0016文PI二重pIを初期化と、アウト計算することができます。 -1.0);それは正当ではありません
  • グローバル変数は初期化時に定義されていない場合、初期値は0(または「\ 0」または「0.0」、等)
  • ローカル変数が定義に初期化されていない、不確実性の初期値は、最初に使用する前に、ローカル変数を割り当てる必要があります
  • 収納スペースのローカル変数は、各関数呼び出し、解放関数リターンを割り当てられます

支店声明

  • ローカル変数のストレージスペースは、各エントリステートメントブロック、終了時に解放ステートメントのブロックに割り当てられています
  • 関数の本体内の文、変数パラメータの関数へ:ステップの関数としてのパッケージの声明
  • 他に必ず最寄りの1つがそのトップペア
  • グローバル変数に似定数式、でなければならないとケースの後ろに、あなたは、コンパイル時に値を計算する必要があります

機能の深い理解

  • 同等の関数の戻り値を定義し、関数の種類が同じ値一時変数を返し、戻り発現を初期化するために後者を使用
  • 戻り値は左辺値ではありません、あなたはそれに割り当てることができません
  • return文で関数を作成する場合、すべてのコードパス(コードパス)ことを確認するように注意してください、任意の条件下では到達不可能なコードはデッドコードと呼ばれます
  • インクリメンタル開発(インクリメンタル):できるだけ再利用(リユース)、以前のように書かれたコード、重複したコードを書くことは避けてください。パッケージには、再利用にあり

ループ

  • 再帰サイクルの二つの方法の間の差:再帰的に再帰関係によって(例えば、!N = N *(N-1))、式ループが展開され(例えば、N = N *(N-1)*(N-2! )... 3 * 2 * 1)。拡張式理解しやすいが、式が複雑すぎる場合は、さらに多くの直感的な再帰を展開することはできません
  • 再帰は、プロセス全体で割り当てられ、多くの変数を解放するが、すべての変数が唯一の初期化時に割り当てられている、そこに任意の変数の変化が発生したのは値がなく、サイクルがそれぞれの目標を達成するために、いくつかの変数を割り当てることによって繰り返されます
  • 再帰関数と呼ばれるプログラミングのアイデア(関数プログラミング)は、アイデアは、命令型プログラミングサイクル(命令型プログラミング)と呼ばれます
  • 再帰的な説明(宣言)を行う、(命令型)を実行する方法ステップによって、特定のサイクルステップをどう説明
  • 関数型プログラミング「機能は」、数学関数の概念に似ている変更の数が可変することが不可欠な方法は、このようなスレッドセーフなコードへの影響などの問題を引き起こすことができ、無副作用であり、それは「一貫性」のようにする必要があります複数の割り当て
  • 文はwhile文の後にセミコロンを追加しながら/やります
  • ++ I:パスパラメータ、戻り値(パラメータ1)、副作用:変数iの値が+1
  • I ++:パスパラメータ、戻り値(パラメータ)、副作用:変数iの値を+1
  • 後藤:無条件ジャンプ、ラベルへのジャンプは、同じ機能でもできますが、中に別の関数にジャンプすることはできません
  • ハンドル誤差関数の最後には、どこにでもエラー条件があったが、すぐに処理した後、最後に関数リターンをジャンプすることができるという機能だけのためのgoto文

構造

  • データ抽象化:変更のままにした場合、「共通の因子を抽出」、AB + AC =(B + C)と同様に、2つの要因が長い因子を変更する権利のように、改変されるべきです
  • このようなシステムの任意の組み合わせは、システムの複雑さと抽象が制御可能であるように、唯一の特定のレベルに制限変更複雑になる可能性があり、システム全体に影響を与えないであろう
  • コンピュータサイエンスのすべての問題は、間接の別のレベル(抽象化)することで解決することができます - バトラー・ランプソン
  • 抽象層構造の記憶フォーマットと上部complex_struct複素演算機能を示す離間複数を格納することによって
  • 列挙型:構造は、列挙coordinate_type {長方形、POLAR}として入力の種類を、受信を可能にする、構造体complex_struct {列挙coordinate_type T、ダブルA、B;};、データタイプ識別子を定義することによって、そのようなデカルトおよび極性座標データは、構造体のcomplex_structに適合させることができます

配列

  • アレイ(配列)は、複雑なデータ型、要素(エレメント)は、組成物の同じタイプのシリーズであります
  • 使用の配列の添字範囲が配列の長さを超えることができない、Cコンパイラは、配列境界のエラーをチェックしません
  • 異なる構造のアレイ:アレイは、互いになく、パラメータまたは戻り値の関数として割り当てることができません
  • 配列名を使用する場合右辺、自動的に配列の最初の要素を指すポインタに変換されません
  • 乱数を取得するために、C標準ライブラリを使用すると、実際に擬似乱数(擬似ランダム)であるが、非常にランダムに見え、その結果は、各実行のために同じです
  • srand関数(時間(NULL))として、シードとして他の方法の不確定数を取得した後、これに基づいて擬似乱数を生成し;(秒数1970年1月1日夜12時〇〇分00秒現在時刻のドラマ)
  • あなたが特定の範囲内で利用可能なランダムプロセス%の数を定義する場合、疑似乱数、ヘッダファイルstdlib.hを生成する)(RANDを使用して、戻り値は0とRAND_MAXの間の整数であり、RAND_MAXは、ヘッダファイルに定義された定数であり、 INT X =ランド(10%);(0~9乱数)
  • (抽象同様に、大きな局所的変化の広がり範囲を避けるために)(ハードコード)、ハード回避する前処理段階プロセスを定義

  • 文字列配列の要素として見ることができることは文字で、文字の末尾に「\ 0」は、文字列の終わりを示します。文字列は、読み取り専用で、変更することはできませんされて
  • 使用権値をやって、自動的に最初の要素を指し示すポインタに変換
  • 初期化文字列は、配列の長さを指定し、コンパイラが自動的に計算させてもよい場合
  • データ駆動型プログラミング(データ駆動型プログラミング):制御プロセスおよびアルゴリズムはまだ続く、最も重要なことは、情報を整理するために適切なデータ構造を選択することで、プログラミング、長い正しいデータ構造が選択されると、コードは自然を理解し、保守が容易です

コーディングスタイル

  • コードは、ポスターに書き込みをするだけでなく、道、それを実行するためにマシンを使用する主な理由です
  • LinuxのカーネルCodingStyle
    • 文のブロックをインデントで階層構造を反映(タブ)
    • /もしそうしながら、他のブロックではなく、別の行の、スペースで区切られたキーワードで記述されるべきである声明、}と{ステートメントブロックを取ることができるため
    • 別々の行に定義された関数}と{
    • スイッチとケース内のステートメントのブロック、デフォルトの整列書き込み
    • 離間段落間に空白行によって各論理コード
    • パケットは、相関によると、関数は空行で区切ら
  • 注記
    • ファイル名、作成者、バージョン履歴:ソースファイルノートの全体のトップ
    • NOTE機能:関数の機能、パラメータ、戻り値、エラーコード
    • ステートメント注:文の側に書かれました
    • コードショート注:右コード間の書き込み、およびコードは、少なくとも、ソースファイルの全ては、好ましくは、垂直に正しい注釈を整列するスペースで区切ら
    • 内のコードではなく、それを行う方法よりも、何ができるかの可能な、唯一のショー、わずかとしての機能の注意事項(限り、コードは明らかなように、どのように行うには、そうでない場合は、コードの可読性が悪く、明らかです)
    • コメントに必要な複雑な構造、マクロ定義と変数定義
  • 変数
    • クラリティ、我々はすべて理解しやすい言葉や略語を完了することができます
    • 変数、すべて小文字を使用して、関数型は定数(マクロや列挙を)下線すべて大文字の下線付き
    • 慎重にハンガリー語の表記はなく、ピンイン
  • 機能
    • 機能で一つのことを行います
    • 4つ以下層の内部機能インデントレベル
    • あまりにも長い関数を記述しないでください。
    • 実行機能は、アクションを実行することで、関数名は通常、動詞が含まれている必要があります
    • あまりにも多くはないローカル変数
  • インデントツール:コードは、特定のスタイルでフォーマットすることができます

GDB

  • 試運転の手順:現象の解析 - >間違った理由を想定しては - >新しい現象のテストの仮説を生成します
  • シングルステップ実行やトラッキング機能の呼び出し
  • ブレークポイント(ブレークポイント)
  • 観測点(ウォッチポイント):記憶部変更する場所を知りません
  • セグメントエラー:関数は、エラー発生即時セグメンテーションフォールト・セグメントを生成しない可能性がある場合、アクセス違反が発生したときに機能が戻ります

ソート、検索

  • 正確ループループ不変の決定方法
    • 第決意条件を実行する前に、ループ真であります
    • 「N-1最初のサイクル後の状態を決定するためには真である、」場合前提が確立され、最初の判定条件後のNサイクルが真のままであることを証明することができます
    • 条件を決定する全てのサイクルは、アルゴリズムが正しく、真実である後

スタックとキュー

  • データストレージは、アクセスメソッドがアルゴリズムを使用することができるかの問題を解決するために、問題を決定し、同時に私たちは、このアルゴリズムをサポートするためのアルゴリズム設計、適切なデータ構造を設計する必要があります
  • スタック - LIFO - 深さ優先探索(DFS) - 後戻り(バックトラック)
  • キュー - 先入れ先出し(FIFO) - 幅優先探索(BFS)

 

参照

http://docs.linuxtone.org/ebooks/C&CPP/c/

おすすめ

転載: www.cnblogs.com/cxc1357/p/12356222.html