hc
2023-05-26 a23f51ed7a39e452c1037343a84d7db1ca2c5bd7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2016 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. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Using the GNU Compiler Collection (GCC): Structure-Layout Pragmas</title>
 
<meta name="description" content="Using the GNU Compiler Collection (GCC): Structure-Layout Pragmas">
<meta name="keywords" content="Using the GNU Compiler Collection (GCC): Structure-Layout Pragmas">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Pragmas.html#Pragmas" rel="up" title="Pragmas">
<link href="Weak-Pragmas.html#Weak-Pragmas" rel="next" title="Weak Pragmas">
<link href="Symbol_002dRenaming-Pragmas.html#Symbol_002dRenaming-Pragmas" rel="prev" title="Symbol-Renaming Pragmas">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
 
 
</head>
 
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Structure_002dLayout-Pragmas"></a>
<div class="header">
<p>
Next: <a href="Weak-Pragmas.html#Weak-Pragmas" accesskey="n" rel="next">Weak Pragmas</a>, Previous: <a href="Symbol_002dRenaming-Pragmas.html#Symbol_002dRenaming-Pragmas" accesskey="p" rel="prev">Symbol-Renaming Pragmas</a>, Up: <a href="Pragmas.html#Pragmas" accesskey="u" rel="up">Pragmas</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Structure_002dLayout-Pragmas-1"></a>
<h4 class="subsection">6.61.10 Structure-Layout Pragmas</h4>
 
<p>For compatibility with Microsoft Windows compilers, GCC supports a
set of <code>#pragma</code> directives that change the maximum alignment of
members of structures (other than zero-width bit-fields), unions, and
classes subsequently defined. The <var>n</var> value below always is required
to be a small power of two and specifies the new alignment in bytes.
</p>
<ol>
<li> <code>#pragma pack(<var>n</var>)</code> simply sets the new alignment.
</li><li> <code>#pragma pack()</code> sets the alignment to the one that was in
effect when compilation started (see also command-line option
<samp>-fpack-struct[=<var>n</var>]</samp> see <a href="Code-Gen-Options.html#Code-Gen-Options">Code Gen Options</a>).
</li><li> <code>#pragma pack(push[,<var>n</var>])</code> pushes the current alignment
setting on an internal stack and then optionally sets the new alignment.
</li><li> <code>#pragma pack(pop)</code> restores the alignment setting to the one
saved at the top of the internal stack (and removes that stack entry).
Note that <code>#pragma pack([<var>n</var>])</code> does not influence this internal
stack; thus it is possible to have <code>#pragma pack(push)</code> followed by
multiple <code>#pragma pack(<var>n</var>)</code> instances and finalized by a single
<code>#pragma pack(pop)</code>.
</li></ol>
 
<p>Some targets, e.g. x86 and PowerPC, support the <code>#pragma ms_struct</code>
directive which lays out structures and unions subsequently defined as the
documented <code>__attribute__ ((ms_struct))</code>.
</p>
<ol>
<li> <code>#pragma ms_struct on</code> turns on the Microsoft layout.
</li><li> <code>#pragma ms_struct off</code> turns off the Microsoft layout.
</li><li> <code>#pragma ms_struct reset</code> goes back to the default layout.
</li></ol>
 
<p>Most targets also support the <code>#pragma scalar_storage_order</code> directive
which lays out structures and unions subsequently defined as the documented
<code>__attribute__ ((scalar_storage_order))</code>.
</p>
<ol>
<li> <code>#pragma scalar_storage_order big-endian</code> sets the storage order
of the scalar fields to big-endian.
</li><li> <code>#pragma scalar_storage_order little-endian</code> sets the storage order
of the scalar fields to little-endian.
</li><li> <code>#pragma scalar_storage_order default</code> goes back to the endianness
that was in effect when compilation started (see also command-line option
<samp>-fsso-struct=<var>endianness</var></samp> see <a href="C-Dialect-Options.html#C-Dialect-Options">C Dialect Options</a>).
</li></ol>
 
<hr>
<div class="header">
<p>
Next: <a href="Weak-Pragmas.html#Weak-Pragmas" accesskey="n" rel="next">Weak Pragmas</a>, Previous: <a href="Symbol_002dRenaming-Pragmas.html#Symbol_002dRenaming-Pragmas" accesskey="p" rel="prev">Symbol-Renaming Pragmas</a>, Up: <a href="Pragmas.html#Pragmas" accesskey="u" rel="up">Pragmas</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
 
 
 
</body>
</html>