The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
 lang="en" dir="ltr">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>
    #pragma    [C++ Reference]
  </title>

  <meta name="generator" content="DokuWiki Release 2009-12-25c &quot;Lemming&quot;" />
<meta name="robots" content="index,follow" />
<meta name="date" content="2009-10-12T16:49:39-0700" />
<meta name="keywords" content="preprocessor,pragma" />
<link rel="search" type="application/opensearchdescription+xml" href="/wiki/lib/exe/opensearch.php" title="C++ Reference" />
<link rel="start" href="/wiki/" />
<link rel="contents" href="/wiki/preprocessor/pragma?do=index" title="Index" />
<link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/wiki/feed.php" />
<link rel="alternate" type="application/rss+xml" title="Current Namespace" href="/wiki/feed.php?mode=list&amp;ns=preprocessor" />
<link rel="edit" title="Edit this page" href="/wiki/preprocessor/pragma?do=edit" />
<link rel="alternate" type="text/html" title="Plain HTML" href="/wiki/_export/xhtml/preprocessor/pragma" />
<link rel="alternate" type="text/plain" title="Wiki Markup" href="/wiki/_export/raw/preprocessor/pragma" />
<link rel="canonical" href="http://www.cppreference.com/wiki/preprocessor/pragma" />
<link rel="stylesheet" media="all" type="text/css" href="/wiki/lib/exe/css.php?s=all&amp;t=custom1&amp;tseed=1272971091" />
<link rel="stylesheet" media="screen" type="text/css" href="/wiki/lib/exe/css.php?t=custom1&amp;tseed=1272971091" />
<link rel="stylesheet" media="print" type="text/css" href="/wiki/lib/exe/css.php?s=print&amp;t=custom1&amp;tseed=1272971091" />
<script type="text/javascript" charset="utf-8" ><!--//--><![CDATA[//><!--
var NS='preprocessor';var JSINFO = {"id":"preprocessor:pragma","namespace":"preprocessor"};
//--><!]]></script>
<script type="text/javascript" charset="utf-8" src="/wiki/lib/exe/js.php?tseed=1272971091" ></script>

  <link rel="shortcut icon" href="/wiki/lib/tpl/custom1/images/favicon.png" />

  </head>

<body>
<div class="dokuwiki">
  
  <div class="stylehead">

    <div class="breadcrumbs">
      <span class="bchead">You are here: </span><a href="../start.html"  title="start">C++ Reference</a> &raquo; <a href="../preprocessor/start.html"  title="preprocessor:start">Preprocessor Commands</a> &raquo; <a href="../preprocessor/pragma.html"  title="preprocessor:pragma">#pragma</a>    </div>
    
  </div>


  
  
  <div class="page">

    <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2828341-1";
urchinTracker();
</script>
    <!-- wikipage start -->
    


<h2><a name="pragma" id="pragma">#pragma</a></h2>
<div class="level2">
<pre class="c code c++" style="font-family:monospace;">    <span class="co2">#pragma lexems</span></pre>
<p>
The #pragma command gives the programmer the ability to tell the compiler to do certain things. Since the #pragma command is implementation specific, uses vary from compiler to compiler. One option might be to trace program execution.
</p>

<p>
Below are some compiler families, the operating system on which they&#039;re found and the pragma directives which are part of that implementation
</p>

<p>
Also pragma is used to allow the programmer to call a function before main is called or after main exits.

</p>
<pre class="c code c++" style="font-family:monospace;"><span class="co2">#pragma startup fun() //The function must have return void type &amp; no parameters.</span>
<span class="co2">#pragma exit fun1()</span></pre>
</div>

<h3><a name="gnu_c_compiler_gcc_-_gnulinux_bsd_gnuhurd_gnudarwinmac_os_x_windows_mingw" id="gnu_c_compiler_gcc_-_gnulinux_bsd_gnuhurd_gnudarwinmac_os_x_windows_mingw">GNU C Compiler (GCC) - GNU/Linux, BSD, GNU/Hurd, GNU/Darwin/Mac OS X, Windows (MinGW)</a></h3>
<div class="level3">

</div>

<h4><a name="redefine_extname" id="redefine_extname">redefine_extname</a></h4>
<div class="level4">
<pre class="c code c++" style="font-family:monospace;">    <span class="co2">#pragma redefine_extname printf prnt</span></pre>
<p>

Gives C functions a different programmer defined symbol when translated to assembly language.
</p>

</div>

<h4><a name="extern_prefix" id="extern_prefix">extern_prefix</a></h4>
<div class="level4">
<pre class="c code c++" style="font-family:monospace;">    <span class="co2">#pragma extern_prefix ext_ // begin prefixing</span>
    <span class="co1">// your external symbols with the assembly prefix is here</span>
    <span class="co2">#pragma extern_prefix // end prefixing</span></pre>
<p>

Prefixes all external function assembly symbols with the string prefix. Another #pragma extern_prefix will end prefixing of externals. 
</p>

</div>

<h4><a name="pack" id="pack">pack</a></h4>
<div class="level4">
<pre class="c code c++" style="font-family:monospace;">    <span class="co2">#pragma pack(64) // optimize all subsequent classes, unions, and structures for 64 bit code</span></pre>
<p>

Packing is an optimization method that makes the members of structures, classes, and unions align to a factor of the packing boundary. This usually makes it easier (thus faster) for the processor to access data since it&#039;s packed to align with what the processor is used to dealing with, however it costs memory by having random unnecessary garbage data inserted to align the code with the pack. the numerical value in parenthesis must be a factor of 2 (2, 4, 8, 16, 32, 64….). There are other ways to use “pack” and they&#039;re described below but above is the simplest and most common way. you can use 

</p>
<pre class="c code c++" style="font-family:monospace;"><span class="co2">#pragma pack() /* with empty parenthesis */</span></pre>
<p>

to reset the packing to the compiler default. 
</p>

<p>

← #pragma pack(push) and #pragma pack(pop) are on the way, I&#039;m still researching them and their functionality. -/&gt;
← This document is still under construction, I intend to continue adding compilers and their pragma options instead of leaving this largely blank. -GinoMan -/&gt; 
</p>

</div>

    <!-- wikipage stop -->
  </div>

  <div class="clearer">&nbsp;</div>

  
  <div class="stylefoot">

    <div class="meta">
      <div class="user">
              </div>
      <!--
      <div class="doc">
        preprocessor/pragma.txt &middot; Last modified: 10/12/2009 16:49 by shibu      </div>
      -->
    </div>

   
    </div></div></body>
</html>