NAS Guide to Developing Portable Software

*HyperReader

  CONTENTS

  Title Page

  Copyright Page

  Preface

  1      Introduction

  1.1 What Is Portability?

  1.2 Portability Versus Migration

  1.3 Moving Toward Portable Software

  1.4 Solving Portability Issues

  1.5 Balancing Integration and Portability
    1.5.1      Integrating with Local Alternatives
    1.5.2      Integrating Across the Network
    1.5.3      Porting or Implementing Equivalent Functionality
    1.5.4      Deferring or Sacrificing Integration

  2      Modular Code

  2.1 Porting Programs

  2.2 Example of Porting Code

  2.3 Using Modules and Abstraction
    2.3.1      Procedural Abstraction
    2.3.2      Data Abstraction
    2.3.3      Object-Oriented Programming
      2.3.3.1      Encapsulating Data and Behavior

  2.4 Practical Recommendations

  3      General Coding Guidelines

  3.1 Coding Modules by Function

  3.2 Identifying and Isolating System Dependencies

  3.3 Using the Common Subset of Language and Run-Time Features

  3.4 Writing Strongly Typed Code

  3.5 Writing Explicit Code

  3.6 Leaving Optimization to the Compiler

  3.7 Understanding and Using Target Platforms

  3.8 Determining and Understanding Target Audiences

  3.9 Centralizing Shared Definitions

  3.10 Following Good Coding Practices

  4      Multiplatform Development

  4.1 Creating a Methodology for Multiplatform Development

  4.2 Selecting a Work Environment

  4.3 Using a Programming Language That Aids Portability
    4.3.1      Ada
    4.3.2      C
    4.3.3      C++
    4.3.4      FORTRAN
    4.3.5      Common Lisp
    4.3.6      Pascal
    4.3.7      Multilanguage Programming

  4.4 Editing

  4.5 Maintaining Source Files

  4.6 Building Programs and Managing Modules

  4.7 Testing

  4.8 Debugging

  4.9 Managing and Transferring Files Across Systems
    4.9.1      DECnet
    4.9.2      ULTRIX Connection
    4.9.3      TCP/IP

  5      Portability Guidelines for C

  5.1 Available C Compilers

  5.2 Initial Steps Towards Portability

  5.3 Preprocessor Issues
    5.3.1      Conditional Compilation
    5.3.2      Header Files
    5.3.3      Other Preprocessor Concerns

  5.4 Compilation and Linking Considerations
    5.4.1      Linkage of Identifiers
    5.4.2      Extern Declarations

  5.5 Naming Conventions

  5.6 Function Declarations and Definitions
    5.6.1      Use of Header Files
    5.6.2      Function Prototypes and Function Definition Formats
    5.6.3      Function Return Types
    5.6.4      Variable Number of Arguments
    5.6.5      Related Compiler Extensions and Errors to Avoid

  5.7 Data Type Recommendations
    5.7.1      User-Defined Types
    5.7.2      Use of Integer Variables
    5.7.3      Character Data
    5.7.4      Use of Enumerated Types
    5.7.5      Mixed Expressions and Type Casting

  5.8 Structures and Unions
    5.8.1      Declaration of Structures and Unions
    5.8.2      Use of Structures and Unions
    5.8.3      Related Compiler Errors and Extensions to Avoid

  5.9 Pointers
    5.9.1      Pointer Initialization and Use
    5.9.2      Related Compiler Errors to Avoid

  5.10 Initialization

  5.11 Operators and Expressions

  5.12 Run-Time Library and System Services
    5.12.1     File I/O
    5.12.2     Notes on Specific RTL Facilities

  5.13 Storage Issues
    5.13.1     Layout and Alignment
    5.13.2     Memory Management
    5.13.3     Related Compiler Errors and Extensions to Avoid

  5.14 Language Extensions and Inconsistencies

  5.15 Other C Coding Guidelines

  A   Miscellaneous C Examples

  A.1 Work-Arounds for Function Prototypes
    A.1.1      Option 1
    A.1.2      Option 2

  A.2 Implementing Data Abstraction in C
    A.2.1      Character Sequence Data Abstraction

  B   Portability Documents

  B.1 NAS Guide to Designing a Portable Programming Interface

  B.2 Migrating to Digital's RISC Platforms

  B.3 Portable C and UNIX System Programming

  B.4 Portability and the C Language

  B.5 IEEE Std 1003.1-1988: Portable Operating System Interface for Computer Environments (POSIX)

  B.6 The C Programming Language (First Edition)

  B.7 The C Programming Language (Second Edition)

  B.8 ANSI Standard X3J11/88-159:  Programming Language C

  B.9 C: A Reference Manual

  B.10 ULTRIX-32 Guide to VAX C

  B.11 VMS VAX C Documentation Set

  B.12 X/Open Portability Guide: Programming Languages

  FIGURES

  4-1        File Transfer Mechanisms

  TABLES

  5-1        C Language Inconsistencies