C言語
AI作成コードで試行

/*==============================================================================
  sample_with_headers.c
  概要 : ヘッダーコメント付き関数サンプル(解析・可視化用)
==============================================================================*/

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

/*------------------------------------------------------------------------------
//  関数名 : void init_buffer(char *buf, size_t size)
//  概要   : バッファを初期化する
------------------------------------------------------------------------------*/
void init_buffer(char *buf, size_t size)
{
    size_t i;
    for (i = 0; i < size; i++) {
        buf[i] = '\0';
    }
}

/*------------------------------------------------------------------------------
//  関数名 : int add_value(int a, int b)
//  概要   : 2つの数値を加算して結果を返す
------------------------------------------------------------------------------*/
int add_value(int a, int b)
{
    return a + b;
}

/*------------------------------------------------------------------------------
//  関数名 : int sub_value(int a, int b)
//  概要   : 2つの数値を減算して結果を返す
------------------------------------------------------------------------------*/
int sub_value(int a, int b)
{
    return a - b;
}

/*------------------------------------------------------------------------------
//  関数名 : void print_message(const char *msg)
//  概要   : 指定されたメッセージを標準出力に表示する
------------------------------------------------------------------------------*/
void print_message(const char *msg)
{
    if (msg == NULL) {
        printf("message is null\n");
        return;
    }
    printf("%s\n", msg);
}

/*------------------------------------------------------------------------------
//  関数名 : int calc_average(int *values, int count)
//  概要   : 配列の平均値を計算する
------------------------------------------------------------------------------*/
int calc_average(int *values, int count)
{
    int i;
    int sum = 0;

    if (values == NULL || count <= 0) {
        return 0;
    }

    for (i = 0; i < count; i++) {
        sum += values[i];
    }
    return sum / count;
}

/*------------------------------------------------------------------------------
//  関数名 : int main(int argc, char *argv[])
//  概要   : サンプル処理のメイン関数
------------------------------------------------------------------------------*/
int main(int argc, char *argv[])
{
    char buffer[64];
    int nums[5] = { 10, 20, 30, 40, 50 };
    int avg;
    int result;

    init_buffer(buffer, sizeof(buffer));
    strcpy(buffer, "C sample with header comments");

    print_message(buffer);

    result = add_value(10, 5);
    printf("add result = %d\n", result);

    result = sub_value(10, 5);
    printf("sub result = %d\n", result);

    avg = calc_average(nums, 5);
    printf("average = %d\n", avg);

    return 0;
}

