Re: Problem with "warning: deprecated conversion from string constant to ‘char*’"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2010/10/12 Ian Lance Taylor <iant@xxxxxxxxxx>:
> Jens Rehsack <rehsack@xxxxxxxxxxxxxx> writes:
>
>> 2010/10/12 Ian Lance Taylor <iant@xxxxxxxxxx>:
>>> Jens Rehsack <rehsack@xxxxxxxxxxxxxx> writes:
>>>
>>>> I currently write some c++ code using libConfuse
>>>> (http://savannah.nongnu.org/projects/confuse/).
>>>> During initialisation of the required cfg_opt_t structures I get a
>>>> (very) lot of warnings like:
>>>> c2.cpp:11: warning: deprecated conversion from string constant to ‘char*'
>>>>
>>>> I attached a small example to demonstrate the problem. It's not
>>>> trivial - changing the "name" member
>>>> of struct demo being const, free failes (and is invalid, because
>>>> there're demo_opt instances with
>>>> modifyable names).
>>>>
>>>> Any suggestions welcome.
>>>> 1) Killing the warning with -Wno-... is not an option
>>>> 2) Remove the finding using const_cast<char *>() is the same as (1)
>>>> 3) initializing the struct using strdup is neither reasonable
>>>
>>> I'm not sure what you want us to suggest.  You say that the names are
>>> modifiable.
>>
>> Where do I say that? I apologize saying this (must be happened because
>> of my not so good english).
>
> "changing the "name" member of struct demo being const, free failes (and
> is invalid, because there're demo_opt instances with modifyable names)."
>
> I apologize if I misread that sentence.

I tried to say (and you can easily verify by modify the attached example of
the original post): when I modify the structure to have "const char *name"
members like:

struct demo_opt {
    const char *name;
    int flags;
};

c1.c: demo_free() fails in line 52.

>>>  String constants are not modifiable.  If the strings are
>>> indeed modified, and you pass in a string constant, then your program is
>>> going to crash when the library tries to modify the strings.  The gcc
>>> warning is helpfully pointing that out.
>>
>> Correct. And if the strings are not modifiable? (I thought I provided an
>> example which shows, that they neither are assumed being modifiable
>> nor being modified).
>>
>>> This is not a gcc issue.  It's a C++ language issue.  If you need a
>>> modifiable string, then you must not use a string constant.
>>
>> How can this being expressed without declaring dozen of helper
>> variables?
>
> I am not sure that I understand what you are asking.  Can you provide a
> short, standalone, bit of code showing the problem?

Attached at the first mail :)
Or is it to long?

> Is there any reason to think that this is a gcc issue rather than a C++
> issue?

I don't know. I encounter this problem first time - and I don't have another
c++ compiler to test if they deal better. It's likely a c++ language issue, but
I can't imagine that there is no way out (or better I hope that there is a way
to deal with such situations).

/Jens



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux