【发布时间】:2011-05-24 21:15:39
【问题描述】:
将常量整数值传递给需要指针的函数的最佳/最规范的方法是什么?
例如,write 函数
write (int filedes, const void *buffer, size_t size);
假设我只想写一个字节(a 1),我会这样认为:
write (fd, 1, 1);
但我显然得到了警告
warning: passing argument 2 of 'write' makes pointer from integer without a cast
我知道我能做到
int i = 1;
write (fd, &i, 1);
但这有必要吗?不需要声明/初始化新变量的最正确方法是什么?
【问题讨论】:
-
您的“我知道我能做到……”示例不正确。你想说
char i = 1; write(fd, &i, 1);。 -
@Rob:是的,你说得对。在这种情况下,我只写过 1 或 0(它是一条控制线),所以我想我忽略了它不正确但有效的事实。
-
让我猜猜……你有一个小端序机器,对吧?
-
"incorrect-but-working" - 我会尝试将其用于错误分类(请参阅stackoverflow.com/questions/6114684/…)。很快我就会在那次会议上把他们打死。
-
超级 necro-post,但我要补充一点,我会创建第二个函数(例如,称之为“put”),它只写入一个字节,并执行任何必要的类型转换废话来实现这一点工作。在我的具有任何类型的读/写操作的库中,我通常为单个字节(或对象)创建一个单数动词(put / get / read / write),为多个需要的复数动词(puts / gets / reads / writes)缓冲区和长度。您也可以使用 stdlib 的方式并执行“put”和“putn”……我只是觉得这有点难看。