Loose-Info.com
Last Update 2024/01/11
TOP - 各種テスト - C言語 - 関数

テスト概要

関数定義
関数へのポインタ
関数へのポインタの使用例


関数定義


sample.c
#include <stdio.h> #include <stdlib.h> /* 戻り値型がvoid、引数無しの関数定義 */ void func1(void) { printf("func1\n"); } /* 戻り値型がint、引数無しの関数定義 */ int func2(void) { printf("func2\n"); return 0; } /* 内部リンケージを持ち、戻り値型がintでint型引数を持つ関数定義 */ static int func3(int x, int y) { printf("func3\n"); return x + y; } /* K&R式関数定義 */ int func4(x, y) int x, y; { printf("func4\n"); return x + y; } int main(void) { func1(); printf("func2() = %d\n", func2()); printf("func3() = %d\n", func3(1, 2)); printf("func4() = %d\n", func4(2, 3)); return EXIT_SUCCESS; }

実行結果
$ gcc -Wall sample.c $ ./a.out func1 func2 func2() = 0 func3 func3() = 3 func4 func4() = 5

関数へのポインタ


sample.c
#include <stdio.h> void func1(int n) { printf("func1 --- n = %d\n", n); } int func2(int n) { printf("func2 --- n = %d\n", n); return n; } int func3(int n1, int n2) { printf("func3 --- n1 + n2 = %d\n", n1 + n2); return n1 + n2; } int main() { // 関数ポインタの宣言 void (*pf1)(int); int (*pf2)(int); int (*pf3)(int, int); pf1 = &func1; pf1(3); pf2 = &func2; printf("%d\n", pf2(5)); pf3 = &func3; printf("%d\n", pf3(7, 9)); }

実行結果
$ gcc -Wall sample.c $ ./a.out func1 --- n = 3 func2 --- n = 5 5 func3 --- n1 + n2 = 16 16

関数へのポインタの使用例


sample.c
#include <stdio.h> #include <stdlib.h> /* 引数が1個の場合に実行 */ void func1(int argc, char *argv[]) { printf("引数個数 : %d\n", argc - 1); printf("引数 : %s\n", argv[1]); } /* 引数が2個以上の場合に実行 */ void func2(int argc, char *argv[]) { for (int i=0; i<argc; i++) { printf("argv[%d] = %s\n", i, argv[i]); } } int main(int argc, char *argv[]) { /* 関数へのポインタ */ void (*select_func)(int, char**); if (argc == 2) { /* 引数が1個 */ select_func = &func1; } else if (argc > 2) { /* 引数が2個以上 */ select_func = &func2; } if (select_func != NULL) { /* 関数ポインタがNULL以外であればポインタが指定する関数を実行 */ select_func(argc, argv); } else { /* 関数ポインタがNULLの場合 */ printf("引数無し\n"); } return EXIT_SUCCESS; }

実行結果
$ gcc -Wall sample.c $ ./a.out 引数無し $ ./a.out 1 引数個数 : 1 引数 : 1 $ ./a.out 1 2 3 argv[0] = ./a.out argv[1] = 1 argv[2] = 2 argv[3] = 3

実行環境

GNU bash, version 5.1.16
GCC-12.2.0
GNU C Library 2.36
GNU Binutils 2.39


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。