Uwe Ohse

Artikel

gcc attribute overview

function attributes -- type attributes -- variable attributes

This list was automatically generated from the GCC documentation. It lists documented GCCs function, type and variable attributes (__attribute__) together with the GCC versions the attribute was found in.
Versions used:

'c extensions' 'function attributes'

alias -- always_inline -- cdecl -- const -- constructor -- deprecated -- destructor -- dllexport -- dllimport -- eightbit_data -- exception -- far -- fastcall -- format -- format_arg -- function_vector -- interrupt -- interrupt_handler -- long_call/short_call -- longcall -- longcall/shortcall -- malloc -- model -- naked -- near -- no_check_memory_usage -- no_instrument_function -- noinline -- nonnull -- noreturn -- nothrow -- pure -- regparm -- saveall -- section -- signal -- sp_switch -- stdcall -- tiny_data -- trap_exit -- unused -- used -- visibility -- warn_unused_result -- weak
alias ("TARGET")
Found in versions: 2.7-3.4
Description:
 The `alias' attribute causes the declaration to be emitted as an
 alias for another symbol, which must be specified. For instance,
 void __f () { /* Do something. */; }
 void f () __attribute__ ((weak, alias ("__f")));
 declares `f' to be a weak alias for `__f'. In C++, the mangled
 name for the target must be used.
 Not all target machines support this attribute.
always_inline
Found in versions: 3.1-3.4
Description:
 Generally, functions are not inlined unless optimization is
 specified. For functions declared inline, this attribute inlines
 the function even if no optimization level was specified.
cdecl
Found in versions: 2.7-3.4
Description:
 On the Intel 386, the `cdecl' attribute causes the compiler to
 assume that the calling function will pop off the stack space used
 to pass arguments. This is useful to override the effects of the
 `-mrtd' switch.
const
Found in versions: 2.5-3.4
Introduced in version 2.5. (according to documentation)
Description:
 Many functions do not examine any values except their arguments,
 and have no effects except the return value. Basically this is
 just slightly more strict class than the `pure' attribute above,
 since function is not allowed to read global memory.
 Note that a function that has pointer arguments and examines the
 data pointed to must _not_ be declared `const'. Likewise, a
 function that calls a non-`const' function usually must not be
 `const'. It does not make sense for a `const' function to return
 `void'.
 The attribute `const' is not implemented in GCC versions earlier
 than 2.5. An alternative way to declare that a function has no
 side effects, which works in the current version and in some older
 versions, is as follows:
 typedef int intfn ();
 
 extern const intfn square;
 This approach does not work in GNU C++ from 2.6.0 on, since the
 language specifies that the `const' must be attached to the return
 value.
constructor
Found in versions: 2.7-3.4
Description:
deprecated
Found in versions: 3.1-3.4
Description:
 The `deprecated' attribute results in a warning if the function is
 used anywhere in the source file. This is useful when identifying
 functions that are expected to be removed in a future version of a
 program. The warning also includes the location of the declaration
 of the deprecated function, to enable users to easily find further
 information about why the function is deprecated, or what they
 should do instead. Note that the warnings only occurs for uses:
 int old_fn () __attribute__ ((deprecated));
 int old_fn ();
 int (*fn_ptr)() = old_fn;
 results in a warning on line 3 but not line 2.
 The `deprecated' attribute can also be used for variables and
 types (*note Variable Attributes::, *note Type Attributes::.)
destructor
Found in versions: 2.7-3.4
Description:
 The `constructor' attribute causes the function to be called
 automatically before execution enters `main ()'. Similarly, the
 `destructor' attribute causes the function to be called
 automatically after `main ()' has completed or `exit ()' has been
 called. Functions with these attributes are useful for
 initializing data that will be used implicitly during the
 execution of the program.
 These attributes are not currently implemented for Objective-C.
dllexport
Found in versions: 2.8-3.4
Description:
 On Microsoft Windows targets the `dllexport' attribute causes the
 compiler to provide a global pointer to a pointer in a dll, so
 that it can be referenced with the `dllimport' attribute. The
 pointer name is formed by combining `_imp__' and the function or
 variable name.
 Currently, the `dllexport'attribute is ignored for inlined
 functions, but export can be forced by using the
 `-fkeep-inline-functions' flag. The attribute is also ignored for
 undefined symbols.
 When applied to C++ classes. the attribute marks defined
 non-inlined member functions and static data members as exports.
 Static consts initialized in-class are not marked unless they are
 also defined out-of-class.
 On cygwin, mingw and arm-pe targets, `__declspec(dllexport)' is
 recognized as a synonym for `__attribute__ ((dllexport))' for
 compatibility with other Microsoft Windows compilers.
 Alternative methods for including the symbol in the dll's export
 table are to use a .def file with an `EXPORTS' section or, with
 GNU ld, using the `--export-all' linker flag.
 You can specify multiple attributes in a declaration by separating
dllimport
Found in versions: 2.8-3.4
Description:
 On Microsoft Windows targets, the `dllimport' attribute causes the
 compiler to reference a function or variable via a global pointer
 to a pointer that is set up by the Microsoft Windows dll library.
 The pointer name is formed by combining `_imp__' and the function
 or variable name. The attribute implies `extern' storage.
 Currently, the attribute is ignored for inlined functions. If the
 attribute is applied to a symbol _definition_, an error is
 reported. If a symbol previously declared `dllimport' is later
 defined, the attribute is ignored in subsequent references, and a
 warning is emitted. The attribute is also overridden by a
 subsequent declaration as `dllexport'.
 When applied to C++ classes, the attribute marks non-inlined
 member functions and static data members as imports. However, the
 attribute is ignored for virtual methods to allow creation of
 vtables using thunks.
 On cygwin, mingw and arm-pe targets, `__declspec(dllimport)' is
 recognized as a synonym for `__attribute__ ((dllimport))' for
 compatibility with other Microsoft Windows compilers.
 The use of the `dllimport' attribute on functions is not necessary,
 but provides a small performance benefit by eliminating a thunk in
 the dll. The use of the `dllimport' attribute on imported
 variables was required on older versions of GNU ld, but can now be
 avoided by passing the `--enable-auto-import' switch to ld. As
 with functions, using the attribute for a variable eliminates a
 thunk in the dll.
 One drawback to using this attribute is that a pointer to a
 function or variable marked as dllimport cannot be used as a
 constant address. The attribute can be disabled for functions by
 setting the `-mnop-fun-dllimport' flag.