関数番号 1:init_buffer【バッファを初期化する】
%%{init: {'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'#000000', 'primaryBorderColor':'#000000', 'lineColor':'#808080', 'textColor':'#6A7FABCC', 'fontSize':'14px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%% graph TD; classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px; linkStyle default stroke:#808080,stroke-width:2px; %%データ設定 1(["14行目 関数 init_buffer の開始: void init_buffer(char *buf, size_t size) &#39;L14"]) 3[/"17行目 カウンタループ: for (i = 0; i &lt; size; i++) &#39;L19"\]:::clrPattern2 4["18行目 buf[i] に &#39;&amp;yen;0&#39; を代入する: buf[i] = &#39;&amp;yen;0&#39;; &#39;L21"] 5(["19行目 繰返文終了_1 &#39;L22"]):::clrPattern7 6(["20行目 関数終了_1 &#39;L23"]) %%ルート設定 1-->3 3-->|繰返し文継続へ|4 3-->|繰返文終了後の処理へ|6 4-->5 5-->|繰返し文開始へ|3
関数番号 2:add_value【2つの数値を加算して結果を返す】
%%{init: {'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'#000000', 'primaryBorderColor':'#000000', 'lineColor':'#808080', 'textColor':'#6A7FABCC', 'fontSize':'14px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%% graph TD; classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px; linkStyle default stroke:#808080,stroke-width:2px; %%データ設定 7(["26行目 関数 add_value の開始: int add_value(int a, int b) &#39;L29"]) 8["28行目 計算結果または関数呼出結果を返して関数を終了する: return a + b; &#39;L33"] 9(["29行目 関数終了_2 &#39;L34"]) %%ルート設定 7-->8 8-->9
関数番号 3:sub_value【2つの数値を減算して結果を返す】
%%{init: {'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'#000000', 'primaryBorderColor':'#000000', 'lineColor':'#808080', 'textColor':'#6A7FABCC', 'fontSize':'14px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%% graph TD; classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px; linkStyle default stroke:#808080,stroke-width:2px; %%データ設定 10(["35行目 関数 sub_value の開始: int sub_value(int a, int b) &#39;L40"]) 11["37行目 計算結果または関数呼出結果を返して関数を終了する: return a - b; &#39;L44"] 12(["38行目 関数終了_3 &#39;L45"]) %%ルート設定 10-->11 11-->12
関数番号 4:print_message【指定されたメッセージを標準出力に表示する】
%%{init: {'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'#000000', 'primaryBorderColor':'#000000', 'lineColor':'#808080', 'textColor':'#6A7FABCC', 'fontSize':'14px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%% graph TD; classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px; linkStyle default stroke:#808080,stroke-width:2px; %%データ設定 13(["44行目 関数 print_message の開始: void print_message(const char *msg) &#39;L51"]) 14{"46行目 条件文:if (msg 等しいか NU LL) &#39;L54"}:::clrPattern1 16(["46行目 (解析用)満たす場合 &#39;L56"]):::clrPattern7 17[/"47行目 標準出力に文字列を出力する: printf(“message is null&amp;yen;n“); &#39;L57"/]:::clrPattern6 18["48行目 処理を終了する: return; &#39;L58"] 19(["行目 (補完行)そうでない場合 &#39;L59"]):::clrPattern7 20(["49行目 条件文終了_1 &#39;L60"]):::clrPattern7 21[/"50行目 標準出力に文字列を出力する: printf(“%s&amp;yen;n“, msg); &#39;L61"/]:::clrPattern6 22(["51行目 関数終了_4 &#39;L62"]) %%ルート設定 13-->14 14-->|真の場合|16 14-->|偽の場合|19 16-->17 17-->18 18-->20 19-->20 20-->21 21-->22
関数番号 5:calc_average【配列の平均値を計算する】
%%{init: {'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'#000000', 'primaryBorderColor':'#000000', 'lineColor':'#808080', 'textColor':'#6A7FABCC', 'fontSize':'14px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%% graph TD; classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px; linkStyle default stroke:#808080,stroke-width:2px; %%データ設定 23(["57行目 関数 calc_average の開始: int calc_average(int *values, int count) &#39;L68"]) 25["60行目 int型の sum を定義して 初期値 0 を設定する: int sum = 0; &#39;L73"] 26{"62行目 条件文:if (values 等しいか NULL または count 以下か 0) &# 39;L75"}:::clrPattern1 28(["62行目 (解析用)満たす場合 &#39;L77"]):::clrPattern7 29["63行目 定数値を返して関数を終了する: return 0; &#39;L78"] 30(["行目 (補完行)そうでない場合 &#39;L79"]):::clrPattern7 31(["64行目 条件文終了_2 &#39;L80"]):::clrPattern7 32[/"66行目 カウンタループ: for (i = 0; i &lt; count; i++) &#39;L82"\]:::clrPattern2 33["67行目 sum + に values[i] を代入する: sum 加算して代入 values[i]; &#39;L84"] 34(["68行目 繰返文終了_2 &#39;L85"]):::clrPattern7 35["69行目 計算結果または関数呼出結果を返して関数を終了する: return sum / count; &#39;L86"] 36(["70行目 関数終了_5 &#39;L87"]) %%ルート設定 23-->25 25-->26 26-->|真の場合|28 26-->|偽の場合|30 28-->29 29-->31 30-->31 31-->32 32-->|繰返し文継続へ|33 32-->|繰返文終了後の処理へ|35 33-->34 34-->|繰返し文開始へ|32 35-->36
関数番号 6:main
%%{init: {'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'#000000', 'primaryBorderColor':'#000000', 'lineColor':'#808080', 'textColor':'#6A7FABCC', 'fontSize':'14px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%% graph TD; classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px; linkStyle default stroke:#808080,stroke-width:2px; %%データ設定 37(["76行目 関数 main の開始: int main(int argc, char *argv[]) &#39;L93"]) 39["79行目 int型の nums[5] を定義して 初期値 を設定する: int nums[5] = &#39;L98"] 42[["83行目 関数 init_buffer を呼び出す: init_buffer(buffer, sizeof(buffer));: ユーザー定義関数呼出含む &#39;L106"]]:::clrPattern3 43["84行目 文字列をコピーする(危険版): strcpy(buffer, “C sample with header comments“); &#39;L107"] 44[["86行目 関数 print_message を呼び出す: print_message(buffer);: ユーザー定義関数呼出含む &#39;L109"]]:::clrPattern3 45["88行目 result に add_value(10, 5) を代入する: result = add_value(10, 5);: ユーザー定義関数呼出含む &#39;L111"] 46[/"89行目 標準出力に文字列を出力する: printf(“add result = %d&amp;yen;n“, result); &#39;L112"/]:::clrPattern6 47["91行目 result に sub_value(10, 5) を代入する: result = sub_value(10, 5);: ユーザー定義関数呼出含む &#39;L114"] 48[/"92行目 標準出力に文字列を出力する: printf(“sub result = %d&amp;yen;n“, result); &#39;L115"/]:::clrPattern6 49["94行目 avg に calc_average(nums, 5) を代入する: avg = calc_average(nums, 5);: ユーザー定義関数呼出含む &#39;L117"] 50[/"95行目 標準出力に文字列を出力する: printf(“average = %d&amp;yen;n“, avg); &#39;L118"/]:::clrPattern6 51["97行目 定数値を返して関数を終了する: return 0; &#39;L120"] 52(["98行目 関数終了_6 &#39;L121"]) %%ルート設定 37-->39 39-->42 42-->43 43-->44 44-->45 45-->46 46-->47 47-->48 48-->49 49-->50 50-->51 51-->52