请考虑以下代码:
#include <stdio.h>
void printStrGeneric(void *, int, int);
void printNumGeneric(void *, int, int);
int main()
{
int intArray[] = { 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85 };
printNumGeneric(intArray, sizeof(intArray), sizeof(int));
printStrGeneric(intArray, sizeof(intArray), sizeof(int));
puts("");
short shortArray[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 };
printNumGeneric(shortArray, sizeof(shortArray), sizeof(short));
printStrGeneric(shortArray, sizeof(shortArray), sizeof(short));
puts("");
return 0;
}
void printStrGeneric(void *object, int size, int elem_size)
{
char *p = (char *) object;
while (p < (char *) object + size) {
printf("%c\t", *p);
p += elem_size;
}
puts("");
}
void printNumGeneric(void *object, int size, int elem_size)
{
char *p = (char *) object;
while (p < (char *) object + size) {
printf("%d\t", *p);
p += elem_size;
}
puts("");
}
- 假设函数printStrGeneric
和printNumGeneric
几乎相同(printf
字母除外),我想知道是否有任何可能只有1个函数,并将printf
字母(%c
或%d
)作为参数传递给函数?
答案 0 :(得分:2)
将格式说明符作为参数传递是一种方法,就像@OldProgrammer一样,但是像@ 0x5453指出的那样,它可能是一个漏洞。
您是否反对将bool值作为额外参数传递并使用if条件来控制printf函数?所以你的代码看起来像这样:
void printGeneric(void *object, int size, int elem_size, bool str)
{
char *p = (char *) object;
if(str){
while (p < (char *) object + size) {
printf("%c\t", *p);
p += elem_size;
}
}else{
while (p < (char *) object + size) {
printf("%d\t", *p);
p += elem_size;
}
}
puts("");
}
答案 1 :(得分:2)
了解使用:
va_args
语法:format,...
这两者的组合允许您将格式传递给函数,并根据需要进行处理。
这是一个非常简单的解释:https://www.eskimo.com/~scs/cclass/int/sx11b.html