1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

引数を空白区切りでコンソール画面に表示する関数

Last updated at Posted at 2020-03-24

タイトルの通り、可変長引数で渡された値を空白区切りで出力する関数です。
競技プログラミングのデバッグ時に欲しかったので作りました。

C++
#include <iostream>

#define MY_ATCODER_DEBUG //提出時はコメントアウトする
#ifdef MY_ATCODER_DEBUG
  #define DBG(...) debug_print(__VA_ARGS__)
#else
  #define DBG(...)
#endif

template<class... Args>
void debug_print(Args... args) {
	std::cout << std::endl;
}
template<class Head, class... Args>
void debug_print(Head head, Args... args) {
	std::cout << head << ' ';
	debug_print(args...);
}

※上記では、ソースコード内で「MY_ATCODER_DEBUG」マクロを定義していますが、
コンパイラオプションを使って定義すれば、提出時にコメントアウトせずに済みます。
VisualStudioでのプリプロセッサ定義の設定方法

##使い方

C++
using namespace std;
int main(){
	int    a = 20;
	double b = 2.5;
	string c = "文字列";

	DBG(a, b, c);
	return 0;
}
コンソール画面の出力
20 2.5 文字列 

複数の型を混合して引数に渡すことができます。

##参考URL
https://leico.github.io/TechnicalNote/Cpp/variadic-template
(実は、こちらのサイトの内容をデバッグ用に整えただけで、私自身は理解しきれていません。)
(もっと良いやり方があれば、教えて下さい。)

##編集履歴
2020/3/25(水)
指摘を基に、定数「DEBUG」を「MY_ATCODER_DEBUG」に改名。
また、コンパイラオプションを使ったプリプロセッサ定義を追記しました。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?