将参数从一个函数传递到另一个(没有模板)-C ++

时间:2019-12-07 21:28:08

标签: c++ function

问题

在C ++中是否可以将参数从“发送者” 函数传递到“接收者” 函数?


期望/理论

void print(const char character) { std::putchar(character); }
void print(char message[], unsigned length) {
    for (unsigned iterator = 0u; iterator ^ length; iterator += 1)
        print(*(message + iterator));
}

void println(...) { print(...); print('\n'); std::fflush(stdout); }

在此示例中:
println“发送者” 函数和
print“接收器” 函数。

print函数将接受println函数的所有参数,如示例...语法所示。


上下文

我确实知道C ++中的模板函数以及它如何纠正前面的示例

void print(const char);
void print(char[], unsigned); // They’ve been defined before already…

template <typename... types>
void println(types... arguments) { print(arguments...); print('\n'); std::fflush(stdout); }

但是我想看看是否有另一种方法可以解决这个问题 —没有相当新的仅支持 C ++ 的功能即:如何在C中解决此问题?

我以 C风格的方式编码(在C ++功能上使用C功能) C ++ 中,因为我想知道如何构建C ++具有个性化功能。

1 个答案:

答案 0 :(得分:1)

  

如何用C解决这个问题?

在C中使用宏。仅包含...的函数宏,并将参数传递给函数:

#define println(...)  do { \
        print(__VA_ARGS__); \
        print('\n'); \
        std::fflush(stdout); \
} while(0)

有一个限制-根据ISO C标准,不允许在不带任何参数的情况下调用此类函数宏。

在C语言中,常见的做法是使用gcc extension,将##预处理运算符应用于__VA_ARGS__并将附加参数传递给print函数,例如__func____LINE____FILE__进行调试。像前hereherehere(只是简短的Google搜索的一些初步结果)。

#define println(str, ...)  do { \
        print("%s:%d: " str "\n", __FILE__, __LINE__, ##__VA_ARGS__); \
        fflush(stdout); \
} while(0)