Untested return values.

Kristian kjkilpi at gmail.com
Thu Oct 5 04:26:16 PDT 2006


On Thu, 05 Oct 2006 12:26:11 +0300, Lionello Lunesu  
<lio at lunesu.remove.com> wrote:

> Andrei Khropov wrote:
>> Walter Bright wrote:
>>
>>> I tried this back in the '80s. It's one of those things that sure  
>>> sounds like
>>> a good idea. The problem is, there are just too many cases where the  
>>> return
>>> value is legitimately ignored (like printf's), so you wind up filling  
>>> your
>>> code with chaff like:
>>>
>>> 	cast(void) printf( ... );
>>>
>>> After a few dozen of those, it starts looking like a bad idea <g>.
>>  Well, it depends on a particular syntax. In Nemerle for example it's  
>> just  " _ = SomeFunc();"
>>
>
> That's true! How about: "void = printf()", similar to the void  
> initializer "int[] x = void;"
>
> L.

Well, I ignore return values of functions a lot.

For example, 'eraseFile()' returns true if a file was deleted or false on  
failure. Usually I don't care what the return value is: if the file  
couldn't be deleted, too bad, there is not much that I can do about it  
(except possibly notify the user by opening a message box, but that's not  
always wanted).

The return value of such functions is a 'side effect', not the main thing.  
Lets say that these functions belong to a group A. There are also  
functions whose 'main thing' is their return value. There may or may not  
be some 'side effects' when they are called. These functions belong to a  
group B.

Clearly you wouldn't want to do any extra work when calling functions of  
the group A. Or have warning/error messages with them. However, with the  
group B that would be ok.

One solution could be to tell the compiler that a function belongs to the  
group B. For example:

pure double sqrt(double val);

void func() {
     double x;

     sqrt(2.0);      //error
     x = sqrt(2.0);  //ok
}

Notice a new keyword 'pure'.



More information about the Digitalmars-d mailing list