eightbit_data
Found in versions: 2.8-3.4
Description:
 Use this attribute on the H8/300, H8/300H, and H8S to indicate
 that the specified variable should be placed into the eight bit
 data section. The compiler will generate more efficient code for
 certain operations on data in the eight bit data area. Note the
 eight bit data area is limited to 256 bytes of data.
 You must use GAS and GLD from GNU binutils version 2.7 or later for
 this attribute to work correctly.
exception (EXCEPT-FUNC [, EXCEPT-ARG])
Found in versions: 2.8-3.2
Description:
 On the PowerPC running Windows NT, the `exception' attribute causes
 the compiler to modify the structured exception table entry it
 emits for the declared function. The string or identifier
 EXCEPT-FUNC is placed in the third entry of the structured
 exception table. It represents a function, which is called by the
 exception handling mechanism if an exception occurs. If it was
 specified, the string or identifier EXCEPT-ARG is placed in the
 fourth entry of the structured exception table.
far
Found in versions: 3.3 3.4
Description:
 On 68HC11 and 68HC12 the `far' attribute causes the compiler to
 use a calling convention that takes care of switching memory banks
 when entering and leaving a function. This calling convention is
 also the default when using the `-mlong-calls' option.
 On 68HC12 the compiler will use the `call' and `rtc' instructions
 to call and return from a function.
 On 68HC11 the compiler will generate a sequence of instructions to
 invoke a board-specific routine to switch the memory bank and call
 the real function. The board-specific routine simulates a `call'.
 At the end of a function, it will jump to a board-specific routine
 instead of using `rts'. The board-specific return routine simulates
 the `rtc'.
fastcall
Found in versions: 3.4
Description:
 On the Intel 386, the `fastcall' attribute causes the compiler to
 pass the first two arguments in the registers ECX and EDX.
 Subsequent arguments are passed on the stack. The called function
 will pop the arguments off the stack. If the number of arguments
 is variable all arguments are pushed on the stack.
