C预处理器保持多行

mak*_*ghi 0 c c-preprocessor

我需要在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线).我还需要为其他几种类型执行此操作,使我的源代码的当前版本非常长!

所以我的问题是:有什么方法可以在预处理器中将所有这些行保存在一个命令中,并在所有这些函数中调用该预处理器变量,以便程序变得更短更可读?

SHR*_*SHR 5

您可以像这样执行宏的整个功能:

#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)

编辑 更好地添加{} ...