python“打印”像c中的函数

wet*_*ler -2 c printf

我是 C 新手,我习惯用 python 编写代码,我通常会打印太多变量和文本来测试我的代码,而 printf 语句有时很烦人。我想用 c 编写一个函数,它的工作原理与 python 中的打印函数完全一样。

我在编写函数时面临两个问题。

  1. 我想将 n 个参数作为函数的输入。
  2. 我想将任何数据类型作为函数的输入,例如:print(12); print("hello"); print(123.12)不应引发错误。

到目前为止我做了什么

  1. 我找到了使用 <stdarg.h> 获取 n 个参数的解决方案,但我必须指定第一个参数的数据类型,这不是我想要的。

  2. “通用选择”宏可用于对传递的不同数据类型的参数调用不同的函数,但不确定如何完成,是我用于参考的链接。

Bas*_*tch 5

我想用 c 编写一个函数,它的工作原理与 python 中的打印函数完全一样。

你根本不能这样做(因为类型擦除:在运行时,类型信息在 C 中丢失)。阅读现代 C,然后查看此 C 参考

实际上,您最好在 C 中为每种数据类型编写一个函数来打印它。所以它会void print_int(int);打印一个整数,void print_double(double);打印一个双精度值等等。一旦你有一个这样的函数的集合,你可能会_Generic在宏中使用(但这很少有用;它可以处理一组有限的类型)。

github或其他地方研究现有开源 C 软件的源代码以获取灵感。在GNU bashsqliteGTKGNU bison的源代码中寻找灵感(也许Python的源代码中;Python 解释器的一半是用 C 编码的)

另请阅读 C 编译器的文档,例如GCC。所以编译所有警告和调试信息:gcc -Wall -Wextra -g然后使用GDB调试器。

也许您想在 C 中实现一些标记联合抽象数据类型。然后从GNU guileOcaml的运行时中获取灵感并深入了解它们的源代码。

熟悉 C 后,请阅读一些 C 草案标准,例如n2176

考虑使用Frama-CClang 静态分析器

有时还要考虑生成一些 C 代码,就像SWIG那样。

预算周的工作。

  • 花更多的时间学习C,而不是试图写一个不存在的函数 (2认同)