format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)
Found in versions: 2.3-3.4
Description:
 The `format' attribute specifies that a function takes `printf',
 `scanf', `strftime' or `strfmon' style arguments which should be
 type-checked against a format string. For example, the
 declaration:
 extern int
 my_printf (void *my_object, const char *my_format, ...)
 __attribute__ ((format (printf, 2, 3)));
 causes the compiler to check the arguments in calls to `my_printf'
 for consistency with the `printf' style format string argument
 `my_format'.
 The parameter ARCHETYPE determines how the format string is
 interpreted, and should be `printf', `scanf', `strftime' or
 `strfmon'. (You can also use `__printf__', `__scanf__',
 `__strftime__' or `__strfmon__'.) The parameter STRING-INDEX
 specifies which argument is the format string argument (starting
 from 1), while FIRST-TO-CHECK is the number of the first argument
 to check against the format string. For functions where the
 arguments are not available to be checked (such as `vprintf'),
 specify the third parameter as zero. In this case the compiler
 only checks the format string for consistency. For `strftime'
 formats, the third parameter is required to be zero. Since
 non-static C++ methods have an implicit `this' argument, the
 arguments of such methods should be counted from two, not one, when
 giving values for STRING-INDEX and FIRST-TO-CHECK.
 In the example above, the format string (`my_format') is the second
 argument of the function `my_print', and the arguments to check
 start with the third argument, so the correct parameters for the
 format attribute are 2 and 3.
 The `format' attribute allows you to identify your own functions
 which take format strings as arguments, so that GCC can check the
 calls to these functions for errors. The compiler always (unless
 `-ffreestanding' is used) checks formats for the standard library
 functions `printf', `fprintf', `sprintf', `scanf', `fscanf',
 `sscanf', `strftime', `vprintf', `vfprintf' and `vsprintf'
 whenever such warnings are requested (using `-Wformat'), so there
 is no need to modify the header file `stdio.h'. In C99 mode, the
 functions `snprintf', `vsnprintf', `vscanf', `vfscanf' and
 `vsscanf' are also checked. Except in strictly conforming C
 standard modes, the X/Open function `strfmon' is also checked as
 are `printf_unlocked' and `fprintf_unlocked'. *Note Options
 Controlling C Dialect: C Dialect Options.
format_arg (STRING-INDEX)
Found in versions: 2.8-3.4
Description:
 The `format_arg' attribute specifies that a function takes a format
 string for a `printf', `scanf', `strftime' or `strfmon' style
 function and modifies it (for example, to translate it into
 another language), so the result can be passed to a `printf',
 `scanf', `strftime' or `strfmon' style function (with the
 remaining arguments to the format function the same as they would
 have been for the unmodified string). For example, the
 declaration:
 extern char *
 my_dgettext (char *my_domain, const char *my_format)
 __attribute__ ((format_arg (2)));
 causes the compiler to check the arguments in calls to a `printf',
 `scanf', `strftime' or `strfmon' type function, whose format
 string argument is a call to the `my_dgettext' function, for
 consistency with the format string argument `my_format'. If the
 `format_arg' attribute had not been specified, all the compiler
 could tell in such calls to format functions would be that the
 format string argument is not constant; this would generate a
 warning when `-Wformat-nonliteral' is used, but the calls could
 not be checked without the attribute.
 The parameter STRING-INDEX specifies which argument is the format
 string argument (starting from one). Since non-static C++ methods
 have an implicit `this' argument, the arguments of such methods
 should be counted from two.
 The `format-arg' attribute allows you to identify your own
 functions which modify format strings, so that GCC can check the
 calls to `printf', `scanf', `strftime' or `strfmon' type function
 whose operands are a call to one of your own function. The
 compiler always treats `gettext', `dgettext', and `dcgettext' in
 this manner except when strict ISO C support is requested by
 `-ansi' or an appropriate `-std' option, or `-ffreestanding' is
 used. *Note Options Controlling C Dialect: C Dialect Options.
function_vector
Found in versions: 2.8-3.4
Description:
 Use this attribute on the H8/300, H8/300H, and H8S to indicate
 that the specified function should be called through the function
 vector. Calling a function through the function vector will
 reduce code size, however; the function vector has a limited size
 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
 and H8S) and shares space with the interrupt vector.
 You must use GAS and GLD from GNU binutils version 2.7 or later for
 this attribute to work correctly.
interrupt
Found in versions: 2.8-3.4
Description:
 Use this attribute on the ARM, AVR, C4x, M32R/D and Xstormy16
 ports to indicate that the specified function is an interrupt
 handler. The compiler will generate function entry and exit
 sequences suitable for use in an interrupt handler when this
 attribute is present.
 Note, interrupt handlers for the m68k, H8/300, H8/300H, H8S, and
 SH processors can be specified via the `interrupt_handler'
 attribute.
 Note, on the AVR, interrupts will be enabled inside the function.
 Note, for the ARM, you can specify the kind of interrupt to be
 handled by adding an optional parameter to the interrupt attribute
 like this:
 void f () __attribute__ ((interrupt ("IRQ")));
 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT
 and UNDEF.
interrupt_handler
Found in versions: 2.8-3.4
Description:
 Use this attribute on the m68k, H8/300, H8/300H, H8S, and SH to
 indicate that the specified function is an interrupt handler. The
 compiler will generate function entry and exit sequences suitable
 for use in an interrupt handler when this attribute is present.
long_call/short_call
Found in versions: 3.0-3.4
Description:
 This attribute specifies how a particular function is called on
 ARM. Both attributes override the `-mlong-calls' (*note ARM
 Options::) command line switch and `#pragma long_calls' settings.
 The `long_call' attribute causes the compiler to always call the
 function by first loading its address into a register and then
 using the contents of that register. The `short_call' attribute
 always places the offset to the function from the call site into
 the `BL' instruction directly.
longcall
Found in versions: 2.8-3.2
Description:
 On the RS/6000 and PowerPC, the `longcall' attribute causes the
 compiler to always call the function via a pointer, so that
 functions which reside further than 64 megabytes (67,108,864
 bytes) from the current location can be called.
longcall/shortcall
Found in versions: 3.3 3.4
Description:
 On the RS/6000 and PowerPC, the `longcall' attribute causes the
 compiler to always call this function via a pointer, just as it
 would if the `-mlongcall' option had been specified. The
 `shortcall' attribute causes the compiler not to do this. These
 attributes override both the `-mlongcall' switch and the `#pragma
 longcall' setting.
 *Note RS/6000 and PowerPC Options::, for more information on
 whether long calls are necessary.
malloc
Found in versions: 3.0-3.4
Description:
 The `malloc' attribute is used to tell the compiler that a function
 may be treated as if any non-`NULL' pointer it returns cannot
 alias any other pointer valid when the function returns. This
 will often improve optimization. Standard functions with this
 property include `malloc' and `calloc'. `realloc'-like functions
 have this property as long as the old pointer is never referred to
 (including comparing it to the new pointer) after the function
 returns a non-`NULL' value.
model (MODEL-NAME)
Found in versions: 2.8-3.4
Description:
 On the M32R/D, use this attribute to set the addressability of an
 object, and of the code generated for a function. The identifier
 MODEL-NAME is one of `small', `medium', or `large', representing
 each of the code models.
 Small model objects live in the lower 16MB of memory (so that their
 addresses can be loaded with the `ld24' instruction), and are
 callable with the `bl' instruction.
 Medium model objects may live anywhere in the 32-bit address space
 (the compiler will generate `seth/add3' instructions to load their
 addresses), and are callable with the `bl' instruction.
 Large model objects may live anywhere in the 32-bit address space
 (the compiler will generate `seth/add3' instructions to load their
 addresses), and may not be reachable with the `bl' instruction
 (the compiler will generate the much slower `seth/add3/jl'
 instruction sequence).
 On IA-64, use this attribute to set the addressability of an
 object. At present, the only supported identifier for MODEL-NAME
 is `small', indicating addressability via "small" (22-bit)
 addresses (so that their addresses can be loaded with the `addl'
 instruction). Caveat: such addressing is by definition not
 position independent and hence this attribute must not be used for
 objects defined by shared libraries.
naked
Found in versions: 3.0-3.4
Description:
 Use this attribute on the ARM, AVR, C4x and IP2K ports to indicate
 that the specified function does not need prologue/epilogue
 sequences generated by the compiler. It is up to the programmer
 to provide these sequences.
near
Found in versions: 3.3 3.4
Description:
 On 68HC11 and 68HC12 the `near' attribute causes the compiler to
 use the normal calling convention based on `jsr' and `rts'. This
 attribute can be used to cancel the effect of the `-mlong-calls'
 option.
no_check_memory_usage
Found in versions: 2.95 3.0
Description:
 The `no_check_memory_usage' attribute causes GCC to omit checks of
 memory references when it generates code for that function.
 Normally if you specify `-fcheck-memory-usage' (see *note Code Gen
 Options::), GCC generates calls to support routines before most
 memory accesses to permit support code to record usage and detect
 uses of uninitialized or unallocated storage. Since GCC cannot
 handle `asm' statements properly they are not allowed in such
 functions. If you declare a function with this attribute, GCC
 will not generate memory checking code for that function,
 permitting the use of `asm' statements without having to compile
 that function with different options. This also allows you to
 write support routines of your own if you wish, without getting
 infinite recursion if they get compiled with
 `-fcheck-memory-usage'.
