我正在使用Java编写的编程语言,它直接编译成C99代码。我想添加字符串插值功能,并不确定生成的C代码是什么。在Ruby中,您可以插入字符串:puts "Hello #{name}!"
C中的等价物是什么?
答案 0 :(得分:3)
所谓的插值字符串实际上只是伪装的表达式,由字符串内容的各个部分的字符串连接组成,交替的字符串文字片段与内插的子表达式转换为字符串值。
插值字符串
"Hello #{name}!"
相当于
concatenate(concatenate("Hello",toString(name)),"!")
对更复杂的插值字符串的推广应该是显而易见的。
您可以在C中将其编译为等效的。您将需要一个特定于类型的toString操作的大型库来匹配您的语言中的类型。用户定义的类型很有趣。
您可以使用" sprintf"来实现此特殊情况,这是C" printf"的字符串构建版本。库函数,在插值表达式的类型与printf格式字符串可以处理的有限类型集匹配的情况下(例如,本机int和浮点数)。
答案 1 :(得分:0)
printf family会很好阅读,C库中的scanf系列函数也是如此。