スポンサーリンク

プログラム開発をする過程で、デバッグをすると思います。
今どのような値が入ってるかを確かめたり、開発中には同じパラメータを使うため、コードの中にハードコードをしておいたり、といったことを多々やります。
デバッグするために printf() を大量に埋め込んだりして、でも、リリースするときには、それらを消したり、コメントアウトしたり、といった作業が必要になったりします。
また再び、開発を再開したときに、同じようなprintf()を埋め込んでいったりして、結構面倒なことをしてるケースもあります。
printf()デバッグをするなといえば、それまでですが、人それぞれ、やり方がありますし、場合によってはそれでよいと思います。

そんなときに、プリプロセッサディレクティブ(ifかifdef)を利用します。
しかしながら、ifdefで制御する場合、ソースコードが読みにくくなるデメリットがあります。

ebug.c
サンプルコード
#include <stdio.h>
#include <stdlib.h>

int
main (int argc, char *argv[])
{
	int	i;
	char	*p;

#if EBUG
	printf ("[DEBUG] argc=%d\n", argc);
#endif

#ifdef EBUG
	p = "localhost";
#else
	if (argc != 2) {
		printf ("Usage: a.out hostname\n");
		exit (EXIT_FAILURE);
	}
	p = argv[1];
#endif

	for ( i = 0; i < 10; ++i) {
#ifdef EBUG
		printf ("[DEBUG] i=%d\n", i);
#endif
		printf("%s\n", p);
	}

	exit (EXIT_SUCCESS);
}
コンパイル

gcc -DEBUG ebug.c


実行結果

[DEBUG] argc=1
[DEBUG] i=0
localhost
[DEBUG] i=1
localhost
[DEBUG] i=2
localhost
[DEBUG] i=3
localhost
[DEBUG] i=4
localhost
[DEBUG] i=5
localhost
[DEBUG] i=6
localhost
[DEBUG] i=7
localhost
[DEBUG] i=8
localhost
[DEBUG] i=9
localhost

ifdefを無効にした場合

% gcc ebug.c
% ./a.out
Usage: a.out hostname
1で終了しました
% ./a.out foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo



関連
[2008-06-23-1] C言語プログラミング マクロで可変引数を扱う方法とデバッグprintf
[2008-06-23-2] C言語プログラミング ifdefでデバッグする方法
[2008-06-17-1] C言語 可変引数 va_arg
参照しているページ (サイト内): [2008-06-23-2] [2008-06-23-1] [2008-06-17-1]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー