lkml.org 
[lkml]   [2008]   [Jan]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: Why is the kfree() argument const?
Jakob Oestergaard wrote:
> On Thu, Jan 17, 2008 at 01:25:39PM -0800, Linus Torvalds wrote:
> ...
>> Why do you make that mistake, when it is PROVABLY NOT TRUE!
>>
>> Try this trivial program:
>>
>> int main(int argc, char **argv)
>> {
>> int i;
>> const int *c;
>>
>> i = 5;
>> c = &i;
>> i = 10;
>> return *c;
>> }
>>
>> and realize that according to the C rules, if it returns anything but 10,
>> the compiler is *buggy*.
>
> That's not how this works (as we obviously agree).
>
> Please consider a rewrite of your example, demonstrating the usefulness and
> proper application of const pointers:
>
> extern foo(const int *);
>
> int main(int argc, char **argv)
> {
> int i;
>
> i = 5;
> foo(&i);
> return i;
> }
>
> Now, if the program returns anything else than 5, it means someone cast away
> const, which is generally considered a bad idea in most other software
> projects, for this very reason.
>
> *That* is the purpose of const pointers.

"restrict" exists for this reason. const is only about lvalue.

You should draw a line, not to make C more complex!

Changing the name of variables in your example:

extern print_int(const int *);

int main(int argc, char **argv)
{
extern int errno;

errno = 0;
print_int(&i);
return errno;
}

print_int() doesn't know that errno is also the argument.
and this compilation unit doesn't know that print_int() will
modify errno.

Ok, I changed int to extern int, but you see the point?
Do you want complex rules about const, depending on
context (extern, volatile,...) ?

ciao
cate


\
 
 \ /
  Last update: 2008-01-18 12:49    [W:0.104 / U:5.932 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site