我需要在C中使用不同类型的几个数组上做同样的事情.
使用void *我编写了一个将接收所有类型的函数:
void
floatarraymanip(void *inarray)
{
float *array=(float *)inarray;
[SEVERAL LINES OF OPERATIONS]-------------
} |
|
void |
longarraymanip(void *inarray) ----> Same
{ |
long *array=(long *)inarray; |
|
[SEVERAL LINES OF OPERATIONS]-------------
}
void
arraymanip(void *array, char *arraytype)
{
if(strcmp(arraytype,"FLOAT")==0)
floatarraymanip(array);
if(strcmp(arraytype,"LONG")==0)
floatarraymanip(array);
}
Run Code Online (Sandbox Code Playgroud)
的[SEVERAL LINES OF OPERATIONS]是完全一样的和相对长(约50线).我还需要为其他几种类型执行此操作,使我的源代码的当前版本非常长!
所以我的问题是:有什么方法可以在预处理器中将所有这些行保存在一个命令中,并在所有这些函数中调用该预处理器变量,以便程序变得更短更可读?
您可以像这样执行宏的整个功能:
#define MACRO(X) { \
first line command \
second line command \
third line \
last line \
}
Run Code Online (Sandbox Code Playgroud)
您还可以将该类型用作宏的一部分:
#define MACRO(TYPE,X) { \
TYPE var = X; \
first line command \
second line command \
third line \
last line \
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
MACRO(int, i)
MACRO(int*, p)
MACRO(float*, array)
Run Code Online (Sandbox Code Playgroud)
编辑 更好地添加{} ...