Last Update 2024/01/11
テスト概要
関数定義
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
GCC-12.2.0
GNU C Library 2.36
GNU Binutils 2.39
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。