[Flac-dev] const issue in FLAC__lpc_compute_residual_from_qlp_coefficients
listes at octopodus.com
Wed Jan 14 16:21:01 PST 2004
I think you solved the mystery.
You're right, the basic problem is not a const problem, but a *  problem
As a test.c:
int main (void)
gcc test.c gives:
-- wrong type argument to increment
int main (void)
Compiles just fine with gcc.
I didn't take a look at the latest CVS snapshot, but this might be a
good thing to fix it so that the gcc build doesn't break in the future
and others spend time asking themselves what's so funny about this */
I'll post a patch later if anyone is interested, this kind of problem
arises in a few lines.
Christian Hudon wrote:
>>>> The compilers yells at me on line 233 of libFLAC/lpc.c
>>>> *(residual++) = *(data++) - (sum >> lp_quantization);
>>>> --> data is const and cannot be modified
>>>> Funny thing is, if data is declared:
>>>> const FLAC__int32 *data
>>>> instead of
>>>> const FLAC__int32 data
>>>> everything is ok.
>>>> Is this a bug in my compiler, or a personnal lack of understanding of
>>>> the difference in C between *data and data ?
> I'm not a great language lawyer, but I don't think you can modify the
> pointer when something is declared int foo. You can modify the data
> pointed to, with foo = 42, etc. but you can't do stuff like foo++
> or foo = (int*)something. The same error would show up with
> FLAC__int32 * const data. If you want to change the pointer, you need
> to declare it as a pointer with int *foo (or const int *foo, which
> means you can modify the pointer, but not the data it points to).
> My 2 cents. I'll go back to lurking now. :-)
> This SF.net email is sponsored by: Perforce Software.
> Perforce is the Fast Software Configuration Management System offering
> advanced branching capabilities and atomic changes on 50+ platforms.
> Free Eval! http://www.perforce.com/perforce/loadprog.html
> Flac-dev mailing list
> Flac-dev at lists.sourceforge.net
More information about the Flac-dev