#2
by かずま » 5年前
assert_param を使っているところはどうなっていますか?
例えば、次のように、デバッグ中はパラメータのチェックをしてバグを検出し、
デバッグが完了したら、((void)0U) でチェックを外すようにしているのでは
ありませんか?
コード:
#include <stdio.h>
#include <stdlib.h>
#define DEBUG 1
#if defined(DEBUG)
#define assert_param(expr) \
((expr) || (printf("%d: [%s]\n", __LINE__, #expr), abort(), 0))
#else
#define assert_param(expr) ((void)0U)
#endif
int get(unsigned int n)
{
int tab[7] = { 31, 41, 59, 26, 57, 53, 23 };
assert_param(n < 7); // この条件を満たさないと中断
return tab[n];
}
int main(void)
{
int n;
while (scanf("%d", &n) == 1)
printf(" tab[%d] = %d\n", n, get(n));
}
このプログラムを実行して、3 と 7 を入力するとどうなりますか?
「わかりません」という答えでもかまいませんから、
この回答中の質問にはすべて答えてください。
assert_param を使っているところはどうなっていますか?
例えば、次のように、デバッグ中はパラメータのチェックをしてバグを検出し、
デバッグが完了したら、((void)0U) でチェックを外すようにしているのでは
ありませんか?
[code]
#include <stdio.h>
#include <stdlib.h>
#define DEBUG 1
#if defined(DEBUG)
#define assert_param(expr) \
((expr) || (printf("%d: [%s]\n", __LINE__, #expr), abort(), 0))
#else
#define assert_param(expr) ((void)0U)
#endif
int get(unsigned int n)
{
int tab[7] = { 31, 41, 59, 26, 57, 53, 23 };
assert_param(n < 7); // この条件を満たさないと中断
return tab[n];
}
int main(void)
{
int n;
while (scanf("%d", &n) == 1)
printf(" tab[%d] = %d\n", n, get(n));
}
[/code]
このプログラムを実行して、3 と 7 を入力するとどうなりますか?
「わかりません」という答えでもかまいませんから、
この回答中の質問にはすべて答えてください。