Rationale for International Standard— Programming Languages— C

Total Page:16

File Type:pdf, Size:1020Kb

Rationale for International Standard— Programming Languages— C Rationale for International Standard— Programming Languages— C Revision 2 20 October 1999 UNIX is a trademark of The Open Group. DEC and PDP-11 are trademarks of Compaq Computer Corporation. POSIX is a trademark of IEEE. CONTENTS 0. Introduction .............................................................................................................................. 1 0.1 Organization of the document............................................................................................ 5 1. Scope ........................................................................................................................................ 6 2. Normative References .............................................................................................................. 6 3. Terms and definitions............................................................................................................... 6 4. Conformance ............................................................................................................................ 7 5. Environment............................................................................................................................. 9 5.1 Conceptual models............................................................................................................. 9 5.1.1 Translation environment.............................................................................................. 9 5.1.2 Execution environments............................................................................................ 11 5.2 Environmental considerations.......................................................................................... 13 5.2.1 Character sets ............................................................................................................ 13 5.2.2 Character display semantics ...................................................................................... 17 5.2.3 Signals and interrupts ................................................................................................ 18 5.2.4 Environmental limits................................................................................................. 18 6. Language ................................................................................................................................ 23 6.2 Concepts........................................................................................................................... 23 6.2.1 Scopes of identifiers ..................................................................................................23 6.2.2 Linkages of identifiers............................................................................................... 24 6.2.3 Name spaces of identifiers ........................................................................................ 26 6.2.4 Storage durations of objects ...................................................................................... 26 6.2.5 Types ......................................................................................................................... 28 6.2.6 Representations of types............................................................................................ 30 6.2.7 Compatible type and composite type......................................................................... 31 6.3 Conversions...................................................................................................................... 31 6.3.1 Arithmetic operands .................................................................................................. 31 6.3.2 Other operands .......................................................................................................... 35 6.4 Lexical Elements.............................................................................................................. 37 6.4.1 Keywords................................................................................................................... 37 6.4.2 Identifiers................................................................................................................... 37 6.4.3 Universal character names......................................................................................... 38 6.4.4 Constants ................................................................................................................... 38 6.4.5 String literals ............................................................................................................. 41 6.4.6 Punctuators ................................................................................................................ 43 6.4.7 Header names ............................................................................................................ 44 6.4.8 Preprocessing numbers.............................................................................................. 44 6.4.9 Comments.................................................................................................................. 44 6.5 Expressions ...................................................................................................................... 45 6.5.1 Primary expressions .................................................................................................. 48 6.5.2 Postfix operators........................................................................................................ 48 6.5.3 Unary operators ......................................................................................................... 51 6.5.4 Cast operators............................................................................................................ 53 i CONTENTS 6.5.5 Multiplicative operators ............................................................................................ 54 6.5.6 Additive operators .....................................................................................................54 6.5.7 Bitwise shift operators............................................................................................... 55 6.5.8 Relational operators...................................................................................................56 6.5.9 Equality operators...................................................................................................... 56 6.5.15 Conditional operator................................................................................................ 56 6.5.16 Assignment operators.............................................................................................. 57 6.5.17 Comma operator...................................................................................................... 58 6.6 Constant expressions........................................................................................................ 58 6.7 Declarations...................................................................................................................... 59 6.7.1 Storage-class specifiers ............................................................................................. 59 6.7.2 Type specifiers........................................................................................................... 59 6.7.3 Type qualifiers........................................................................................................... 66 6.7.4 Function specifiers .................................................................................................... 71 6.7.5 Declarators................................................................................................................. 72 6.7.6 Type names................................................................................................................ 78 6.7.7 Type definitions......................................................................................................... 79 6.7.8 Initialization............................................................................................................... 79 6.8 Statements and blocks...................................................................................................... 81 6.8.1 Labeled statements .................................................................................................... 83 6.8.2 Compound statement................................................................................................. 83 6.8.3 Expression and null statements ................................................................................. 83 6.8.4 Selection statements .................................................................................................. 83 6.8.5 Iteration statements.................................................................................................... 84 6.8.6. Jump statements .......................................................................................................86 6.9 External definitions .......................................................................................................... 87 6.9.1 Function definitions...................................................................................................87 6.10 Preprocessing directives................................................................................................. 88 6.10.1 Conditional inclusion .............................................................................................. 89 6.10.2 Source file inclusion...............................................................................................
Recommended publications
  • Encapsulation and Data Abstraction
    Data abstraction l Data abstraction is the main organizing principle for building complex software systems l Without data abstraction, computing technology would stop dead in its tracks l We will study what data abstraction is and how it is supported by the programming language l The first step toward data abstraction is called encapsulation l Data abstraction is supported by language concepts such as higher-order programming, static scoping, and explicit state Encapsulation l The first step toward data abstraction, which is the basic organizing principle for large programs, is encapsulation l Assume your television set is not enclosed in a box l All the interior circuitry is exposed to the outside l It’s lighter and takes up less space, so it’s good, right? NO! l It’s dangerous for you: if you touch the circuitry, you can get an electric shock l It’s bad for the television set: if you spill a cup of coffee inside it, you can provoke a short-circuit l If you like electronics, you may be tempted to tweak the insides, to “improve” the television’s performance l So it can be a good idea to put the television in an enclosing box l A box that protects the television against damage and that only authorizes proper interaction (on/off, channel selection, volume) Encapsulation in a program l Assume your program uses a stack with the following implementation: fun {NewStack} nil end fun {Push S X} X|S end fun {Pop S X} X=S.1 S.2 end fun {IsEmpty S} S==nil end l This implementation is not encapsulated! l It has the same problems as a television set
    [Show full text]
  • So Many Date Formats: Which Should You Use? Kamlesh Patel, Jigar Patel, Dilip Patel, Vaishali Patel Rang Technologies Inc, Piscataway, NJ
    Paper – 2463-2017 So Many Date Formats: Which Should You Use? Kamlesh Patel, Jigar Patel, Dilip Patel, Vaishali Patel Rang Technologies Inc, Piscataway, NJ ABSTRACT Nearly all data is associated with some Date information. In many industries, a SAS® programmer comes across various Date formats in data that can be of numeric or character type. An industry like pharmaceuticals requires that dates be shown in ISO 8601 formats due to industry standards. Many SAS programmers commonly use a limited number of Date formats (like YYMMDD10. or DATE9.) with workarounds using scans or substring SAS functions to process date-related data. Another challenge for a programmer can be the source data, which can include either Date-Time or only Date information. How should a programmer convert these dates to the target format? There are many existing Date formats (like E8601 series, B8601 series, and so on) and informants available to convert the source Date to the required Date efficiently. In addition, there are some useful functions that we can explore for deriving timing-related variables. For these methods to be effective, one can use simple tricks to remember those formats. This poster is targeted to those who have a basic understanding of SAS dates. KEYWORDS SAS, date, time, Date-Time, format, informat, ISO 8601, tips, Basic, Extended, Notation APPLICATIONS: SAS v9.2 INTRODUCTION Date and time concept in SAS is very interesting and can be handled very efficiently if SAS programmers know beyond basics of different SAS Date formats and informats along with many different Date functions. There are various formats available to use as per need in SAS.
    [Show full text]
  • 9. Abstract Data Types
    COMPUTER SCIENCE COMPUTER SCIENCE SEDGEWICK/WAYNE SEDGEWICK/WAYNE 9. Abstract Data Types •Overview 9. Abstract Data Types •Color •Image processing •String processing Section 3.1 http://introcs.cs.princeton.edu http://introcs.cs.princeton.edu Abstract data types Object-oriented programming (OOP) A data type is a set of values and a set of operations on those values. Object-oriented programming (OOP). • Create your own data types (sets of values and ops on them). An object holds a data type value. Primitive types • Use them in your programs (manipulate objects). Variable names refer to objects. • values immediately map to machine representations data type set of values examples of operations • operations immediately map to Color three 8-bit integers get red component, brighten machine instructions. Picture 2D array of colors get/set color of pixel (i, j) String sequence of characters length, substring, compare We want to write programs that process other types of data. • Colors, pictures, strings, An abstract data type is a data type whose representation is hidden from the user. • Complex numbers, vectors, matrices, • ... Impact: We can use ADTs without knowing implementation details. • This lecture: how to write client programs for several useful ADTs • Next lecture: how to implement your own ADTs An abstract data type is a data type whose representation is hidden from the user. 3 4 Sound Strings We have already been using ADTs! We have already been using ADTs! A String is a sequence of Unicode characters. defined in terms of its ADT values (typical) Java's String ADT allows us to write Java programs that manipulate strings.
    [Show full text]
  • Abstract Data Types
    Chapter 2 Abstract Data Types The second idea at the core of computer science, along with algorithms, is data. In a modern computer, data consists fundamentally of binary bits, but meaningful data is organized into primitive data types such as integer, real, and boolean and into more complex data structures such as arrays and binary trees. These data types and data structures always come along with associated operations that can be done on the data. For example, the 32-bit int data type is defined both by the fact that a value of type int consists of 32 binary bits but also by the fact that two int values can be added, subtracted, multiplied, compared, and so on. An array is defined both by the fact that it is a sequence of data items of the same basic type, but also by the fact that it is possible to directly access each of the positions in the list based on its numerical index. So the idea of a data type includes a specification of the possible values of that type together with the operations that can be performed on those values. An algorithm is an abstract idea, and a program is an implementation of an algorithm. Similarly, it is useful to be able to work with the abstract idea behind a data type or data structure, without getting bogged down in the implementation details. The abstraction in this case is called an \abstract data type." An abstract data type specifies the values of the type, but not how those values are represented as collections of bits, and it specifies operations on those values in terms of their inputs, outputs, and effects rather than as particular algorithms or program code.
    [Show full text]
  • Abstract Data Types (Adts)
    Data abstraction: Abstract Data Types (ADTs) CSE 331 University of Washington Michael Ernst Outline 1. What is an abstract data type (ADT)? 2. How to specify an ADT – immutable – mutable 3. The ADT design methodology Procedural and data abstraction Recall procedural abstraction Abstracts from the details of procedures A specification mechanism Reasoning connects implementation to specification Data abstraction (Abstract Data Type, or ADT): Abstracts from the details of data representation A specification mechanism + a way of thinking about programs and designs Next lecture: ADT implementations Representation invariants (RI), abstraction functions (AF) Why we need Abstract Data Types Organizing and manipulating data is pervasive Inventing and describing algorithms is rare Start your design by designing data structures Write code to access and manipulate data Potential problems with choosing a data structure: Decisions about data structures are made too early Duplication of effort in creating derived data Very hard to change key data structures An ADT is a set of operations ADT abstracts from the organization to meaning of data ADT abstracts from structure to use Representation does not matter; this choice is irrelevant: class RightTriangle { class RightTriangle { float base, altitude; float base, hypot, angle; } } Instead, think of a type as a set of operations create, getBase, getAltitude, getBottomAngle, ... Force clients (users) to call operations to access data Are these classes the same or different? class Point { class Point { public float x; public float r; public float y; public float theta; }} Different: can't replace one with the other Same: both classes implement the concept "2-d point" Goal of ADT methodology is to express the sameness Clients depend only on the concept "2-d point" Good because: Delay decisions Fix bugs Change algorithms (e.g., performance optimizations) Concept of 2-d point, as an ADT class Point { // A 2-d point exists somewhere in the plane, ..
    [Show full text]
  • Csci 658-01: Software Language Engineering Python 3 Reflexive
    CSci 658-01: Software Language Engineering Python 3 Reflexive Metaprogramming Chapter 3 H. Conrad Cunningham 4 May 2018 Contents 3 Decorators and Metaclasses 2 3.1 Basic Function-Level Debugging . .2 3.1.1 Motivating example . .2 3.1.2 Abstraction Principle, staying DRY . .3 3.1.3 Function decorators . .3 3.1.4 Constructing a debug decorator . .4 3.1.5 Using the debug decorator . .6 3.1.6 Case study review . .7 3.1.7 Variations . .7 3.1.7.1 Logging . .7 3.1.7.2 Optional disable . .8 3.2 Extended Function-Level Debugging . .8 3.2.1 Motivating example . .8 3.2.2 Decorators with arguments . .9 3.2.3 Prefix decorator . .9 3.2.4 Reformulated prefix decorator . 10 3.3 Class-Level Debugging . 12 3.3.1 Motivating example . 12 3.3.2 Class-level debugger . 12 3.3.3 Variation: Attribute access debugging . 14 3.4 Class Hierarchy Debugging . 16 3.4.1 Motivating example . 16 3.4.2 Review of objects and types . 17 3.4.3 Class definition process . 18 3.4.4 Changing the metaclass . 20 3.4.5 Debugging using a metaclass . 21 3.4.6 Why metaclasses? . 22 3.5 Chapter Summary . 23 1 3.6 Exercises . 23 3.7 Acknowledgements . 23 3.8 References . 24 3.9 Terms and Concepts . 24 Copyright (C) 2018, H. Conrad Cunningham Professor of Computer and Information Science University of Mississippi 211 Weir Hall P.O. Box 1848 University, MS 38677 (662) 915-5358 Note: This chapter adapts David Beazley’s debugly example presentation from his Python 3 Metaprogramming tutorial at PyCon’2013 [Beazley 2013a].
    [Show full text]
  • ASN.1. Communication Between Heterogeneous Systems – Errata
    ASN.1. Communication between heterogeneous systems – Errata These errata concern the June 5, 2000 electronic version of the book "ASN.1. Communication between heterogeneous systems", by Olivier Dubuisson (© 2000). (freely available at http://www.oss.com/asn1/resources/books‐whitepapers‐pubs/asn1‐ books.html#dubuisson.) N.B.: The first page number refers to the PDF electronic copy and is the number printed on each page, not the number at the bottom of the Acrobat Reader window. The page number in parentheses refers to the paper copy published by Morgan Kaufmann. Page 9 (page 8 for the paper copy): ‐ last line, replace "(the number 0 low‐weighted byte" with "(the number 0 low‐weighted bit". Page 19 (page 19 for the paper copy): ‐ on the paper copy, second bullet, replace "the Physical Layer marks up..." with "the Data Link Layer marks up...". ‐ on the electronic copy, second bullet, replace "it is down to the Physical Layer to mark up..." with "it is down to the Data Link Layer to mark up...". Page 25 (page 25 for the paper copy): second paragraph, replace "that all the data exchange" with "that all the data exchanged". Page 32 (page 32 for the paper copy): last paragraph, replace "The order number has at least 12 digits" with "The order number has always 12 digits". Page 34 (page 34 for the paper copy): first paragraph, replace "it will be computed again since..." with "it will be computed again because...". Page 37 for the electronic copy only: in the definition of Quantity, replace "unites" with "units". Page 104 (page 104 for the paper copy): ‐ in rule <34>, delete ", digits"; ‐ at the end of section 8.3.2, add the following paragraph: Symbols such as "{", "[", "[[", etc, are also lexical tokens of the ASN.1 notation.
    [Show full text]
  • Understanding JSON Schema Release 2020-12
    Understanding JSON Schema Release 2020-12 Michael Droettboom, et al Space Telescope Science Institute Sep 14, 2021 Contents 1 Conventions used in this book3 1.1 Language-specific notes.........................................3 1.2 Draft-specific notes............................................4 1.3 Examples.................................................4 2 What is a schema? 7 3 The basics 11 3.1 Hello, World!............................................... 11 3.2 The type keyword............................................ 12 3.3 Declaring a JSON Schema........................................ 13 3.4 Declaring a unique identifier....................................... 13 4 JSON Schema Reference 15 4.1 Type-specific keywords......................................... 15 4.2 string................................................... 17 4.2.1 Length.............................................. 19 4.2.2 Regular Expressions...................................... 19 4.2.3 Format.............................................. 20 4.3 Regular Expressions........................................... 22 4.3.1 Example............................................. 23 4.4 Numeric types.............................................. 23 4.4.1 integer.............................................. 24 4.4.2 number............................................. 25 4.4.3 Multiples............................................ 26 4.4.4 Range.............................................. 26 4.5 object................................................... 29 4.5.1 Properties...........................................
    [Show full text]
  • GNU MPFR the Multiple Precision Floating-Point Reliable Library Edition 4.1.0 July 2020
    GNU MPFR The Multiple Precision Floating-Point Reliable Library Edition 4.1.0 July 2020 The MPFR team [email protected] This manual documents how to install and use the Multiple Precision Floating-Point Reliable Library, version 4.1.0. Copyright 1991, 1993-2020 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.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back- Cover Texts. A copy of the license is included in Appendix A [GNU Free Documentation License], page 59. i Table of Contents MPFR Copying Conditions ::::::::::::::::::::::::::::::::::::::: 1 1 Introduction to MPFR :::::::::::::::::::::::::::::::::::::::: 2 1.1 How to Use This Manual::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2 2 Installing MPFR ::::::::::::::::::::::::::::::::::::::::::::::: 3 2.1 How to Install ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 3 2.2 Other `make' Targets :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 4 2.3 Build Problems :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 4 2.4 Getting the Latest Version of MPFR ::::::::::::::::::::::::::::::::::::::::::::::: 4 3 Reporting Bugs::::::::::::::::::::::::::::::::::::::::::::::::: 5 4 MPFR Basics ::::::::::::::::::::::::::::::::::::::::::::::::::: 6 4.1 Headers and Libraries :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 6
    [Show full text]
  • Perl 6 Deep Dive
    Perl 6 Deep Dive Data manipulation, concurrency, functional programming, and more Andrew Shitov BIRMINGHAM - MUMBAI Perl 6 Deep Dive Copyright © 2017 Packt Publishing All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews. Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book. Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information. First published: September 2017 Production reference: 1060917 Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK. ISBN 978-1-78728-204-9 www.packtpub.com Credits Author Copy Editor Andrew Shitov Safis Editing Reviewer Project Coordinator Alex Kapranoff Prajakta Naik Commissioning Editor Proofreader Merint Mathew Safis Editing Acquisition Editor Indexer Chaitanya Nair Francy Puthiry Content Development Editor Graphics Lawrence Veigas Abhinash Sahu Technical Editor Production Coordinator Mehul Singh Nilesh Mohite About the Author Andrew Shitov has been a Perl enthusiast since the end of the 1990s, and is the organizer of over 30 Perl conferences in eight countries.
    [Show full text]
  • Array Databases: Concepts, Standards, Implementations
    Baumann et al. J Big Data (2021) 8:28 https://doi.org/10.1186/s40537-020-00399-2 SURVEY PAPER Open Access Array databases: concepts, standards, implementations Peter Baumann , Dimitar Misev, Vlad Merticariu and Bang Pham Huu* *Correspondence: b. Abstract phamhuu@jacobs-university. Multi-dimensional arrays (also known as raster data or gridded data) play a key role in de Large-Scale Scientifc many, if not all science and engineering domains where they typically represent spatio- Information Systems temporal sensor, image, simulation output, or statistics “datacubes”. As classic database Research Group, Jacobs technology does not support arrays adequately, such data today are maintained University, Bremen, Germany mostly in silo solutions, with architectures that tend to erode and not keep up with the increasing requirements on performance and service quality. Array Database systems attempt to close this gap by providing declarative query support for fexible ad-hoc analytics on large n-D arrays, similar to what SQL ofers on set-oriented data, XQuery on hierarchical data, and SPARQL and CIPHER on graph data. Today, Petascale Array Database installations exist, employing massive parallelism and distributed processing. Hence, questions arise about technology and standards available, usability, and overall maturity. Several papers have compared models and formalisms, and benchmarks have been undertaken as well, typically comparing two systems against each other. While each of these represent valuable research to the best of our knowledge there is no comprehensive survey combining model, query language, architecture, and practical usability, and performance aspects. The size of this comparison diferentiates our study as well with 19 systems compared, four benchmarked to an extent and depth clearly exceeding previous papers in the feld; for example, subsetting tests were designed in a way that systems cannot be tuned to specifcally these queries.
    [Show full text]
  • On the Interaction of Object-Oriented Design Patterns and Programming
    On the Interaction of Object-Oriented Design Patterns and Programming Languages Gerald Baumgartner∗ Konstantin L¨aufer∗∗ Vincent F. Russo∗∗∗ ∗ Department of Computer and Information Science The Ohio State University 395 Dreese Lab., 2015 Neil Ave. Columbus, OH 43210–1277, USA [email protected] ∗∗ Department of Mathematical and Computer Sciences Loyola University Chicago 6525 N. Sheridan Rd. Chicago, IL 60626, USA [email protected] ∗∗∗ Lycos, Inc. 400–2 Totten Pond Rd. Waltham, MA 02154, USA [email protected] February 29, 1996 Abstract Design patterns are distilled from many real systems to catalog common programming practice. However, some object-oriented design patterns are distorted or overly complicated because of the lack of supporting programming language constructs or mechanisms. For this paper, we have analyzed several published design patterns looking for idiomatic ways of working around constraints of the implemen- tation language. From this analysis, we lay a groundwork of general-purpose language constructs and mechanisms that, if provided by a statically typed, object-oriented language, would better support the arXiv:1905.13674v1 [cs.PL] 31 May 2019 implementation of design patterns and, transitively, benefit the construction of many real systems. In particular, our catalog of language constructs includes subtyping separate from inheritance, lexically scoped closure objects independent of classes, and multimethod dispatch. The proposed constructs and mechanisms are not radically new, but rather are adopted from a variety of languages and programming language research and combined in a new, orthogonal manner. We argue that by describing design pat- terns in terms of the proposed constructs and mechanisms, pattern descriptions become simpler and, therefore, accessible to a larger number of language communities.
    [Show full text]