no_instrument_function
Found in versions: 2.95-3.4
Description:
 If `-finstrument-functions' is given, profiling function calls will
 be generated at entry and exit of most user-compiled functions.
 Functions with this attribute will not be so instrumented.
noinline
Found in versions: 3.1-3.4
Description:
 This function attribute prevents a function from being considered
 for inlining.
nonnull (ARG-INDEX, ...)
Found in versions: 3.3 3.4
Description:
 The `nonnull' attribute specifies that some function parameters
 should be non-null pointers. For instance, the declaration:
 extern void *
 my_memcpy (void *dest, const void *src, size_t len)
 	__attribute__((nonnull (1, 2)));
 causes the compiler to check that, in calls to `my_memcpy',
 arguments DEST and SRC are non-null. If the compiler determines
 that a null pointer is passed in an argument slot marked as
 non-null, and the `-Wnonnull' option is enabled, a warning is
 issued. The compiler may also choose to make optimizations based
 on the knowledge that certain function arguments will not be null.
 If no argument index list is given to the `nonnull' attribute, all
 pointer arguments are marked as non-null. To illustrate, the
 following declaration is equivalent to the previous example:
 extern void *
 my_memcpy (void *dest, const void *src, size_t len)
 	__attribute__((nonnull));
noreturn
Found in versions: 2.5-3.4
Introduced in version 2.5. (according to documentation)
Description:
 A few standard library functions, such as `abort' and `exit',
 cannot return. GCC knows this automatically. Some programs define
 their own functions that never return. You can declare them
 `noreturn' to tell the compiler this fact. For example,
 void fatal () __attribute__ ((noreturn));
 
 void
 fatal (/* ... */)
 {
 /* ... */ /* Print error message. */ /* ... */
 exit (1);
 }
 The `noreturn' keyword tells the compiler to assume that `fatal'
 cannot return. It can then optimize without regard to what would
 happen if `fatal' ever did return. This makes slightly better
 code. More importantly, it helps avoid spurious warnings of
 uninitialized variables.
 The `noreturn' keyword does not affect the exceptional path when
 that applies: a `noreturn'-marked function may still return to the
 caller by throwing an exception.
 Do not assume that registers saved by the calling function are
 restored before calling the `noreturn' function.
 It does not make sense for a `noreturn' function to have a return
 type other than `void'.
 The attribute `noreturn' is not implemented in GCC versions
 earlier than 2.5. An alternative way to declare that a function
 does not return, which works in the current version and in some
 older versions, is as follows:
 typedef void voidfn ();
 
 volatile voidfn fatal;
nothrow
Found in versions: 3.3 3.4
Introduced in version 3.2. (according to documentation)
Description:
 The `nothrow' attribute is used to inform the compiler that a
 function cannot throw an exception. For example, most functions in
 the standard C library can be guaranteed not to throw an exception
 with the notable exceptions of `qsort' and `bsearch' that take
 function pointer arguments. The `nothrow' attribute is not
 implemented in GCC versions earlier than 3.2.
pure
Found in versions: 3.0-3.4
Introduced in version 2.96. (according to documentation)
Description:
 Many functions have no effects except the return value and their
 return value depends only on the parameters and/or global
 variables. Such a function can be subject to common subexpression
 elimination and loop optimization just as an arithmetic operator
 would be. These functions should be declared with the attribute
 `pure'. For example,
 int square (int) __attribute__ ((pure));
 says that the hypothetical function `square' is safe to call fewer
 times than the program says.
 Some of common examples of pure functions are `strlen' or `memcmp'.
 Interesting non-pure functions are functions with infinite loops
 or those depending on volatile memory or other system resource,
 that may change between two consecutive calls (such as `feof' in a
 multithreading environment).
 The attribute `pure' is not implemented in GCC versions earlier
 than 2.96.
regparm (NUMBER)
Found in versions: 2.7-3.4
Description:
 On the Intel 386, the `regparm' attribute causes the compiler to
 pass up to NUMBER integer arguments in registers EAX, EDX, and ECX
 instead of on the stack. Functions that take a variable number of
 arguments will continue to be passed all of their arguments on the
 stack.
 Beware that on some ELF systems this attribute is unsuitable for
 global functions in shared libraries with lazy binding (which is
 the default). Lazy binding will send the first call via resolving
 code in the loader, which might assume EAX, EDX and ECX can be
 clobbered, as per the standard calling conventions. Solaris 8 is
 affected by this. GNU systems with GLIBC 2.1 or higher, and
 FreeBSD, are believed to be safe since the loaders there save all
 registers. (Lazy binding can be disabled with the linker or the
 loader if desired, to avoid the problem.)
saveall
Found in versions: 3.4
Description:
 Use this attribute on the H8/300, H8/300H, and H8S to indicate that
 all registers except the stack pointer should be saved in the
 prologue regardless of whether they are used or not.
section ("SECTION-NAME")
Found in versions: 2.6-3.4
Description:
 Normally, the compiler places the code it generates in the `text'
 section. Sometimes, however, you need additional sections, or you
 need certain particular functions to appear in special sections.
 The `section' attribute specifies that a function lives in a
 particular section. For example, the declaration:
 extern void foobar (void) __attribute__ ((section ("bar")));
 puts the function `foobar' in the `bar' section.
 Some file formats do not support arbitrary sections so the
 `section' attribute is not available on all platforms. If you
 need to map the entire contents of a module to a particular
 section, consider using the facilities of the linker instead.
signal
Found in versions: 3.0-3.4
Description:
 Use this attribute on the AVR to indicate that the specified
 function is a signal handler. The compiler will generate function
 entry and exit sequences suitable for use in a signal handler when
 this attribute is present. Interrupts will be disabled inside the
 function.
sp_switch
Found in versions: 3.0-3.4
Description:
 Use this attribute on the SH to indicate an `interrupt_handler'
 function should switch to an alternate stack. It expects a string
 argument that names a global variable holding the address of the
 alternate stack.
 void *alt_stack;
 void f () __attribute__ ((interrupt_handler,
 sp_switch ("alt_stack")));
stdcall
Found in versions: 2.7-3.4
Description:
 On the Intel 386, the `stdcall' attribute causes the compiler to
 assume that the called function will pop off the stack space used
 to pass arguments, unless it takes a variable number of arguments.
tiny_data
Found in versions: 2.8-3.4
Description:
 Use this attribute on the H8/300H and H8S to indicate that the
 specified variable should be placed into the tiny data section.
 The compiler will generate more efficient code for loads and stores
 on data in the tiny data section. Note the tiny data area is
 limited to slightly under 32kbytes of data.
trap_exit
Found in versions: 3.0-3.4
Description:
 Use this attribute on the SH for an `interrupt_handler' to return
 using `trapa' instead of `rte'. This attribute expects an integer
 argument specifying the trap number to be used.
unused
Found in versions: 2.7-3.4
Description:
 This attribute, attached to a function, means that the function is
 meant to be possibly unused. GCC will not produce a warning for
 this function.
used
Found in versions: 3.1-3.4
Description:
 This attribute, attached to a function, means that code must be
 emitted for the function even if it appears that the function is
 not referenced. This is useful, for example, when the function is
 referenced only in inline assembly.
visibility ("VISIBILITY_TYPE")
Found in versions: 3.3 3.4
Description:
 The `visibility' attribute on ELF targets causes the declaration
 to be emitted with default, hidden, protected or internal
 visibility.
 void __attribute__ ((visibility ("protected")))
 f () { /* Do something. */; }
 int i __attribute__ ((visibility ("hidden")));
 See the ELF gABI for complete details, but the short story is:
 "default"
 Default visibility is the normal case for ELF. This value is
 available for the visibility attribute to override other
 options that may change the assumed visibility of symbols.
 "hidden"
 Hidden visibility indicates that the symbol will not be
 placed into the dynamic symbol table, so no other "module"
 (executable or shared library) can reference it directly.
 "protected"
 Protected visibility indicates that the symbol will be placed
 in the dynamic symbol table, but that references within the
 defining module will bind to the local symbol. That is, the
 symbol cannot be overridden by another module.
 "internal"
 Internal visibility is like hidden visibility, but with
 additional processor specific semantics. Unless otherwise
 specified by the psABI, GCC defines internal visibility to
 mean that the function is _never_ called from another module.
 Note that hidden symbols, while they cannot be referenced
 directly by other modules, can be referenced indirectly via
 function pointers. By indicating that a symbol cannot be
 called from outside the module, GCC may for instance omit the
 load of a PIC register since it is known that the calling
 function loaded the correct value.
 Not all ELF targets support this attribute.
warn_unused_result
Found in versions: 3.3 3.4
Description:
 The `warn_unused_result' attribute causes a warning to be emitted
 if a caller of the function with this attribute does not use its
 return value. This is useful for functions where not checking the
 result is either a security problem or always a bug, such as
 `realloc'.
 int fn () __attribute__ ((warn_unused_result));
 int foo ()
 {
 if (fn () < 0) return -1; fn (); return 0; } results in warning on line 5. 
weak
Found in versions: 2.7-3.4
Description:
 The `weak' attribute causes the declaration to be emitted as a weak
 symbol rather than a global. This is primarily useful in defining
 library functions which can be overridden in user code, though it
 can also be used with non-function declarations. Weak symbols are
 supported for ELF targets, and also for a.out targets when using
 the GNU assembler and linker.

'c extensions' 'type attributes'

aligned -- deprecated -- gcc_struct -- may_alias -- ms_struct -- packed -- transparent_union -- unused
aligned (ALIGNMENT)
Found in versions: 2.7-3.4
Description:
 This attribute specifies a minimum alignment (in bytes) for
 variables of the specified type. For example, the declarations:
 struct S { short f[3]; } __attribute__ ((aligned (8)));
 typedef int more_aligned_int __attribute__ ((aligned (8)));
 force the compiler to insure (as far as it can) that each variable
 whose type is `struct S' or `more_aligned_int' will be allocated
 and aligned _at least_ on a 8-byte boundary. On a SPARC, having
 all variables of type `struct S' aligned to 8-byte boundaries
 allows the compiler to use the `ldd' and `std' (doubleword load and
 store) instructions when copying one variable of type `struct S' to
 another, thus improving run-time efficiency.
 Note that the alignment of any given `struct' or `union' type is
 required by the ISO C standard to be at least a perfect multiple of
 the lowest common multiple of the alignments of all of the members
 of the `struct' or `union' in question. This means that you _can_
 effectively adjust the alignment of a `struct' or `union' type by
 attaching an `aligned' attribute to any one of the members of such
 a type, but the notation illustrated in the example above is a
 more obvious, intuitive, and readable way to request the compiler
 to adjust the alignment of an entire `struct' or `union' type.
 As in the preceding example, you can explicitly specify the
 alignment (in bytes) that you wish the compiler to use for a given
 `struct' or `union' type. Alternatively, you can leave out the
 alignment factor and just ask the compiler to align a type to the
 maximum useful alignment for the target machine you are compiling
 for. For example, you could write:
 struct S { short f[3]; } __attribute__ ((aligned));
 Whenever you leave out the alignment factor in an `aligned'
 attribute specification, the compiler automatically sets the
 alignment for the type to the largest alignment which is ever used
 for any data type on the target machine you are compiling for.
 Doing this can often make copy operations more efficient, because
 the compiler can use whatever instructions copy the biggest chunks
 of memory when performing copies to or from the variables which
 have types that you have aligned this way.
 In the example above, if the size of each `short' is 2 bytes, then
 the size of the entire `struct S' type is 6 bytes. The smallest
 power of two which is greater than or equal to that is 8, so the
 compiler sets the alignment for the entire `struct S' type to 8
 bytes.
 Note that although you can ask the compiler to select a
 time-efficient alignment for a given type and then declare only
 individual stand-alone objects of that type, the compiler's
 ability to select a time-efficient alignment is primarily useful
 only when you plan to create arrays of variables having the
 relevant (efficiently aligned) type. If you declare or use arrays
 of variables of an efficiently-aligned type, then it is likely
 that your program will also be doing pointer arithmetic (or
 subscripting, which amounts to the same thing) on pointers to the
 relevant type, and the code that the compiler generates for these
 pointer arithmetic operations will often be more efficient for
 efficiently-aligned types than for other types.
 The `aligned' attribute can only increase the alignment; but you
 can decrease it by specifying `packed' as well. See below.
 Note that the effectiveness of `aligned' attributes may be limited
 by inherent limitations in your linker. On many systems, the
 linker is only able to arrange for variables to be aligned up to a
 certain maximum alignment. (For some linkers, the maximum
 supported alignment may be very very small.) If your linker is
 only able to align variables up to a maximum of 8 byte alignment,
 then specifying `aligned(16)' in an `__attribute__' will still
 only provide you with 8 byte alignment. See your linker
 documentation for further information.
deprecated
Found in versions: 3.1-3.4
Description:
 The `deprecated' attribute results in a warning if the type is
 used anywhere in the source file. This is useful when identifying
 types that are expected to be removed in a future version of a
 program. If possible, the warning also includes the location of
 the declaration of the deprecated type, to enable users to easily
 find further information about why the type is deprecated, or what
 they should do instead. Note that the warnings only occur for
 uses and then only if the type is being applied to an identifier
 that itself is not being declared as deprecated.
 typedef int T1 __attribute__ ((deprecated));
 T1 x;
 typedef T1 T2;
 T2 y;
 typedef T1 T3 __attribute__ ((deprecated));
 T3 z __attribute__ ((deprecated));
 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No
 warning is issued for line 4 because T2 is not explicitly
 deprecated. Line 5 has no warning because T3 is explicitly
 deprecated. Similarly for line 6.
 The `deprecated' attribute can also be used for functions and
 variables (*note Function Attributes::, *note Variable
 Attributes::.)
gcc_struct
Found in versions: 3.4
Description:
 If `packed' is used on a structure, or if bit-fields are used it
 may be that the Microsoft ABI packs them differently than GCC
 would normally pack them. Particularly when moving packed data
 between functions compiled with GCC and the native Microsoft
 compiler (either via function call or as data in a file), it may
 be necessary to access either format.
 Currently `-m[no-]ms-bitfields' is provided for the Microsoft
 Windows X86 compilers to match the native Microsoft compiler.
 To specify multiple attributes, separate them by commas within the
may_alias
Found in versions: 3.3 3.4
Description:
 Accesses to objects with types with this attribute are not
 subjected to type-based alias analysis, but are instead assumed to
 be able to alias any other type of objects, just like the `char'
 type. See `-fstrict-aliasing' for more information on aliasing
 issues.
 Example of use:
 typedef short __attribute__((__may_alias__)) short_a;
 
 int
 main (void)
 {
 int a = 0x12345678;
 short_a *b = (short_a *) &a;
 
 b[1] = 0;
 
 if (a == 0x12345678)
 abort();
 
 exit(0);
 }
 If you replaced `short_a' with `short' in the variable
 declaration, the above program would abort when compiled with
 `-fstrict-aliasing', which is on by default at `-O2' or above in
 recent GCC versions.
ms_struct
Found in versions: 3.4
Description:
packed
Found in versions: 2.7-3.4
Description:
 This attribute, attached to `struct' or `union' type definition,
 specifies that each member of the structure or union is placed to
 minimize the memory required. When attached to an `enum'
 definition, it indicates that the smallest integral type should be
 used.
 Specifying this attribute for `struct' and `union' types is
 equivalent to specifying the `packed' attribute on each of the
 structure or union members. Specifying the `-fshort-enums' flag
 on the line is equivalent to specifying the `packed' attribute on
 all `enum' definitions.
 In the following example `struct my_packed_struct''s members are
 packed closely together, but the internal layout of its `s' member
 is not packed - to do that, `struct my_unpacked_struct' would need
 to be packed too.
 struct my_unpacked_struct
 {
 char c;
 int i;
 };
 
 struct my_packed_struct __attribute__ ((__packed__))
 {
 char c;
 int i;
 struct my_unpacked_struct s;
 };
 You may only specify this attribute on the definition of a `enum',
 `struct' or `union', not on a `typedef' which does not also define
 the enumerated type, structure or union.
transparent_union
Found in versions: 2.7-3.4
Description:
 This attribute, attached to a `union' type definition, indicates
 that any function parameter having that union type causes calls to
 that function to be treated in a special way.
 First, the argument corresponding to a transparent union type can
 be of any type in the union; no cast is required. Also, if the
 union contains a pointer type, the corresponding argument can be a
 null pointer constant or a void pointer expression; and if the
 union contains a void pointer type, the corresponding argument can
 be any pointer expression. If the union member type is a pointer,
 qualifiers like `const' on the referenced type must be respected,
 just as with normal pointer conversions.
 Second, the argument is passed to the function using the calling
 conventions of the first member of the transparent union, not the
 calling conventions of the union itself. All members of the union
 must have the same machine representation; this is necessary for
 this argument passing to work properly.
 Transparent unions are designed for library functions that have
 multiple interfaces for compatibility reasons. For example,
 suppose the `wait' function must accept either a value of type
 `int *' to comply with Posix, or a value of type `union wait *' to
 comply with the 4.1BSD interface. If `wait''s parameter were
 `void *', `wait' would accept both kinds of arguments, but it
 would also accept any other pointer type and this would make
 argument type checking less useful. Instead, `' might
 define the interface as follows:
 typedef union
 {
 int *__ip;
 union wait *__up;
 } wait_status_ptr_t __attribute__ ((__transparent_union__));
 
 pid_t wait (wait_status_ptr_t);
 This interface allows either `int *' or `union wait *' arguments
 to be passed, using the `int *' calling convention. The program
 can call `wait' with arguments of either type:
 int w1 () { int w; return wait (&w); }
 int w2 () { union wait w; return wait (&w); }
 With this interface, `wait''s implementation might look like this:
 pid_t wait (wait_status_ptr_t p)
 {
 return waitpid (-1, p.__ip, 0);
 }
unused
Found in versions: 2.8 e1.1-3.4
Description:
 When attached to a type (including a `union' or a `struct'), this
 attribute means that variables of that type are meant to appear
 possibly unused. GCC will not produce a warning for any variables
 of that type, even if the variable appears to do nothing. This is
 often the case with lock or thread classes, which are usually
 defined and then not referenced, but contain constructors and
 destructors that have nontrivial bookkeeping functions.

