【发布时间】:2020-09-24 10:00:22
【问题描述】:
我正在开发一种名为 BPML 的自定义编程语言,我想尝试更新名为 say() 的输出函数。
C 中的最新版本:
void say(char *text) {
printf("%s", text);
}
Python 的最新版本:
def say(text):
print(text, end = '')
在 C 中,我希望它像 Python 的 print() 函数一样,只需在函数中输入变量即可,但在 C 中并非如此,因为您仍然必须使用适当类型的变量。
这就是我制作的程序出错的原因:
#include <stdio.h>
void say(char *text);
int main() {
int number = 21;
say(number);
}
void say(char *text) {
// Output function
}
错误:
P1.c:7:9: error: incompatible integer to pointer conversion passing 'int' to parameter of type 'char *' [-Werror,-Wint-conversion]
say(number);
^~~~~~
我仍然需要使用<stdlib.h> 中的itoa() 函数,我没有想到,因为我使用的C 版本中没有它。
那么有没有可能做出某种类似于 Python 函数作用方式的输出函数呢?
【问题讨论】:
-
也许我们必须看看 Python 是如何实现这一点的,这可能是通过运行时类型检测(速度慢,但允许这样的泛化函数)
-
听起来你想要一个多态函数。 C没有这些。相反,您可以创建自己的通用数据类型包装器,其中包括类型信息,然后将它们的实例传递给
say。 -
您是在尝试用 C 还是您的自定义 BPML 语言编写函数?听起来您真正拥有的是语言设计问题,您需要弄清楚您的语言设计将如何处理这个问题。也许你需要你的语言有函数重载,或者动态类型等等。
-
@user2357112supportsMonica 我还没有开始制作编译器、语言文件和其他东西。我可能需要这方面的帮助。我只是从基础开始,先用不同的语言制作函数。
-
@BPML:不过,您接受的
_Generic答案对于您计划编写的语言几乎肯定会 100% 无用。它非常特定于 C。