From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: a07f3367d7,c02604a46964120 X-Google-Attributes: gida07f3367d7,public,usenet X-Google-NewGroupId: yes X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news3.google.com!feeder2.cambriumusenet.nl!feed.tweaknews.nl!194.134.4.91.MISMATCH!news2.euro.net!newsfeed.freenet.ag!feeder.erje.net!nuzba.szn.dk!pnx.dk!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Niklas Holsti Newsgroups: comp.lang.ada Subject: Re: Noob question: universal_integer type Date: Sat, 22 May 2010 10:16:36 +0300 Organization: Tidorum Ltd Message-ID: <85pemlFod9U1@mid.individual.net> References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net wL2/xMsFvGcZfRf+45r7VgOI1VkgTV30PaVt2PJmB3pLS9lHcT Cancel-Lock: sha1:dW8BDC5rEe77DjflI0naHLBifqE= User-Agent: Mozilla-Thunderbird 2.0.0.24 (X11/20100328) In-Reply-To: Xref: g2news2.google.com comp.lang.ada:11870 Date: 2010-05-22T10:16:36+03:00 List-Id: Jeffrey R. Carter wrote: > Duke Normandin wrote: >> >> Let me get this right... if I use an undeclared integer in an expression, >> Ada will "deem it" to be a "universal_integer" and not choke at >> compile-time? > > I don't know, and I've been using Ada since 1984. What is "an undeclared > integer"? > > 17 is an integer literal; all integer literals are universal_integer. 17 > is not an undeclared integer. > > What the tutorial is trying to get across is that Ada, unlike some > languages, does not have typed numeric literals (see also > universal_real). You might encounter a language in which 10 is a literal > of type int and 10L a literal of long int, for example. In Ada, all > integer literals are universal_integer, and implicitly converted to > specific integer types as required. > > Partly this makes life easier: you can change the type of a variable and > not have to change all the literals used with that variable; and partly > it's pretty much needed in a language that lets you define your own > numeric types. Perhaps it is also worth mentioning that Ada does have a way of explicitly indicating the type to be chosen for a literal, by "qualifying" it with a type name. This can be necessary to resolve overloaded operation names. For example, assume that you define two integer types: type Apples is range 0 .. 20; type Ants is range 0 .. 1_000_000; and then define a procedure "Eat" for each type, with different content for eating apples and for eating ants: procedure Eat (Items : Apples) ... end Eat; procedure Eat (Items : Ants) ... end Eat; A call of Eat with a literal parameter, for example Eat (17), is then ambiguous (and the compiler will tell you so). To show if you are eating apples or ants, you qualify the literal with the type name and an apostrophe, as in Eat (Apples'(17)); for eating 17 apples, or Eat (Ants'(17)) for eating 17 ants. Since the type of the parameter is now explicit, the compiler knows which procedure Eat is to be called. -- Niklas Holsti Tidorum Ltd niklas holsti tidorum fi . @ .