0

我知道目前这听起来很荒谬,但相信我,我想要 php 中的“$variable”或 groovy 中的“def”之类的东西,通过我的方法是将自动变量“数据类型”识别到 C 语言中实现。

例如:

“def”是类型名称的替代品。在变量定义中,它用于表示您不关心类型。在变量定义中,必须明确提供类型名称或使用“def”替换。这是使 Groovy 解析器可检测到的变量定义所必需的。

def dynamic  =  1
dynamic = "I am a String stored in a variable of dynamic type"

或者

让我们尝试创建一个包含字符串的变量和一个包含数字的变量:

<?php
$txt="Hello World!";
$x=16;
?>

PHP 是一种松散类型语言 在 PHP 中,变量在添加值之前不需要声明。 在上面的示例中,您看到您不必告诉 PHP 变量是哪种数据类型。 PHP 会根据变量的值自动将变量转换为正确的数据类型。 在强类型编程语言中,您必须在使用变量之前声明(定义)变量的类型和名称。

4

3 回答 3

2

您要求使用静态类型语言进行动态类型。C 既没有动态类型也没有类型推断,所以这不存在。使用 C 实现标记类型系统是完全可能的,这是由数百种具有 C 解释器的语言完成的,例如 Python、PHP、Perl 等 - 但就 C 而言,一切仍然是静态类型的。然而,C 并不是强类型的,因为您可以在不转换实际数据的情况下转换指针。

如果您想要一种类似于 C、编译为机器代码并具有类型推断的语言,那么可以使用 D对 auto 关键字的重新解释

于 2010-07-24T04:59:40.843 回答
1

在 C 中没有办法做你想做的事。你需要在声明变量之前知道它的类型,并且你需要在使用它之前声明一个变量。

于 2010-07-24T04:49:55.193 回答
0

基本上,您不应该在 C 中执行此操作。但是,据我了解,如果您愿意,可以将变量声明为 void*。您需要将其转换回适当的数据类型才能使用它。自从我写 C 以来已经有一段时间了,所以以下可能不是 100% 正确的语法,但你可以这样做:

void* variable = "12345";
printf((char*) variable);

这种方法的缺点是您需要知道变量的真正类型才能将其转换回正确的类型,如果您弄错了,您的应用程序将会崩溃。据我了解,Objective-C 中的 id 类型基本上是一个包含 void* 类型和一些运行时类型信息的结构,但它只能指向 Objective-c 类,因此强制转换是安全的。

于 2010-07-28T14:05:58.203 回答