+tru64
+tru64
This option causes return types of unprototyped functions to be treated as long, instead of int, matching Tru64 C behavior. This can prevent segfaults in +DD64 mode, resulting from pointer truncation, for instance:
long | *a; |
|
long | sub() { |
|
a | = malloc(sizeof(long)); | /* no prototype! */ |
*a = 1234; | /* segfault if +DD64 and no +tru64 */ | |
return *a; |
| |
} |
|
|
A preferable solution is to provide the appropriate function prototypes.
NOTE: This option is applicable to C language only.
The
Examples:
In the following example, if the option is not enabled (the current default), the scope of k extends to the end of the body of main and statement (1) is valid (and will return zero). With the option enabled, k is no longer in scope and (1) is an error.
#include <stdio.h>
int main() {
for (int k = 0; k!=100; ++k) { printf(“%d\n”, k);
}
return
}
In the next example, with the option disabled, the code is illegal, because it redefines k in (2) when a previous definition (1) is considered to have occurred in the same scope.
With the option enabled
int main() { int sum = 0;
for (int k = 0; k!=100; ++k) // (1) sum += k;
for (int k = 100; k!= 0; ++k) // (2) sum += k;
}
The
Example:
In the following example, if the option is not enabled, the call in main does not consider declaration
(1)and selects (2). With the option enabled, both declarations are seen, and in this case overload resolution will select (1).
86