Loose-Info.com
Last Update 2023/12/01
TOP - 各種テスト - C++ - 関数

概要

宣言
デフォルト引数
関数へのポインタ


宣言


sample.cpp
#include <iostream> #include <cstdarg> // 引数が無く引数が空である宣言 void func1(); // コンマ区切りによる引数宣言 void func2(int n1, int n2); // 識別子を省略したコンマ区切りによる引数宣言 void func3(int, int); // 可変個数引数関数を宣言 void func4(int narg, ...); int main() { func1(); func2(1, 2); func3(3, 4); func4(2, 5, 6); } void func1() { std::cout << "func1()" << std::endl; } void func2(int n1, int n2) { std::cout << "func2() " << n1 << " " << n2 << std::endl; } void func3(int n1, int n2) { std::cout << "func3() " << n1 << " " << n2 << std::endl; } void func4(int narg, ...) { va_list vl; va_start(vl, narg); for (int i=0; i<narg; i++) { std::cout << "func4() arg[" << i << "] = " << va_arg(vl, int) << std::endl; } va_end(vl); }

実行結果
$ gcc -Wall sample.cpp -lstdc++ $ ./a.out func1() func2() 1 2 func3() 3 4 func4() arg[0] = 5 func4() arg[1] = 6

デフォルト引数


sample.cpp
#include <iostream> // デフォルト引数の無い関数の宣言・定義 void func1(int n) { std::cout << "n = " << n << std::endl; } // デフォルト引数の有る関数の宣言 void func2(int = 2); // 識別子を伴うデフォルト引数の有る関数の宣言・定義 void func3(int n = 3) { std::cout << "n = " << n << std::endl; } // 識別子を伴うデフォルト引数の有る関数の宣言 void func4(int n = 4); // 複数のデフォルト引数の有る関数の宣言 void func5(int = 5, int = 6); int main() { std::cout << "func1(1) : "; func1(1); std::cout << "func2() : "; func2(); std::cout << "func3() : "; func3(); std::cout << "func4() : "; func4(); std::cout << "func5() : "; func5(); std::cout << "func5(1) : "; func5(1); std::cout << "func5(1, 1) : "; func5(1, 1); } void func2(int n) { std::cout << "n = " << n << std::endl; } void func4(int n) { std::cout << "n = " << n << std::endl; } void func5(int n1, int n2) { std::cout << "n1 = " << n1 << ", n2 = " << n2 << std::endl; }

実行結果
$ gcc -Wall sample.cpp -lstdc++ $ ./a.out func1(1) : n = 1 func2() : n = 2 func3() : n = 3 func4() : n = 4 func5() : n1 = 5, n2 = 6 func5(1) : n1 = 1, n2 = 6 <--- 対応する引数の無い引数のみデフォルト引数を使用 func5(1, 1) : n1 = 1, n2 = 1

関数へのポインタ


sample.cpp
#include <iostream> void func1(int n) { std::cout << "func1 --- n = " << n << std::endl; } int func2(int n) { std::cout << "func2 --- n = " << n << std::endl; return n; } int func3(int n1, int n2) { std::cout << "func3 --- n1 + n2 = " << (n1 + n2) << std::endl; return n1 + n2; } int main() { // 関数ポインタの宣言 void (*pf1)(int); int (*pf2)(int); int (*pf3)(int, int); pf1 = &func1; pf1(3); pf2 = &func2; std::cout << pf2(5) << std::endl; pf3 = &func3; std::cout << pf3(7, 9) << std::endl; }

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

実行環境

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


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

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