Mail Archives: djgpp/2011/08/26/18:45:07
X-Authentication-Warning: | delorie.com: mail set sender to djgpp-bounces using -f
|
From: | Rugxulo <rugxulo AT gmail DOT com>
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | Re: Array initialization question
|
Date: | Fri, 26 Aug 2011 15:33:36 -0700 (PDT)
|
Organization: | http://groups.google.com
|
Lines: | 58
|
Message-ID: | <d68b38f3-7d55-4d62-b36d-a61698d9f3c2@x2g2000yql.googlegroups.com>
|
References: | <j393ip$q9n$1 AT news DOT albasani DOT net>
|
NNTP-Posting-Host: | 65.13.115.246
|
Mime-Version: | 1.0
|
X-Trace: | posting.google.com 1314398353 27065 127.0.0.1 (26 Aug 2011 22:39:13 GMT)
|
X-Complaints-To: | groups-abuse AT google DOT com
|
NNTP-Posting-Date: | Fri, 26 Aug 2011 22:39:13 +0000 (UTC)
|
Complaints-To: | groups-abuse AT google DOT com
|
Injection-Info: | x2g2000yql.googlegroups.com; posting-host=65.13.115.246; posting-account=p5rsXQoAAAB8KPnVlgg9E_vlm2dvVhfO
|
User-Agent: | G2/1.0
|
X-Google-Web-Client: | true
|
X-Google-Header-Order: | HUALESNKRC
|
X-HTTP-UserAgent: | Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0,gzip(gfe)
|
Bytes: | 3473
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
X-MIME-Autoconverted: | from quoted-printable to 8bit by delorie.com id p7QMj2Bc024395
|
Reply-To: | djgpp AT delorie DOT com
|
Hi,
You're lucky that I was just learning about this yesterday (as I'm
not really a C coder, barely)!
On Aug 27, 5:36 am, Mok-Kong Shen <mok-kong DOT s DOT DOT DOT AT t-online DOT de> wrote:
>
> I found that lines like
>
> const int sz=3;
> int arr[sz];
>
> seem to work well as C code. However I can't have an initialization list
> e.g.
>
> int arr[sz]={ 0,1,2 };
Confusing stuff. Apparently it doesn't work. You can have "variable
length arrays" but not initialize them at runtime??
http://gcc.gnu.org/c99status.html
"Variable length arrays" are determined at runtime as opposed to true
compile time constant (#define). "sz" is a read-only variable that is
initialized at startup to value 3. So normal C89 (and apparently even
C99) doesn't like this runtime array initialization. Anyways, GCC
(still) is only "-std=gnu89" by default ("until C99 is fully
implemented??). So if you have GCC 4.5.x, try "-std=c99" for VLAs.
(BTW, I find it interesting that Clang is C99 compatible by default,
but there's obviously no DOS port, heheh.)
http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
Actually, at first I thought you were referring to "compound literals"
but apparently not. (Also related: "designated initializers".)
http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Compound-Literals.html
http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
Obligatory other intersting links:
http://en.wikipedia.org/wiki/C99
http://www.openwatcom.org/index.php/C99_Compliance
> On the other hand such initialization lists seem to be ok for codes
> running in Visual C++. Is this due to a difference between standards
> of C and C++?
Probably, yes, though I'm not sure how or why (as I know literally nil
about C++). The latest C++0x / C++11 (finalized but upcoming
publication) standard has better C99 compatibility. But MSVC 2010
still doesn't support C99 at all, they prefer to focus on C++. There
is some minimal C++11 support in various compilers (e.g. GCC 4.3.x on
up), but of course nothing fully yet. (I count 18 "no"s of unsupported
stuff listed on GCC's page, heheh, and they're apparently one of the
best re: compliance so far.)
http://gcc.gnu.org/projects/cxx0x.html
http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport
- Raw text -