在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 ++具有个性化功能。
答案 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__
进行调试。像前here或here或here(只是简短的Google搜索的一些初步结果)。
#define println(str, ...) do { \
print("%s:%d: " str "\n", __FILE__, __LINE__, ##__VA_ARGS__); \
fflush(stdout); \
} while(0)