我是 C 新手,我习惯用 python 编写代码,我通常会打印太多变量和文本来测试我的代码,而 printf 语句有时很烦人。我想用 c 编写一个函数,它的工作原理与 python 中的打印函数完全一样。
我在编写函数时面临两个问题。
print(12); print("hello"); print(123.12)不应引发错误。到目前为止我做了什么
我找到了使用 <stdarg.h> 获取 n 个参数的解决方案,但我必须指定第一个参数的数据类型,这不是我想要的。
“通用选择”宏可用于对传递的不同数据类型的参数调用不同的函数,但不确定如何完成,这是我用于参考的链接。
我想用 c 编写一个函数,它的工作原理与 python 中的打印函数完全一样。
你根本不能这样做(因为类型擦除:在运行时,类型信息在 C 中丢失)。阅读现代 C,然后查看此 C 参考。
实际上,您最好在 C 中为每种数据类型编写一个函数来打印它。所以它会void print_int(int);打印一个整数,void print_double(double);打印一个双精度值等等。一旦你有一个这样的函数的集合,你可能会_Generic在宏中使用(但这很少有用;它可以处理一组有限的类型)。
在github或其他地方研究现有开源 C 软件的源代码以获取灵感。在GNU bash、sqlite、GTK或GNU bison的源代码中寻找灵感(也许在Python的源代码中;Python 解释器的一半是用 C 编码的)
另请阅读 C 编译器的文档,例如GCC。所以编译所有警告和调试信息:gcc -Wall -Wextra -g然后使用GDB调试器。
也许您想在 C 中实现一些标记联合抽象数据类型。然后从GNU guile或Ocaml的运行时中获取灵感并深入了解它们的源代码。
熟悉 C 后,请阅读一些 C 草案标准,例如n2176
考虑使用Frama-C或Clang 静态分析器。
有时还要考虑生成一些 C 代码,就像SWIG那样。
预算周的工作。