'c extensions' 'variable attributes'

aligned -- cleanup -- common -- deprecated -- dllexport -- dllimport -- gcc_struct -- mode -- model -- ms_struct -- nocommon -- packed -- section -- shared -- tls_model -- transparent_union -- unused -- vector_size -- weak
aligned (ALIGNMENT)
Found in versions: 2.3-3.4
Description:
 This attribute specifies a minimum alignment for the variable or
 structure field, measured in bytes. For example, the declaration:
 int x __attribute__ ((aligned (16))) = 0;
 causes the compiler to allocate the global variable `x' on a
 16-byte boundary. On a 68040, this could be used in conjunction
 with an `asm' expression to access the `move16' instruction which
 requires 16-byte aligned operands.
 You can also specify the alignment of structure fields. For
 example, to create a double-word aligned `int' pair, you could
 write:
 struct foo { int x[2] __attribute__ ((aligned (8))); };
 This is an alternative to creating a union with a `double' member
 that forces the union to be double-word aligned.
 As in the preceding examples, you can explicitly specify the
 alignment (in bytes) that you wish the compiler to use for a given
 variable or structure field. Alternatively, you can leave out the
 alignment factor and just ask the compiler to align a variable or
 field to the maximum useful alignment for the target machine you
 are compiling for. For example, you could write:
 short array[3] __attribute__ ((aligned));
 Whenever you leave out the alignment factor in an `aligned'
 attribute specification, the compiler automatically sets the
 alignment for the declared variable or field to the largest
 alignment which is ever used for any data type on the target
 machine you are compiling for. Doing this can often make copy
 operations more efficient, because the compiler can use whatever
 instructions copy the biggest chunks of memory when performing
 copies to or from the variables or fields that you have aligned
 this way.
 The `aligned' attribute can only increase the alignment; but you
 can decrease it by specifying `packed' as well. See below.
 Note that the effectiveness of `aligned' attributes may be limited
 by inherent limitations in your linker. On many systems, the
 linker is only able to arrange for variables to be aligned up to a
 certain maximum alignment. (For some linkers, the maximum
 supported alignment may be very very small.) If your linker is
 only able to align variables up to a maximum of 8 byte alignment,
 then specifying `aligned(16)' in an `__attribute__' will still
 only provide you with 8 byte alignment. See your linker
 documentation for further information.
