# 西川-本のテスト

aiueo

\+ aiueo

# New Page

aiueo

- aiueo

1. aioue
2. huid

# aiueo

## aejo

---

**a**

> aoiuehpihps '

`s`

# Doxygenで生成

> ソースコードから自動的にドキュメントを生成するツール。

- C++、C言語、Java、C#など

## ⚠️下記のzennのサイトを参考にすべし。

## DoxygenGUI frontendでグラフィカルに設定できるよ

[就活には自動生成ドキュメントが効くらしい](https://zenn.dev/kd_gamegikenblg/articles/118e85d099c3e6)

[](http://www.ee.t-kougei.ac.jp/tuushin/lecture/technicalWriting/doxygenOperation.html)

### 設定ファイルを生成

---

```notion
doxygen -g

```

カレントディレクトリに、Doxyfileという名前で出力される。

### 設定ファイルを編集

---

[Doxygen + Graphviz を使って呼び出し依存関係図を生成する - Posts - Seaside Laboratory](https://www.notion.so/Doxygen-Graphviz-Posts-Seaside-Laboratory-1e8839501633813fbce3fb452a711f87?pvs=21)

- テキストエディタでDoxyfile編集をする。

<table id="bkmrk-%E9%A0%85%E7%9B%AE%E5%90%8D-%E6%84%8F%E5%91%B3-%E8%A8%AD%E5%AE%9A%E4%BE%8B-project_n"><thead><tr><th>**項目名**</th><th>**意味**</th><th>**設定例**</th></tr></thead><tbody><tr><td>PROJECT\_NAME</td><td>プロジェクト名</td><td>"Knuckle Fighter Maniax"</td></tr><tr><td>OUTPUT\_DIRECTORY</td><td>ドキュメントの出力先</td><td>"C:\\My Program\\doxygen"</td></tr><tr><td>OUTPUT\_LANGUAGE</td><td>出力言語</td><td>Japanese</td></tr><tr><td>FULL\_PATH\_NAMES</td><td>出力ファイル名をフルパスにする</td><td>NO</td></tr><tr><td>OPTIMIZE\_OUTPUT\_FOR\_C</td><td>C 言語に最適化</td><td>YES</td></tr><tr><td>EXTRACT\_ALL</td><td>全てを展開</td><td>YES</td></tr><tr><td>INPUT</td><td>ソースファイルのパス</td><td>"C:\\My Program"</td></tr><tr><td>INPUT\_ENCODING</td><td>ソースファイルの文字コード</td><td>SHIFT\_JIS</td></tr><tr><td>FILE\_PATTERNS</td><td>対象とするファイル</td><td>\*.cpp \*.h</td></tr><tr><td>RECURSIVE</td><td>サブディレクトリーも含める</td><td>YES</td></tr><tr><td>VERBATIM\_HEADERS</td><td>ドキュメントにヘッダーを引用</td><td>NO</td></tr><tr><td>GENERATE\_TREEVIEW</td><td>ツリービューの利用</td><td>YES</td></tr><tr><td>ENUM\_VALUES\_PER\_LINE</td><td>列挙型を行に並べる数</td><td>1</td></tr><tr><td>GENERATE\_LATEX</td><td>LATEX 版の出力</td><td>NO</td></tr></tbody></table>

### ドキュメント作成

---

- 設定ファイルのあるディレクトリで以下のコマンドを実行。

```notion
doxygen

```

- 出力先に「html」という名前のフォルダが自動で作成されるので、その中にあるindex.htmlを開く。

<aside id="bkmrk-%E2%9A%A0%EF%B8%8F-%2F%2Fgraphiviz%E3%82%82%E4%BD%BF%E3%81%A3%E3%81%9F%E6%96%B9%E6%B3%95">⚠️ //Graphivizも使った方法はのページに

</aside>

# Doxygenでクラス図の表示

[【Windows】Doxygenをインストールして使う | The modern stone age.](https://blog.cercopes-z.com/doxygen-diagrams-auto/)上記を参考に。

## ↓これを出力先とかいい感じに変えて使って

### Doxyfileの設定

<table id="bkmrk-%E9%A0%85%E7%9B%AE%E5%90%8D-%E6%84%8F%E5%91%B3-%E8%A8%AD%E5%AE%9A%E4%BE%8B-project_n"><thead><tr><th>項目名</th><th>意味</th><th>設定例</th></tr></thead><tbody><tr><td>PROJECT\_NAME</td><td>プロジェクト名</td><td>"Knuckle Fighter Maniax"</td></tr><tr><td>OUTPUT\_DIRECTORY</td><td>ドキュメントの出力先</td><td>"C:\\My Program\\doxygen"</td></tr><tr><td>OUTPUT\_LANGUAGE</td><td>出力言語</td><td>Japanese</td></tr><tr><td>FULL\_PATH\_NAMES</td><td>出力ファイル名をフルパスにする</td><td>NO</td></tr><tr><td>OPTIMIZE\_OUTPUT\_FOR\_C</td><td>C 言語に最適化</td><td>YES</td></tr><tr><td>EXTRACT\_ALL</td><td>全てを展開</td><td>YES</td></tr><tr><td>INPUT</td><td>ソースファイルのパス</td><td>"C:\\My Program"</td></tr><tr><td>INPUT\_ENCODING</td><td>ソースファイルの文字コード</td><td>SHIFT\_JIS</td></tr><tr><td>FILE\_PATTERNS</td><td>対象とするファイル</td><td>\*.cpp \*.h</td></tr><tr><td>RECURSIVE</td><td>サブディレクトリーも含める</td><td>YES</td></tr><tr><td>VERBATIM\_HEADERS</td><td>ドキュメントにヘッダーを引用</td><td>NO</td></tr><tr><td>GENERATE\_TREEVIEW</td><td>ツリービューの利用</td><td>YES</td></tr><tr><td>ENUM\_VALUES\_PER\_LINE</td><td>列挙型を行に並べる数</td><td>1</td></tr><tr><td>GENERATE\_LATEX</td><td>LATEX 版の出力</td><td>NO</td></tr></tbody></table>

### Graphviz関係の設定

<table id="bkmrk-%E9%A0%85%E7%9B%AE%E5%90%8D-%E6%84%8F%E5%91%B3-%E8%A8%AD%E5%AE%9A%E4%BE%8B-have_dot-"><thead><tr><th>項目名</th><th>意味</th><th>設定例</th></tr></thead><tbody><tr><td>HAVE\_DOT</td><td>dot ツールの有無</td><td>YES</td></tr><tr><td>DOT\_NUM\_THREADS</td><td>グラフ生成時のスレッド数</td><td>4</td></tr><tr><td>UML\_LOOK</td><td>継承図を UML 風にする</td><td>YES</td></tr><tr><td>CALL\_GRAPH</td><td>呼び出し依存関係図の生成</td><td>YES</td></tr><tr><td>CALLER\_GRAPH</td><td>呼び出し元依存関係図の生成</td><td>YES</td></tr><tr><td>DOT\_PATH</td><td>dot ツールの位置</td><td>"C:\\Program Files\\Graphviz\\bin”</td></tr><tr><td>設定項目</td><td>説明</td><td></td></tr><tr><td>---</td><td>---</td><td></td></tr><tr><td>OUTPUT\_DIRECTORY</td><td>ドキュメントの出力ディレクトリ。</td><td></td></tr><tr><td>OUTPUT\_LANGUAGE</td><td>ドキュメントの出力言語。</td><td></td></tr><tr><td>OPTIMIZE\_OUTPUT\_JAVA</td><td>Java向けに出力を最適化するかどうか。</td><td></td></tr><tr><td>EXTRACT\_ALL</td><td>全てのメンバーを抽出するかどうか。</td><td></td></tr><tr><td>EXTRACT\_PRIVATE</td><td>プライベートメンバーを抽出するかどうか。</td><td></td></tr><tr><td>EXTRACT\_PRIV\_VIRTUAL</td><td>プライベートな仮想メンバーを抽出するかどうか。</td><td></td></tr><tr><td>EXTRACT\_PACKAGE</td><td>パッケージメンバーを抽出するかどうか。</td><td></td></tr><tr><td>EXTRACT\_STATIC</td><td>スタティックメンバーを抽出するかどうか。</td><td></td></tr><tr><td>EXTRACT\_LOCAL\_CLASSES</td><td>ローカルクラスを抽出するかどうか。</td><td></td></tr><tr><td>INPUT</td><td>ソースファイルの入力ディレクトリ。</td><td></td></tr><tr><td>RECURSIVE</td><td>入力ディレクトリを再帰的に検索するかどうか。</td><td></td></tr><tr><td>REFERENCED\_BY\_RELATION</td><td>被参照関係を生成するかどうか。</td><td></td></tr><tr><td>REFERENCES\_RELATION</td><td>参照関係を生成するかどうか。</td><td></td></tr><tr><td>ALPHABETICAL\_INDEX</td><td>アルファベット順の索引を生成するかどうか。</td><td></td></tr><tr><td>GENERATE\_LATEX</td><td>LaTeX形式のドキュメントを生成するかどうか。</td><td></td></tr><tr><td>UML\_LOOK</td><td>UMLスタイルの図を生成するかどうか。</td><td></td></tr><tr><td>UML\_LIMIT\_NUM\_FIELDS</td><td>UML図に表示するフィールドの最大数。</td><td></td></tr><tr><td>TEMPLATE\_RELATIONS</td><td>テンプレートの関係を表示するかどうか。</td><td></td></tr><tr><td>CALL\_GRAPH</td><td>呼び出しグラフを生成するかどうか。</td><td></td></tr><tr><td>CALLER\_GRAPH</td><td>呼び出し元グラフを生成するかどうか。</td><td></td></tr><tr><td>DOT\_IMAGE\_FORMAT</td><td>DOTグラフの出力フォーマット。</td><td></td></tr><tr><td>DOT\_GRAPH\_MAX\_NODES</td><td>DOTグラフに表示する最大ノード数。</td><td></td></tr></tbody></table>

# 文字コード概要

### C言語の場合

```c
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main()
{
    /* 2つの文字列を結合する：C言語*/
    const char* strA = "Hello, ";
    const char* strB = "world.";

    /* 領域確保 */
    char* strC = (char*)malloc(strlen(strA) + strlen(strB) + 1);

    strcpy(strC, strA); /* strAをstrCにコピー */
    strcat(strC, strB); /* strBをstrCに結合 */
    puts(strC);

    if (strcmp(strC, "Hello, world.") == 0) /* 比較 */
    {
        puts("ok.");
    }
    free(strC); /* 領域解放 */
}

```

### C++の場合

```cpp
#include <iostream>
#include <string>

int main()
{
    // 2つの文字列を結合する：C++
    std::string strA = "Hello, ";
    std::string strB = "world.";

    std::string strC = strA + strB; // 結合
    std::cout << strC << std::endl;

    if (strC == "Hello, world.") // 比較
    {
        std::cout << "ok." << std::endl;
    }
    // 確保された領域は自動的に解放される
}


```

- std::stringクラスの実体は`std::basic_string<charT , traits,Allocator>` というテンプレートクラス

## 文字コード

---

- 文字は数値、文字列は数値の並びとして扱われる。
- 入出力の際に文字と数字との対応表を文字コードという

## 昔の文字コード

---

> ASCIIコード

- 7bit(0～127 : 0x00～0x7F)で表現できる数値のそれぞれに文字を割り当てたもの
- 昔は英数字、数字、いくつかの記号、改行やタブなどの制御記号しか扱っていなかった

## 今流行りの拡張

---

### MBCS : Multi Byte Character Set

- 複数のcharの組に1文字を割り当てる。 
    - 半角文字は1バイトだが、全角文字は2バイトとか3バイトとか
- 以前から使ってきた文字列(char\*,char\[\])をそのまま使えるが、char配列の文字列の長さと文字列の長さが一致しなくなる。

[C 日本語文字列 - yonewiki](https://wiki.yo-net.jp/index.php?title=C_%E6%97%A5%E6%9C%AC%E8%AA%9E%E6%96%87%E5%AD%97%E5%88%97)

- UTF-8、Shift-JISなど。
- **std::stringはMBCSを扱っている。**

### WSC : Wide Character Set

[マルチバイト文字とワイド文字](https://learn.microsoft.com/ja-jp/cpp/c-language/multibyte-and-wide-characters?view=msvc-170)

- charより大きなサイズの型「wchar\_t」を用意してwchar\_tの列で文字列を表す
- **ワイド文字列**とも呼ばれる
- 常に16ビットなので、英数字しか使わない場合はMBCSより文字列を確保するのに必要な領域が増える
- Unicode(UTF-16)
- **std::wstringがWSCを扱っている**

# DrawTextとDrawTextLayoutの違い

[テキストを描画する方法 - Win32 apps](https://learn.microsoft.com/ja-jp/windows/win32/Direct2D/how-to--draw-text)

### DrawText

- 簡単なテキスト描画向け
- テキスト全体に対して同じ書式設定を適用する場合に使われる

### DrawTextFormat

- 複雑なレイアウトのテキスト描画向け
- テキストとそのレイアウトを一緒に保持するため、テキストの内容、書式が変わらない場合に有効
- テキストを変える際は解放→再生成しないといけない