Disappointments And Misunderstandings - Red Hat ENTERPRISE LINUX 3 - USING GCC Using Instructions

Using the gnu compiler collection (gcc)
Hide thumbs Also See for ENTERPRISE LINUX 3 - USING GCC:
Table of Contents

Advertisement

244
some very old versions did. Version 2.2 of the GNU C library includes nearly complete C99 support.
You could also ask your operating system vendor if newer libraries are available.

11.8. Disappointments and Misunderstandings

These problems are perhaps regrettable, but we don't know any practical way around them.
Certain local variables aren't recognized by debuggers when you compile with optimization.
This occurs because sometimes GCC optimizes the variable out of existence. There is no way to
tell the debugger how to compute the value such a variable "would have had", and it is not clear
that would be desirable anyway. So GCC simply does not mention the eliminated variable when it
writes debugging information.
You have to expect a certain amount of disagreement between the executable and your source code,
when you use optimization.
Users often think it is a bug when GCC reports an error for code like this:
int foo (struct mumble *);
struct mumble { ... };
int foo (struct mumble *x)
{ ... }
This code really is erroneous, because the scope of
to the argument list containing it. It does not refer to the
immediately below--they are two unrelated types with similar names in different scopes.
But in the definition of
Thus, the definition and the prototype do not match, and you get an error.
This behavior may seem silly, but it is what the ISO standard specifies. It is easy enough for you to
make your code work by moving the definition of
worth being incompatible with ISO C just to avoid an error for the example shown above.
Accesses to bit-fields even in volatile objects works by accessing larger objects, such as a byte or
a word. You cannot rely on what size of object is accessed in order to read or write the bit-field; it
may even vary for a given bit-field according to the precise usage.
If you care about controlling the amount of memory that is accessed, use volatile but do not use
bit-fields.
GCC comes with shell scripts to fix certain known problems in system header files. They install
corrected copies of various header files in a special directory where only GCC will normally look
for them. The scripts adapt to various systems by searching all the system header files for the
problem cases that we know about.
If new system header files are installed, nothing automatically arranges to update the corrected
header files. You will have to reinstall GCC to fix the new header files. More specifically, go to
the build directory and delete the files
; then do
include
On 68000 and x86 systems, for instance, you can get paradoxical results if you test the precise
values of floating point numbers. For example, you can find that a floating point value which is
not a NaN is not equal to itself. This results from the fact that the floating point registers hold a
few more bits of precision than fit in a
memory and floating point registers at its convenience, and moving them into memory truncates
them.
, the file-scope type is used because that is available to be inherited.
foo
again.
make install
double
Chapter 11. Known Causes of Trouble with GCC
struct mumble
struct mumble
struct mumble
and
stmp-fixinc
stmp-headers
in memory. Compiled code moves values between
in the prototype is limited
defined with file scope
above the prototype. it is not
, and the subdirectory

Advertisement

Table of Contents
loading
Need help?

Need help?

Do you have a question about the ENTERPRISE LINUX 3 - USING GCC and is the answer not in the manual?

Questions and answers

This manual is also suitable for:

Enterprise linux 3

Table of Contents