組込みシステムにおけるC言語の基本概念

関数とポインタの理解

関数の役割と種類

関数は特定の処理を再利用可能なコードブロックとして定義する仕組みです。コードの再利用性を高め、保守性を改善する目的で使用されます。

関数定義と呼び出しの基本

#include <stdio.h>

// 関数のプロトタイプ
void printBanner();

int main() {
    // 3回関数を呼び出す
    printBanner();
    printBanner();
    printBanner();
    
    return 0;
}

// 関数の実装
void printBanner() {
    printf("========================================\n");
    printf("  組込み開発におけるC言語の基本構造\n");
    printf("========================================\n");
    printf("関数の活用によりコードの再利用性が向上\n");
    printf("ポインタ操作はハードウェア制御の要\n");
    printf("----------------------------------------\n");
}

引数なし戻り値なし関数

最も基本的な関数形式です。特定の処理を繰り返し実行する用途に適します。

#include <stdio.h>

// 関数宣言
void calculateSum();

int main() {
    // 計算関数を複数回呼び出し
    calculateSum();
    calculateSum();
    
    return 0;
}

// 関数定義
void calculateSum() {
    int a = 5, b = 7;
    int result = a + b;
    printf("計算結果: %d\n", result);
}

引数あり戻り値なし関数

処理に必要なデータを外部から受け取る機能を備えた関数形式です。

#include <stdio.h>

// 関数プロトタイプ
void displayProduct(int num1, int num2);

int main() {
    // 関数呼び出し
    displayProduct(3, 4);
    displayProduct(5, 6);
    
    return 0;
}

// 関数実装
void displayProduct(int num1, int num2) {
    int product = num1 * num2;
    printf("乗算結果: %d × %d = %d\n", num1, num2, product);
}

変数のスコープとメモリ管理

  • ローカル変数:関数内部でのみ有効な変数
  • グローバル変数:プログラム全体で参照可能な変数
  • 静的変数:ファイル内でのみ保持される変数

ポインタの基本と応用

ポインタはメモリアドレスを保持する特殊な変数です。ハードウェア制御には不可欠な概念です。

ポインタの基本操作

#include <stdio.h>

int main() {
    int value = 42;
    int *ptr = &value;  // アドレス取得
    
    // 値の参照と変更
    printf("元の値: %d\n", *ptr);
    *ptr = 100;
    printf("変更後: %d\n", value);
    
    return 0;
}

関数間でのポインタ引数

#include <stdio.h>

// 関数プロトタイプ
void increment(int *num);

int main() {
    int count = 0;
    
    // ポインタ経由で値を操作
    increment(&count);
    increment(&count);
    
    printf("カウンタ値: %d\n", count);
    return 0;
}

// ポインタ引数を使用する関数
void increment(int *num) {
    if(num != NULL) {
        (*num)++;
    }
}

タグ: C言語 組込み開発 関数 ポインタ メモリ管理

5月15日 04:59 投稿