[mpich-devel] Issue with MPI_Error_string() for user-defined codes/clases

Larry Baker baker at usgs.gov
Thu Apr 24 02:11:03 CDT 2014


Lisandro,

You are correct about the C string initializer syntax.  I was not paying such close attention to your patch as to pass along to you my feelings that C mixes up integers (especially the chameleon 0) as other types.  To me, "" is more communicative of the purpose.  I do not have the full text of your comments about the changes you made to the original patch in front of me.  I thought you mentioned changing a "" initializer to { 0 }.

Though it is trivial, as I recall, the array initializer syntax also specifies that unspecified elements are initialized with zeros.  If that is true, then { 0 } is not exactly the same as "", since { 0 } requires zero-initializing the entire char array whereas "" requires zero-initializing only the first element.  I'm not sure an intelligent compiler would do anything different than push a block of zeros on the stack in either case.

Take my comments as a friendly communication.  It is not necessary for you to change the trac ticket on my behalf.

Cordially,

Larry Baker
US Geological Survey
650-329-5608
baker at usgs.gov




On Apr 23, 2014, at 11:34 PM, Lisandro Dalcin wrote:

> On 23 April 2014 23:11, Larry Baker <baker at usgs.gov> wrote:
>> Lisandro,
>> 
>> As a matter of personal taste, I prefer that empty strings be used as
>> initializers for C strings.  One of the things I dislike extremely about C
>> (and, one of the reasons I think it is so easy in C to write bad code) is
>> its mixing of integers and pointers and integers and chars.  Even though { 0
>> } is identical to { "" } when initializing C strings, I find the latter more
>> informative.  I know the C standard specifies that strings are terminated by
>> the null character, which is elsewhere specified to be a byte with all bits
>> equal to zero.  However, "" is the literal empty string, whereas 0 (or '\0')
>> is the underlying implementation of the empty string.
> 
> Are you talking about this single line:?
> 
> static const char empty_error_string[1] = { 0 };
> 
> I guess you are proposing to change it to:
> 
> static const char empty_error_string[1] = "";
> 
> Please note {""} is an array of strings. Perhaps you meant {'\0'},
> i.e. the null char literal?
> 
> Please confirm your concerns were related to that single line of my
> patch, so I can update the trac ticket.
> 
> 
> -- 
> Lisandro Dalcin
> ---------------
> CIMEC (UNL/CONICET)
> Predio CONICET-Santa Fe
> Colectora RN 168 Km 472, Paraje El Pozo
> 3000 Santa Fe, Argentina
> Tel: +54-342-4511594 (ext 1016)
> Tel/Fax: +54-342-4511169



More information about the devel mailing list