THE STANDARD C LIBRARY PDF
THE STANDARD C LIBRARY shows you how to use all of the library THE STANDARD C LIBRARY explains how the library was meant to be used and how it. The C Standard Library. I/O stdio.h printf, scanf, puts, gets, open, close, read, write, fprintf, fscanf, fseek, Memory and string operations string.h memcpy. The Standard C exigo.pro - Ebook download as PDF File .pdf), Text File .txt) or read book online.
|Language:||English, Spanish, French|
|Genre:||Academic & Education|
|ePub File Size:||30.60 MB|
|PDF File Size:||17.39 MB|
|Distribution:||Free* [*Regsitration Required]|
This is The GNU C Library Reference Manual, for version . Standards and Portability. .. The iconv Implementation in the GNU C Library. include the ISO C and POSIX standards, and the System V and The GNU C Library is compatible with the C standard adopted by the. The Standard C Library. • A small set of highly useful functions, standardized across all platforms. • Definitions are captured in 24 header files. • (Color-coding in.
It has passed the widely used Plum Hall Validation Suite tests for library functions. It has also survived an assortment of public-domain programs designed to stress C implemen- tations and illuminate their darker corners. While I have taken pains to minimize errors, I cannot guarantee that none remain. Please note the disclaimer on the copyright page. Please note also that the code in this book is protected by copyright. It has not been placed in the public domain. Nor is it shareware. I retain all rights.
In either case, what you do with the code is limited by the "fair use" provisions of copyright law. Fair use does not permit you to distribute copies of the code, either hard copy or machine-readable, either free or for a fee.
Having said that, I do permit one important usage that goes well beyond fair use. You can compile portions of the library and link the resultant binary object modules with your own code to form an executable file. I hereby permit you to distribute unlimited copies of such an executable file.
I ask no royalty on any such copies. I do, however, require that you document the presence of the library, whatever amount you use, either modified or unmodified. Please include somewhere in the executable file the following sequence of characters: m i o m of this m k are derived frnm 'Ihe Standard C Lihary, - -it c W P. The same message should appear prominently, and in an appropriate place, on any documentation that you distribute with the executable image.
If you omit either message, you infringe the copyright. You can distribute the entire library in the form of binary object modules. You can even distribute copies of the source files from this book, either modified or unmodified. You can, in short, incorporate the library into a product that lets people use it to make executable programs. To do so, however, requires a license.
You pay a fee for the license. Contact Plum Hall Inc. Despite the mercenary tone of these paragraphs, my primary goal is not to flog a commercial product. I believe strongly in the C Standard, having worked very hard to help bring it about. Much of my effort went into developing the specification for the Standard C library.
C standard library
I want to prove that we have constructed a good language standard. I wrote this implementa- tion, and this book, to demonstrate that simple but important fact. Preface xiii Compass, Inc. They are my first customer for the library code. They helped test, debug, and improve the library extensively in the process of accepting it for use with their Intel compiler.
Ian Wells, in particular, bore the brunt of my delays and botches with good-natured professional- ism. Don Anderson contributed many a midnight e-mail message toward making this library hang together properly. For their faith and patience, I heartily thank everyone I have worked with at Compass.
Paul Becker, my Publisher at Prentice-Hall, also believed in this project. His gentle but persistent goading was instrumental in bringing this book to completion. The anonymous reviewers he employed helped me sharpen my focus and tone down some of the more extreme prose.
Paul's professionalism reminded me why Prentice-Hall has been such a major force in technical publishing for so long. Moving to Australia for a year part way through this project presented a bouquet of impediments.
My good friend and business colleague John O'Brien of Whitesmiths, Australia, was always there to help. For turning thorns into roses, he has been nonpareil. His assistance has surpassed the bounds even of friendship. He was quick to help in many ways. The University of New South Wales Computer Science Department graciously gave me the time and space I needed, even though they had other plans for both.
Tom Plum has forced many of us to think deeply about fundamental aspects of C. I have enjoyed numerous fruitful discussions with him on the topics covered here. Dave Prosser has also freely shared his deep insights into the workings of C.
Advanced Data Controls Corp. Takashi Kawahara and Hiroshi Fukutomi, both principals in that company, have been very helpful in educating me on the technical needs of Japanese programmers. Much of the material presented here first appeared in monthly install- ments in The C Users Journal. Robert Ward has been a particularly easy publisher to work with.
I appreciate his flexibility in letting me recycle material from his magazine. Remember that a macro name can mask a name in any other name space. If you must do something rash. An implementation is permitted to combine multiple library functions into a single module. They are reserved for use by the implementors. And either of these can mask any other use of a name.
Rely on the separate name spaces to save you only when you forget about a rarely used name in the library. Introduction fail to see another use of the name in a different name space. The second class of names is effectively reserved in all name spaces.
Don't use: This is the form I described on page 7. That makes it impossible for you to define a data object whose name is while. Including a standard header can simply turn on a set of definitions built into the translator.
The same arguments also apply as for replacing standard headers. Even if you eventually want to try it all. File names for C source can have at least eight lowercase letters.
Implementing the Library The code that follows in this book makes several assumptions. Larger fies appear on two facing pages -the figure caption on each page warns you that the code on that page represents only part of a C source file.
The file name is the function name. They are hard to place wisely and they clutter the code. I also follow each left brace I inside a function with a one-line comment.
Each secret name begins with an underscore followed by an uppercase letter. Such a f i e can contain more than one function or data object.
It also simplifiesfinding functions. If it does. The parentheses prevent the translator from recognizing the macro and expanding it. A few are peculiar. They need this behavior too. Appendix B: Names also lists each secret name that has external linkage or is defined in a standard header. Code layout is reasonably uniform. Each visible function in the library occupies a separate C source file. Look back at the definition of s t r l e n on page 2. Secret functions and data objects in the library typically occupy C source files whose names begin with X.
I indent religiously to show the nesting of control structures. The code presented here works correctly either way. I usually declare data objects within functions at the innermost possible nesting level. This book displays each C source file as a figure with a box around it.
The figure caption gives the name of the file. It is unlikely that your implementation violates any of these assump- tions. Most of the rules style make sense for any project. The code contains no r e g i s t e r declarations. In the definition of a visible Iibrary function. Names shows each visible name defined in the library.
Any such function can have its declaration masked by a macro definition in its corresponding header. Displayed code differs from the actual C source file in two ways. The file name typically derives from the name of one of the contained functions or data objects. Most C vendors write their libraries in C and use their own translators.
Each figure displays C source code with horizontal tab stops set every four columns. Chapter 0 External names may or may not map all letters to a single case. That makes for some rather small files in a few cases. I first wrote each C source file to its natural length. I also introduced several extra C source files just to keep all files under two book pages in length.
That was not my only reason for making files smaller. Introduction The resulting code is quite dense at times. Evey compiler I used failed to translate at least one of the larger files. The type definition size-t is one example.
For a typical coding project. The code also contains a number of files that should properly be merged. It is the type that results from applying the sizeof operator.
Each time the program includes this header. You can protect against multiple definitions of this type with another macro guard: I com- pressed it to keep this book from getting even thicker. The extra modules may sometimes be unappealing from the standpoint of good design. One is that a handful of names are defined in more than one header. Each of the properties has an impact on how you implement the standard headers.
A program must be able to include two different headers that define the same name without causing an error. You use a macro guard for most of the standard headers.
Idempotence is easy to manage. I would add white-space to make it at least twenty per cent larger. I listed several properties of standard headers earlier. You can usually write this macro wherever you want a null pointer to a data object -a pointer value that designates no data object.
I discuss the matter further in Chapter 1: One way to define this macro is: SeeChapter Placing all visible functions in separate files sometimes results in ridicu- lously small object modules. It's rather difficult for you as a programmer to use any of these functions without a definition for va-list. They can differ only in the white-space in this case. These are perrnissi- ble only in certain contexts.
I chose the second solution most of the time because it simplifiesadapting the library to different implementations. The programmer must include a standard header only where a file level declaration is permitted. How can this be? The synonym has a name from the class reserved for macros. Without the caveat. You do have to provide the same definition in multiple places. YOU call them from functions that accept a variable argument list when you want to print some or all of those arguments.
Be prepared to hunt down all occurrences if the definition changes. A similar but different issue arises with the three printing functions vfprintf. Two definitions for the same macro name must have the same sequence of tokens.
Two solutions are: Write the same definition in multiple places. Of course. You need not protect against including two definitions that match in this sense. That's all that's needed within the standard header to express the function prototype for each of the three functions.
Most standard headers must contain one or more external declarations. That is an annoying maintenance problem. That means the include direc- tive must not occur anywhere inside another declaration. Give the file a name that should not collide with file names created by the programmer. Mace the definition in a separate header file. Each has an argument of typeva-list. Standard C permits benign redefinition of a macro. But that type is not defined in that particular header. It can be done.
Include the file in each header that requires it. To write such tests. That can double the quantity of code you must maintain in future. The test program can be as complex as the program to be tested. You use each piece of code to debug the othe. Only the most trivial func- tions can be tested exhaustively. It is in the vendor's best interest to test the internal structure of the code as well as its external characteristics. Even these can never be tested for all possible interactions with nontrivial programs that use them.
You pointedly ignore any imple- mentation details. The payoff for all this extra investment is a significantimprovement in code reliability. If your goal is to prove conclusively that a function contains no bugs. Every piece of code should help implement some part of the specification. Avendor may know implementation details that are not easily visible to the customer. In principle. A customer. But other factors can matter as much or more -such as memory and disk requirements.
It is good enough. Good performance tests: A change to either piece often necessitates a change to the other. You would have to test all possible input values.
Introduction 13 Testing the Library Testing can be a never-ending proposition. I intentionallyleave vague what a "detail" might be. Only when the two play in harmony can you say that testing is complete -at least for the time being. To many people perform- testing ance means speed. The result is a complex piece of code closely tied to the code you intend to test.
That is a far cry from testing every possible path through the code. I intend to stop somewhat short of it. It shows you what the library prints when an assertion fails. You design a test plan alongside the code to be tested. When you make changes as you inevitably will. I have adopted the convention of preceding each header name with a t to construct test file names. You obtain vendor-independent validation suites from outside sources. You institutionalize retesting after any changes. I found that the best simple confidence tests have a number of common properties: Print a standard reassuring message and exit with successful status to report correct execution.
You develop comprehensive tests as part of the project. You provide for maintenance of test machinery as well as the delivered code itself. That reassures you that your implementation is sane.
I present a number of simple test programs. Some implementation errors are so common. Each tests part or testing all of the facilities provided by one of the standard headers in the Standard C library. Simple tests are well worth writing.
I heartily endorsesuch professionalism in developingcode. The code presented here has been extensively validated with several existing programs and suites. Chapter 0 An amazing number of so-called performance tests violate most or all of theseprinciples.
Many test what is easy to test for. But 1 have not produced test programs to exercise every part of the executable code. Rarely do they stray into the realm of performance testing. The wise code developer invests in as many of these forms of testing as possible. Having paid lip service to that ideal.
To add a full set of proper tests would make it truly unwieldy. You will find that these test programs focus primarily on external behavior. Say nothing else. You can verify that a function satisfies its basic design goals with just a few lines of code. It verifies that the assert macro does what you expect.
Most of all. Identify any other unavoidable output to minimize confusion on the part of the reader. That means. This book is already overstuffed with code.
Note that each of these files defines its ownmain. Exercises Exercise 0. The function is hard to write correctly. Do not add any of these files to the Standard C library. International Standards Organiza- tion.
The CProgramming Language. The first edition of The C Programming Language served for years at the de fado standard for the C language.
I chose t as the leading character even though a few predefined names begin with that letter. It forms a simple mnemonic. Plauger and Jim Brodie. This book provides a complete but succinct reference to the entire C Standard. I The function is widely used. C Programming Guidelines Cardiff.
Introduction 15 A few of the larger headers require two or more test programs. Writing the function poses several interesting challenges. Aside from formatting details and section numbering. It covers both the language and the library. Kernighan and Dennis M. The function proved very useful in a past application. The quotes in this book are from the IS0 C Standard.: Plum Hall. Here is an excellent style guide for writing C programs.
It also contains a good discussion of first-order correctness testing. The second edition. This is the original C Standard. I Performance of the function can be improved dramatically by generat- ing inline code.: Microsoft Press. You link each with the Standard C library to produce a separate test program. Thomas Plum. The function performs a number of services that are loosely related. It also provides a very good tutorial overview of C.
The Rationale that accompanies the C Standard explains many of the decisions that went into it. Second Edition Englewood Cliffs.: Standard C Redmond.
American NationalStandards Insti- tute. I The function is easy to write and can be written several different ways. Exercise 0. Which cannot? Can you make a case for using any two of these meanings at once in a sensible program?
Describe the five distinct uses of X. What you want is some way to introduce assertions that are enforced only while you're debugging. You want to leave the assertions in as documentation. Please note that this is not the best way to write production code. No matter how revealing the accompanying message may be to you the programmer. You use the macro to enforce assertions at critical places within your program. And should this "impossible" situation arise while you are debugging the program.
It need not check whether the index idx is in range. The program does not stumble on to generate spurious problems at a later date. Any diagnosticsshould be in terms that the user can understand. Should an assertion prove to be untrue. It expands to an expression that tests the assertion and writes an error message if the assertion is false.. It is ill advised for a program in the field to terminateabnormally.
Chapter 1: Some form of error recovery is almost always preferred. The assertion sees to that.. That lets you document the assertions you need from the start. The program then terminates. They also provide teeth to those assumptions while you are debug- ging the code. When it is executed. An assertion is simply a compact way of writing: The message written might be of the form Assertion failed: The macro writes a message and terminates execution if the value of the expression is zero.
Fbnvard references: Whether active or passive. Returns The assert macro returns no value. Fbotnotes YOU call it to terminate execution of the program when something goes wrong. I emphasized earlier. Assertions help you document the assumptions behind the code you write.
Description The assert macro puts diagnostics into programs. The argument to the macro is nominally an expression of type int. You write predicates in for. If the macro definition is suppressed in order to access an actual function. As I mentioned in the previous chapter. Performance may suffer dramatically.
The Standard C Library.pdf
Yau specify these definitions in a command script or make file that rebuilds the program. This header has an additional peculiarity. Onestyle of programmingis to change thesource code. It can also be an easier file to replicate and alter when you must revert to more primitive debugging phases.
The only drawback comes when you have to turn debugging back on again. I can assure you that eventually you will. Benign redefinition was added to Standard C for just this purpose. The net effect is that you can control assertions in different ways throughout a source file.
Once you believe that assertions should be disabled. Including any of them two or more times has the same effect as including the header just once. So to turn assertions on. It eliminates the need to protect multiple definitions of the same macro with macro guards and conditional directives.
You must edit the sourcefile to remove the macro definition. Or an earlier assertion may terminate execution before you get to the revealing parts. It is a benign redefinition. Nothing in the C Standard requires such a capability. As convenientas assertionscan be during debugging. The directive is very necessaly. The macro must expand to a void expression.. A program can define macros that rename any of the names from another header.
I Figure 1.
Any testing must make use of one of the conditional operators within an expression. A naive. Think of this as benign undefinition. That rules out use of the if statement. The macro should expand to efficient and compact code. That mandates that the macro call a function with a secret name to do the actual output. This version always makes a function call that passes five arguments. Nor may it refer to the macro stderr. The macro must not directly call any of the library output functions.
The program might not have included that header. You can always tuntief a name. It defines the secret library function -Assert -Assert that the macro calls. A smart version of the function-Assert can parse the diagnostic message and supply the missing bits if it chooses.
It becomes a decimal constant. The second converts the decimal constant to a string literal. But if you need to learn more about what they do at this point. It writes strings references to the standard error stream by calling fputs. When I must refer ahead. It terminates execution abnormally by calling abort. The version shown here does not. The description of each of these headers occurs much later.
To convert it to proper form requires an additional layer of processing. The string-crea- tion operator x encodes much of the information. Figure 1.
That should minimize some page flipping for those new to Standard C.
That way an optimizing translator can often eliminate all code for an assertion that is obviously true. Then string-literal concatenation merges the pieces. This implementation of the macro assert performs the test inline. It is a bit more compact than the form that the C standard suggests. A good tutorial presentation minimizes the use of forward references. If you have a general knowledge of C. The macro com- poses the diagnostic information into a single string argument of the form xyz: I describe the new material in general terms.
Nearly every part is written in terms of the others and can be described only in terms of the others. The test fails if any of the earlier three invocations of assert cause execution to terminate. A Discipline of Programming Englewood Cliffs. Only the active form with the test not met should abort.
References Two good books that preach programming by assertion are: Both fputs and signal sit atop a lot of machinery. That is one of the design compromises I made to keep the tests succinct. Imagine using the very machinery you are testing to implement part of the test harness! That's hardly the way to go about debugging new code. I had to introduce program stubs much simpler versions for most of this code at one time or another.
Text lines can appear in a different order on some implementations. The program writes strings to the standard output stream by calling puts. Correct execution should display something like: It even uses the assert macro to verify that signal returns successful status. Two of the functions it uses are brothers to ones you have already met. When one of these tests fails. It terminates execution normally by calling abort. I confess that it took several tries even to get that far.
Structured Programming New York: Academic Press. The needs of debugging can be quite different than the needs of simple confidence testing. The program is more ambitious than that. Prentice- Hall. This test program exercises the assert maao four different ways -in its passive and active forms. Both are still topical. It calls the function signal. See Chapter My first version of stubs tassert.
Exercise 1. It should pass instructions to the source-level debugger instead. If the response is yes in either uppercase or lowercase. Have control revert to the debugger whenever an assertion fails.
Why would you want to use this version? Such debuggersoften let you set conditional breakpoints at various points within the executing program. Have assert generate no inline code. Chapter 8: Have the modified assert accept test expressions of arbitrary complex- ity. Why would you want this capability? Execu- tion should continue with the statement following the offending assert macro invocation. Your goals are. Generate code at the same level of optimization whether or not assert macros appear.
Why would you want each of these capabilities? Describe a safe discipline for initial- izing static storage in a program that uses this capability. This idiom does not work correctly for other popular character sets.
The tradition until then was to write huge monoliths that offered a spectrum of services. You can write the same idiom several different ways. We often found ourselves sorting characters into different classes. To identify a letter. That slows comprehensionand increases the chance for errors.. They spoke to people by producing paginated reports with embedded carriage controls. C programs read and wrote streams of human-readable characters. To identify a digit. C programs tended to be small and devoted to a single function.
The tradition until then was to have programs communicate with each other via highly structured binary files. This was truly a new style of programming. Chapter 2: When C came along. Pretty soon. If your program expands the macro in many places The overhead of calling so many functions often dominates the execution time of the program. White- classes space has always suffered notorious variability. The macro may expand to a subexpression that doesn't bind as tight as a function call. That made them at once more readable.
The macro may expand one of its arguments to code that is executed more than once. A typical text-processing program might average three calls on these functions for mwy character from the input stream.
They soon found their way into the growing library of C support functions. The character-classification functions were so useful. Then what do you do about form feeds? The easier it is to get tools to work together Should you lump vertical tabs in with horizontal tabs and spaces? It led others to develop a set of macros to take their place..
A liberal use of parentheses in the macro definition can eliminate such nonsense. It wasn't long before a dozen-odd functions like these came into being.
Only two Standard C library functions.. While some C programmers consider such surprises acceptable. More and more programs began to use them instead of reinventing their own idioms.
The idioms above became: That led some programmers to avoid using these standard char- acter classificationfunctions. The natural response was to introduce functions in place of these tests.
They were. You just have to be alert to a few surprises: The macro may expand into much more code than a function call. This is unacceptable. A macro argument with side effects will cause surprises. They let you write code that is as with macros readable as calling functions but is much more efficient.
Few programmers know to write isprint unsigned char c. Or they return the value of the macro EOF. One drawback to this approach is that the macro generates bad code for some of the wrong arguments. They help the im- plementor provide efficient macros. Each macro took the form: Locales are a big topic. Execute it with an argument not in the expected range and it accesses storage outside the translation table.
Different bits in each table entry characterize the index character. The macro expands to a compact expression that is nonzero for all the right arguments. Or ungetc. The argument will be a negative value almost certainly out of range for the function. You should use them wherever possible to sort characters into classes. I discuss them at length in Chapter 6: On a computer architecture that represents type char the same as signed char.
Because they were used a lot. The functions assume they are testing values returned by one of the functions fgetc. They also had to be reasonably safe to use. De- pending on the implementation. The function call isprint C looks safe enough. They greatly increase your chances of having code that is both efficient and correct across varied character sets. All return a character code type cast to unsigned char.
What evolved was a set of macros that used one or more translation tables. But say c has type char and holds a value with the sign bit set. When that happens. I simply observe that a C program always begins execution in the. For now. If the argument has any other value.
Description The isalnum function tests for any character for which isalpha or isdigit is true. Description The isalpha function tests for any character for which isupper or islower is true. Description The isdigit function tests for any decimal-digit character as defined in 5. The behavior of these functions is affected by the current locale. Those functions that have implementation-defined aspects only when nor in the "C" locale are noted below.
Description The iscntrl function tests for any control character. The term printing characrer refers to a member of an implementation-defined set of characters. EOF 7. Description The isgraph function tests for any printing character except space ' '.
In the "C" locale. Description The i s x d i g i t function tests for any hexadecimal-digit character as defined in 6. Description The isspace function rests for any character that is a standard white-space character or is one of an implementation-defined set of characters for which iealnum is false.
The standard white-space characters are the following: Description The islower function tests for any character that is a lowercase letter a is one of an implementation-defined set of characters for which none of iscntrl. Description The isprint function tests for any printing character including space ' '. Description The isupper function rests for any character that is an uppercase letter or is one of an impiementation-defined set of characters for which none of iscntrl. Description The ispunct function rests for any printing character that is neither space ' ' nor a character for which isalnumis true.
You have to know where the implementation has tucked the less common characters. See "future library directions" 7. If you store in any character type instead. Others may not. If you generate an argument any other way. Chapter 2 7. Returns If the argument is acharacter for which isupper is true and there is acorresponding character for which islower is true. The functions work properly only for the value EOF. Description The toupper function converts a lowercase letter to the corresponding uppercase letter.
Returns If the argument is acharacter for which islower is true and there is acorresponding character for which isupper is true. Classifying characters is not as easy as it first appears.
Description The tolower function converts an uppercase letter to the corresponding lowercase letter. Or you may convert a valid character code to a negative value. Then you have to understand where all the com- mon characters lie within the class system. The characters in the basic C character set have positive values when represented as type char.
You need some understanding of how everything changes when you move to an imple- mentation with a different character set. If YOU Store such a value before you test it. First you have to understand the classes. You may mistake an end-of-file indication for a valid character. An irnple- mentation can define any number of additional punctuation or control characters.
Figure 2. It shows how the character classification functions relate to each other. The characters in Figure 2. A through.
Two of these classes are open-ended even in the T-' locale. Control characters include all the codes between decimal 1 and The important message is that Standard C introduces a new era. The same character must not. Chapter 2 the rounded rectangles are all the members of the basic C character set.
You can now write code more easily for cultures around the world. As you can see from the diagram. An execution character set can contain members that fall in none of these classes.
If it can end up in an international application. These are the characters you use to represent an arbitrary C source file. Only i s d i g i t and isxdigit remain unchanged. If it is a lowercase letter. You often use this function to test for the trailing characters in a name. If your code intends to process the local language. A common practice where a program looks for names is to require that each name begin with a letter.
Supplement any tests you make with the charac- change ter-classificationfunctions to weed out any extra characters that sneak in.
You use this function to test for letters in the local alphabet. See page But you must now write code with more forethought.
The C Standard requires that every execution character set contain all these characters. A single plus sign under a function name indicates that the function can represent additionalcharacters in localesother than the YY locale.
Trust the character-classification functions to contain the problem. The locale will alter ielower. For the locale. Every execution character set must also contain the null char- acter. But a character must not be considered both punc- tuation and control. But the sets do not necessarily exhaust the set of all characters. If you use this function at all. Some alphabets provide additional characters for various numbers. Aprogram that makes additional assumptions should document those assumptions in a prominent comment.
To convert a hexadecimal number in any locale. It matches only the ten decimal digits of the basic C character set. Not only that.
Knowing that you can depend on this idiom simplifies and speeds code that performs numeric conversions. Use this function to make sure that you recognize all of them. This function shifts behavior when you change locale. Some programmers consider this function to be the exact complement of isprint. Several library functions use isspace to determine which characters to treat as whitespace. What constitutes a lowercase letter can vary considerably among locales.
YOU use isgraph to identify characters that display when printed. You should assume that isspace is the best test for such white- space in any locale. As the description in the C Standard implies. The two recognize disjoint sets. Don't even assume that every letter is either lowercase or uppercase.
Don't assume that every lowercase letter has a corresponding upper- case letter. In the "cW locale. You use it for the specific purpose of identifying the digits in a hexadecimal number.
Only seven control characters have uniform behavior across all locales. Aprogram that uses iecntrl this way can fail if you present it with exotic characters.
All of these types must be able to represent all the characters in the execution character set.. C has been implemented. A translation table makes sense only if it is not too large. This implementation is no exception. All are represented by at least eight bits. An implementation can. The vast majority of C implementations use exactly eight bits to repre- sent a character type.
Each of the functions uses its argument as an index into the table.Paul's professionalism reminded me why Prentice-Hall has been such a major force in technical publishing for so long. You institutionalize retesting after any changes. By the beginning of the s compatibility problems between the various C implementations became apparent. The locale will alter ielower. A common practice where a program looks for names is to require that each name begin with a letter.
It might help.