struct iovec
is defined in <uio.h>
by the following way:
/* Structure for scatter/gather I/O. */
struct iovec
{
void *iov_base; /* Pointer to data. */
size_t iov_len; /* Length of data. */
};
Now I do ugly casting from const void*
to void*
:
int send_frame_once( int fd, const struct iovec* iov, size_t iovlen );
int send_frame( int fd, const void* buffer, size_t len )
{
struct iovec iov;
iov.iov_base = (void*)buffer; /* const iov cast */
iov.iov_len = len;
return send_frame_once( fd, &iov, 1 );
}
Is that necessary kludge?
Or should I remove const
keyword from declaration of send_frame
function. Like this:
int send_frame( int fd, void* buffer, size_t len )
1 Answer 1
I think you should keep it. const
is not only meant for the compiler, but also for anybody reading your code. Even with the void*
cast, you're still saying to readers "Trust me, I'm not touching your buffer!" and this is a valuable information that should not be discarded.
-
2\$\begingroup\$ assuming send_frame does not alter the content of buffer in any way. \$\endgroup\$Loki Astari– Loki Astari2012年02月29日 14:34:01 +00:00Commented Feb 29, 2012 at 14:34
-
\$\begingroup\$ Indeed, this is what I am assuming here. \$\endgroup\$Quentin Pradet– Quentin Pradet2012年02月29日 14:35:01 +00:00Commented Feb 29, 2012 at 14:35
-
1\$\begingroup\$ Yep, buffer is not modified. \$\endgroup\$SKi– SKi2012年03月01日 08:06:00 +00:00Commented Mar 1, 2012 at 8:06