首页 > 解决方案 > 将参数从一个函数传递到另一个函数(没有模板) - C++

问题描述

问题

有没有办法将参数从“发送者”函数传递给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++ 特性。

标签: c++function

解决方案


这个问题是如何在 C 中解决的?

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

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

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

在 C中,通常使用gcc 扩展##预处理器运算符应用于函数__VA_ARGS__并将附加参数传递给print函数,例如__func____LINE____FILE__用于调试目的。像前。这里这里这里(只是简短的谷歌搜索的几个初步结果)。

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

推荐阅读