cleanup (CLEANUP_FUNCTION)
Found in versions: 3.3 3.4
Description:
 The `cleanup' attribute runs a function when the variable goes out
 of scope. This attribute can only be applied to auto function
 scope variables; it may not be applied to parameters or variables
 with static storage duration. The function must take one
 parameter, a pointer to a type compatible with the variable. The
 return value of the function (if any) is ignored.
 If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run
 during the stack unwinding that happens during the processing of
 the exception. Note that the `cleanup' attribute does not allow
 the exception to be caught, only to perform an action. It is
 undefined what happens if CLEANUP_FUNCTION does not return
 normally.
common
Found in versions: 3.3 3.4
Description:
deprecated
Found in versions: 3.1-3.4
Description:
 The `deprecated' attribute results in a warning if the variable is
 used anywhere in the source file. This is useful when identifying
 variables that are expected to be removed in a future version of a
 program. The warning also includes the location of the declaration
 of the deprecated variable, to enable users to easily find further
 information about why the variable is deprecated, or what they
 should do instead. Note that the warning only occurs for uses:
 extern int old_var __attribute__ ((deprecated));
 extern int old_var;
 int new_fn () { return old_var; }
 results in a warning on line 3 but not line 2.
 The `deprecated' attribute can also be used for functions and
 types (*note Function Attributes::, *note Type Attributes::.)
