⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compound-literals.html

📁 自己收集的linux入门到学懂高级编程书集 包括linux程序设计第三版
💻 HTML
字号:
<html lang="en"><head><title>Using the GNU Compiler Collection (GCC)</title><meta http-equiv="Content-Type" content="text/html"><meta name="description" content="Using the GNU Compiler Collection (GCC)"><meta name="generator" content="makeinfo 4.6"><!--Copyright &copy; 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.   <p>Permission is granted to copy, distribute and/or modify this documentunder the terms of the GNU Free Documentation License, Version 1.2 orany later version published by the Free Software Foundation; with theInvariant Sections being "GNU General Public License" and "FundingFree Software", the Front-Cover texts being (a) (see below), and withthe Back-Cover Texts being (b) (see below).  A copy of the license isincluded in the section entitled "GNU Free Documentation License".   <p>(a) The FSF's Front-Cover Text is:   <p>A GNU Manual   <p>(b) The FSF's Back-Cover Text is:   <p>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 }--></style></head><body><div class="node"><p>Node:&nbsp;<a name="Compound%20Literals">Compound Literals</a>,Next:&nbsp;<a rel="next" accesskey="n" href="Designated-Inits.html#Designated%20Inits">Designated Inits</a>,Previous:&nbsp;<a rel="previous" accesskey="p" href="Initializers.html#Initializers">Initializers</a>,Up:&nbsp;<a rel="up" accesskey="u" href="C-Extensions.html#C%20Extensions">C Extensions</a><hr><br></div><h3 class="section">Compound Literals</h3><p>ISO C99 supports compound literals.  A compound literal looks likea cast containing an initializer.  Its value is an object of thetype specified in the cast, containing the elements specified inthe initializer; it is an lvalue.  As an extension, GCC supportscompound literals in C89 mode and in C++.   <p>Usually, the specified type is a structure.  Assume that<code>struct foo</code> and <code>structure</code> are declared as shown:<pre class="smallexample">     struct foo {int a; char b[2];} structure;     </pre><p>Here is an example of constructing a <code>struct foo</code> with a compound literal:<pre class="smallexample">     structure = ((struct foo) {x + y, 'a', 0});     </pre><p>This is equivalent to writing the following:<pre class="smallexample">     {       struct foo temp = {x + y, 'a', 0};       structure = temp;     }     </pre>   <p>You can also construct an array.  If all the elements of the compound literalare (made up of) simple constant expressions, suitable for use ininitializers of objects of static storage duration, then the compoundliteral can be coerced to a pointer to its first element and used insuch an initializer, as shown here:<pre class="smallexample">     char **foo = (char *[]) { "x", "y", "z" };     </pre>   <p>Compound literals for scalar types and union types are isalso allowed, but then the compound literal is equivalentto a cast.   <p>As a GNU extension, GCC allows initialization of objects with static storageduration by compound literals (which is not possible in ISO C99, becausethe initializer is not a constant). It is handled as if the object was initialized only with the bracketenclosed list if compound literal's and object types match. The initializer list of the compound literal must be constant. If the object being initialized has array type of unknown size, the size isdetermined by compound literal size.<pre class="smallexample">     static struct foo x = (struct foo) {1, 'a', 'b'};     static int y[] = (int []) {1, 2, 3};     static int z[] = (int [3]) {1};     </pre><p>The above lines are equivalent to the following:<pre class="smallexample">     static struct foo x = {1, 'a', 'b'};     static int y[] = {1, 2, 3};     static int z[] = {1, 0, 0};     </pre>   </body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -