【发布时间】:2014-02-10 14:11:28
【问题描述】:
我正在使用自定义线程 api,我想生成一个带有两个指向消息通道的指针和一个整数的新线程。
spawn_thread(Proctype Procedure, int argc, char *argv[]);
我使用“通道”作为线程之间的共享区域。
我有三个变量: `Chan *return, Chan *receive and an int n'
我可以简单地将我想要存储在 *argv[] 中的所有值转换为字符吗? 我没有这样做的原因是 char 的宽度只有 8 位,因此最大值为 255,这不足以容纳指针或大值。
【问题讨论】:
-
如果你想要通用指针,使用
void *而不是char *。 -
问题是我不想将 n 作为指针传递,我想传递给 'n' 的实际值。
-
这不是一个好主意。即使您传递
n的实际值并在函数上使用另一种类型接收它,即使您确保不使用其他表示访问它,即使您可以确保n始终适合在另一种类型中,您仍然不会取得太大成就。 API 的意义何在,您可以发送整数、字符或浮点数的值,但不能发送更大的结构或数组的值?在设计时,尽量减少异常。如果您的设计说:您可以使用这些类型,但不能使用这些类型,那么您做错了。 -
顺便说一句,这是一个贯穿 Java 设计的错误。 您可以引用对象,但不能引用基本类型的变量。 您可以按值传递,但只能传递基本类型的变量。 您只能拥有类类型的模板,但不能拥有基本类型的模板。然后有一整套仅适用于数组的例外。通过从 Java 的错误中学习并设计您的 API 使其不会出现异常,您会做得很好。
-
同意,但我正在做作业并且提供了 api,我只是“让它工作”。感谢您的评论,并考虑到它,因为您提出了一个有效的观点。我认为不应该使用已接受答案中的结构,因为它遵循 api,但作为一项额外的任务,我会改进 api。也要注意你的 java 评论。