dllexport
Found in versions: 3.3 3.4
Description:
 The `dllexport' attribute is described in *Note Function
 Attributes::.
dllimport
Found in versions: 3.3 3.4
Description:
 The `dllimport' attribute is described in *Note Function
 Attributes::.
gcc_struct
Found in versions: 3.4
Description:
 If `packed' is used on a structure, or if bit-fields are used it
 may be that the Microsoft ABI packs them differently than GCC
 would normally pack them. Particularly when moving packed data
 between functions compiled with GCC and the native Microsoft
 compiler (either via function call or as data in a file), it may
 be necessary to access either format.
 Currently `-m[no-]ms-bitfields' is provided for the Microsoft
 Windows X86 compilers to match the native Microsoft compiler.
mode (MODE)
Found in versions: 2.3-3.4
Description:
 This attribute specifies the data type for the
 declaration--whichever type corresponds to the mode MODE. This in
 effect lets you request an integer or floating point type
 according to its width.
 You may also specify a mode of `byte' or `__byte__' to indicate
 the mode corresponding to a one-byte integer, `word' or `__word__'
 for the mode of a one-word integer, and `pointer' or `__pointer__'
 for the mode used to represent pointers.
model (MODEL-NAME)
Found in versions: 2.8-3.4
Description:
 Use this attribute on the M32R/D to set the addressability of an
 object. The identifier MODEL-NAME is one of `small', `medium', or
 `large', representing each of the code models.
 Small model objects live in the lower 16MB of memory (so that their
 addresses can be loaded with the `ld24' instruction).
 Medium and large model objects may live anywhere in the 32-bit
 address space (the compiler will generate `seth/add3' instructions
 to load their addresses).
ms_struct
Found in versions: 3.4
Description:
nocommon
Found in versions: 2.7-3.4
Description:
 The `common' attribute requests GCC to place a variable in
 "common" storage. The `nocommon' attribute requests the opposite
 - to allocate space for it directly.
 These attributes override the default chosen by the `-fno-common'
 and `-fcommon' flags respectively.
packed
Found in versions: 2.3-3.4
Description:
 The `packed' attribute specifies that a variable or structure field
 should have the smallest possible alignment--one byte for a
 variable, and one bit for a field, unless you specify a larger
 value with the `aligned' attribute.
 Here is a structure in which the field `x' is packed, so that it
 immediately follows `a':
 struct foo
 {
 char a;
 int x[2] __attribute__ ((packed));
 };
section ("SECTION-NAME")
Found in versions: 2.6-3.4
Description:
 Normally, the compiler places the objects it generates in sections
 like `data' and `bss'. Sometimes, however, you need additional
 sections, or you need certain particular variables to appear in
 special sections, for example to map to special hardware. The
 `section' attribute specifies that a variable (or function) lives
 in a particular section. For example, this small program uses
 several specific section names:
 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
 int init_data __attribute__ ((section ("INITDATA"))) = 0;
 
 main()
 {
 /* Initialize stack pointer */
 init_sp (stack + sizeof (stack));
 
 /* Initialize initialized data */
 memcpy (&init_data, &data, &edata - &data);
 
 /* Turn on the serial ports */
 init_duart (&a);
 init_duart (&b);
 }
 Use the `section' attribute with an _initialized_ definition of a
 _global_ variable, as shown in the example. GCC issues a warning
 and otherwise ignores the `section' attribute in uninitialized
 variable declarations.
 You may only use the `section' attribute with a fully initialized
 global definition because of the way linkers work. The linker
 requires each object be defined once, with the exception that
 uninitialized variables tentatively go in the `common' (or `bss')
 section and can be multiply "defined". You can force a variable
 to be initialized with the `-fno-common' flag or the `nocommon'
 attribute.
 Some file formats do not support arbitrary sections so the
 `section' attribute is not available on all platforms. If you
 need to map the entire contents of a module to a particular
 section, consider using the facilities of the linker instead.
shared
Found in versions: 3.0-3.4
Description:
 On Microsoft Windows, in addition to putting variable definitions
 in a named section, the section can also be shared among all
 running copies of an executable or DLL. For example, this small
 program defines shared data by putting it in a named section
 `shared' and marking the section shareable:
 int foo __attribute__((section ("shared"), shared)) = 0;
 
 int
 main()
 {
 /* Read and write foo. All running
 copies see the same value. */
 return 0;
 }
 You may only use the `shared' attribute along with `section'
 attribute with a fully initialized global definition because of
 the way linkers work. See `section' attribute for more
 information.
 The `shared' attribute is only available on Microsoft Windows.
tls_model ("TLS_MODEL")
Found in versions: 3.3 3.4
Description:
 The `tls_model' attribute sets thread-local storage model (*note
 Thread-Local::) of a particular `__thread' variable, overriding
 `-ftls-model=' command line switch on a per-variable basis. The
 TLS_MODEL argument should be one of `global-dynamic',
 `local-dynamic', `initial-exec' or `local-exec'.
 Not all targets support this attribute.
transparent_union
Found in versions: 2.6-3.4
Description:
 This attribute, attached to a function parameter which is a union,
 means that the corresponding argument may have the type of any
 union member, but the argument is passed as if its type were that
 of the first union member. For more details see *Note Type
 Attributes::. You can also use this attribute on a `typedef' for
 a union data type; then it applies to all function parameters with
 that type.
unused
Found in versions: 2.7-3.4
Description:
 This attribute, attached to a variable, means that the variable is
 meant to be possibly unused. GCC will not produce a warning for
 this variable.
vector_size (BYTES)
Found in versions: 3.1-3.4
Description:
 This attribute specifies the vector size for the variable,
 measured in bytes. For example, the declaration:
 int foo __attribute__ ((vector_size (16)));
 causes the compiler to set the mode for `foo', to be 16 bytes,
 divided into `int' sized units. Assuming a 32-bit int (a vector of
 4 units of 4 bytes), the corresponding mode of `foo' will be V4SI.
 This attribute is only applicable to integral and float scalars,
 although arrays, pointers, and function return values are allowed
 in conjunction with this construct.
 Aggregates with this attribute are invalid, even if they are of
 the same size as a corresponding scalar. For example, the
 declaration:
 struct S { int a; };
 struct S __attribute__ ((vector_size (16))) foo;
 is invalid even if the size of the structure is the same as the
 size of the `int'.
weak
Found in versions: 2.7-3.4
Description:
 The `weak' attribute is described in *Note Function Attributes::.

AltStyle によって変換されたページ (->オリジナル) /