<html lang="en"> <head> <title>GNU Fortran Compiler Directives - The GNU Fortran Compiler</title> <meta http-equiv="Content-Type" content="text/html"> <meta name="description" content="The GNU Fortran Compiler"> <meta name="generator" content="makeinfo 4.13"> <link title="Top" rel="start" href="index.html#Top"> <link rel="up" href="Mixed_002dLanguage-Programming.html#Mixed_002dLanguage-Programming" title="Mixed-Language Programming"> <link rel="prev" href="Interoperability-with-C.html#Interoperability-with-C" title="Interoperability with C"> <link rel="next" href="Non_002dFortran-Main-Program.html#Non_002dFortran-Main-Program" title="Non-Fortran Main Program"> <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> <!-- Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being ``Funding Free Software'', the Front-Cover Texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled ``GNU Free Documentation License''. (a) The FSF's Front-Cover Text is: A GNU Manual (b) The FSF's Back-Cover Text is: You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development.--> <meta http-equiv="Content-Style-Type" content="text/css"> <style type="text/css"><!-- pre.display { font-family:inherit } pre.format { font-family:inherit } pre.smalldisplay { font-family:inherit; font-size:smaller } pre.smallformat { font-family:inherit; font-size:smaller } pre.smallexample { font-size:smaller } pre.smalllisp { font-size:smaller } span.sc { font-variant:small-caps } span.roman { font-family:serif; font-weight:normal; } span.sansserif { font-family:sans-serif; font-weight:normal; } --></style> </head> <body> <div class="node"> <a name="GNU-Fortran-Compiler-Directives"></a> <p> Next: <a rel="next" accesskey="n" href="Non_002dFortran-Main-Program.html#Non_002dFortran-Main-Program">Non-Fortran Main Program</a>, Previous: <a rel="previous" accesskey="p" href="Interoperability-with-C.html#Interoperability-with-C">Interoperability with C</a>, Up: <a rel="up" accesskey="u" href="Mixed_002dLanguage-Programming.html#Mixed_002dLanguage-Programming">Mixed-Language Programming</a> <hr> </div> <h3 class="section">7.2 GNU Fortran Compiler Directives</h3> <p>The Fortran standard standard describes how a conforming program shall behave; however, the exact implementation is not standardized. In order to allow the user to choose specific implementation details, compiler directives can be used to set attributes of variables and procedures which are not part of the standard. Whether a given attribute is supported and its exact effects depend on both the operating system and on the processor; see <a href="../gcc/index.html#Top">C Extensions</a> for details. <p>For procedures and procedure pointers, the following attributes can be used to change the calling convention: <ul> <li><code>CDECL</code> – standard C calling convention <li><code>STDCALL</code> – convention where the called procedure pops the stack <li><code>FASTCALL</code> – part of the arguments are passed via registers instead using the stack </ul> <p>Besides changing the calling convention, the attributes also influence the decoration of the symbol name, e.g., by a leading underscore or by a trailing at-sign followed by the number of bytes on the stack. When assigning a procedure to a procedure pointer, both should use the same calling convention. <p>On some systems, procedures and global variables (module variables and <code>COMMON</code> blocks) need special handling to be accessible when they are in a shared library. The following attributes are available: <ul> <li><code>DLLEXPORT</code> – provide a global pointer to a pointer in the DLL <li><code>DLLIMPORT</code> – reference the function or variable using a global pointer </ul> <p>The attributes are specified using the syntax <p><code>!GCC$ ATTRIBUTES</code> <var>attribute-list</var> <code>::</code> <var>variable-list</var> <p>where in free-form source code only whitespace is allowed before <code>!GCC$</code> and in fixed-form source code <code>!GCC$</code>, <code>cGCC$</code> or <code>*GCC$</code> shall start in the first column. <p>For procedures, the compiler directives shall be placed into the body of the procedure; for variables and procedure pointers, they shall be in the same declaration part as the variable or procedure pointer. </body></html>