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