0% found this document useful (0 votes)
39 views60 pages

Modern C For Absolute Beginners: A Friendly Introduction To The C Programming Language 2nd Edition Slobodan Dmitrović Instant Download

Modern C for Absolute Beginners, Second Edition by Slobodan Dmitrović, serves as a friendly introduction to the C programming language. The book covers fundamental concepts such as types, declarations, operators, arrays, and pointers, making it suitable for beginners. It also includes exercises and practical examples to reinforce learning.

Uploaded by

hahfbjbjew8559
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
39 views60 pages

Modern C For Absolute Beginners: A Friendly Introduction To The C Programming Language 2nd Edition Slobodan Dmitrović Instant Download

Modern C for Absolute Beginners, Second Edition by Slobodan Dmitrović, serves as a friendly introduction to the C programming language. The book covers fundamental concepts such as types, declarations, operators, arrays, and pointers, making it suitable for beginners. It also includes exercises and practical examples to reinforce learning.

Uploaded by

hahfbjbjew8559
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 60

Modern C for Absolute Beginners: A Friendly

Introduction to the C Programming Language 2nd


Edition Slobodan Dmitrovi■ download pdf

https://ebookmass.com/product/modern-c-for-absolute-beginners-a-
friendly-introduction-to-the-c-programming-language-2nd-edition-
slobodan-dmitrovic/

Visit ebookmass.com today to download the complete set of


ebook or textbook!
We have selected some products that you may be interested in
Click the link to download now or visit ebookmass.com
for more options!.

Modern C++ for Absolute Beginners: A Friendly Introduction


to the C++ Programming Language and C++11 to C++23
Standards, 2nd Edition Slobodan Dmitrovi■
https://ebookmass.com/product/modern-c-for-absolute-beginners-a-
friendly-introduction-to-the-c-programming-language-
and-c11-to-c23-standards-2nd-edition-slobodan-dmitrovic/

Modern C++ for Absolute Beginners 2nd Edition Slobodan


Dmitrovi■

https://ebookmass.com/product/modern-c-for-absolute-beginners-2nd-
edition-slobodan-dmitrovic/

Modern C for Absolute Beginners - Second Edition Solbodan


Dmitrovic

https://ebookmass.com/product/modern-c-for-absolute-beginners-second-
edition-solbodan-dmitrovic/

Programming for Absolute Beginners: Using the JavaScript


Programming Language 1st Edition Jonathan Bartlett

https://ebookmass.com/product/programming-for-absolute-beginners-
using-the-javascript-programming-language-1st-edition-jonathan-
bartlett/
C Programming Language: C PROGRAMMING LANG _p2 2nd
Edition, (Ebook PDF)

https://ebookmass.com/product/c-programming-language-c-programming-
lang-_p2-2nd-edition-ebook-pdf/

C Programming Absolute Beginner’s Guide (3rd Edition)


Perry

https://ebookmass.com/product/c-programming-absolute-beginners-
guide-3rd-edition-perry/

C Programming for Beginners by Sett John Hafeez


Abdulmutolib

https://ebookmass.com/product/c-programming-for-beginners-by-sett-
john-hafeez-abdulmutolib/

C Programming For Dummies 2nd Edition Dan Gookin

https://ebookmass.com/product/c-programming-for-dummies-2nd-edition-
dan-gookin/

Coding for Kids 5 Books in 1: Javascript, Python and C++


Guide for Kids and Beginners (Coding for Absolute
Beginners) Mather
https://ebookmass.com/product/coding-for-kids-5-books-in-1-javascript-
python-and-c-guide-for-kids-and-beginners-coding-for-absolute-
beginners-mather/
Modern C
for Absolute
Beginners
A Friendly Introduction to the
C Programming Language

Second Edition

Slobodan Dmitrović
Modern C for Absolute
Beginners
A Friendly Introduction to the
C Programming Language
Second Edition

Slobodan Dmitrović
Modern C for Absolute Beginners: A Friendly Introduction to the C Programming
Language, Second Edition
Slobodan Dmitrović
Belgrade, Serbia

ISBN-13 (pbk): 979-8-8688-0223-2 ISBN-13 (electronic): 979-8-8688-0224-9


https://doi.org/10.1007/979-8-8688-0224-9

Copyright © 2024 by Slobodan Dmitrović


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Melissa Duffy
Development Editor: James Markham
Coordinating Editor: Gryffin Winkler
Cover designed by eStudioCalamar
Cover image by Noel_Bauza on pixabay (pixabay.com)
Distributed to the book trade worldwide by Apress Media, LLC, 1 New York Plaza, New York, NY 10004,
U.S.A. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail [email protected], or visit www.
springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science
+ Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation.
For information on translations, please e-mail [email protected]; for reprint,
paperback, or audio rights, please e-mail [email protected].
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub (https://github.com/Apress). For more detailed information, please visit
https://www.apress.com/gp/services/source-code.
Paper in this product is recyclable
For Sanja and Katarina
Table of Contents
About the Author�����������������������������������������������������������������������������������������������������xv

About the Technical Reviewer�������������������������������������������������������������������������������xvii

Acknowledgments��������������������������������������������������������������������������������������������������xix
Introduction������������������������������������������������������������������������������������������������������������xxi

Part I: The C Programming Language������������������������������������������������������������� 1


Chapter 1: Introduction�������������������������������������������������������������������������������������������� 3
1.1 What Is C?������������������������������������������������������������������������������������������������������������������������������� 3
1.2 What Is C Used For?���������������������������������������������������������������������������������������������������������������� 3
1.3 C Compilers����������������������������������������������������������������������������������������������������������������������������� 3
1.3.1 Installing Compilers�������������������������������������������������������������������������������������������������������� 4
1.4 C Standards���������������������������������������������������������������������������������������������������������������������������� 7

Chapter 2: Our First Program����������������������������������������������������������������������������������� 9


2.1 Function main( )���������������������������������������������������������������������������������������������������������������������� 9
2.2 Comments����������������������������������������������������������������������������������������������������������������������������� 11
2.3 Hello World���������������������������������������������������������������������������������������������������������������������������� 12

Chapter 3: Types and Declarations������������������������������������������������������������������������� 15


3.1 Declarations�������������������������������������������������������������������������������������������������������������������������� 15
3.2 Introduction��������������������������������������������������������������������������������������������������������������������������� 15
3.3 Character Type���������������������������������������������������������������������������������������������������������������������� 16
3.4 Integer Type�������������������������������������������������������������������������������������������������������������������������� 21

v
Table of Contents

3.5 Floating-Point Types�������������������������������������������������������������������������������������������������������������� 26


3.5.1 float������������������������������������������������������������������������������������������������������������������������������ 26
3.5.2 double��������������������������������������������������������������������������������������������������������������������������� 27
3.5.3 long double������������������������������������������������������������������������������������������������������������������� 28

Chapter 4: Exercises����������������������������������������������������������������������������������������������� 31
4.1 Hello World with Comments�������������������������������������������������������������������������������������������������� 31
4.1.1 Declaration������������������������������������������������������������������������������������������������������������������� 32
4.1.2 Definition���������������������������������������������������������������������������������������������������������������������� 32
4.1.3 Outputting Values��������������������������������������������������������������������������������������������������������� 32

Chapter 5: Operators���������������������������������������������������������������������������������������������� 35
5.1 Introduction��������������������������������������������������������������������������������������������������������������������������� 35
5.2 Arithmetic Operators������������������������������������������������������������������������������������������������������������� 35
5.3 Assignment Operator������������������������������������������������������������������������������������������������������������ 36
5.4 Compound Assignment Operators���������������������������������������������������������������������������������������� 38
5.5 Relational Operators������������������������������������������������������������������������������������������������������������� 39
5.6 Equality Operators����������������������������������������������������������������������������������������������������������������� 40
5.7 Logical Operators������������������������������������������������������������������������������������������������������������������ 41
5.8 Increment and Decrement Operators������������������������������������������������������������������������������������ 42
5.9 Operator Precedence������������������������������������������������������������������������������������������������������������ 43

Chapter 6: Expressions������������������������������������������������������������������������������������������� 45
6.1 Initialization��������������������������������������������������������������������������������������������������������������������������� 45
6.2 Type Conversion�������������������������������������������������������������������������������������������������������������������� 46

Chapter 7: Statements�������������������������������������������������������������������������������������������� 49
7.1 Introduction��������������������������������������������������������������������������������������������������������������������������� 49
7.2 Selection Statements������������������������������������������������������������������������������������������������������������ 51
7.2.1 if����������������������������������������������������������������������������������������������������������������������������������� 51
7.2.2 if-else��������������������������������������������������������������������������������������������������������������������������� 54
7.2.3 switch��������������������������������������������������������������������������������������������������������������������������� 56

vi
Table of Contents

7.3 Iteration Statements������������������������������������������������������������������������������������������������������������� 61


7.3.1 while����������������������������������������������������������������������������������������������������������������������������� 61
7.3.2 do-while����������������������������������������������������������������������������������������������������������������������� 62
7.3.3 for��������������������������������������������������������������������������������������������������������������������������������� 63

Chapter 8: Exercises����������������������������������������������������������������������������������������������� 65
8.1 Arithmetic Operations����������������������������������������������������������������������������������������������������������� 65
8.2 Integral Division�������������������������������������������������������������������������������������������������������������������� 65
8.3 Floating-Point Division and Casting�������������������������������������������������������������������������������������� 66
8.4 Equality Operator������������������������������������������������������������������������������������������������������������������ 66
8.5 Relational and Logical Operators������������������������������������������������������������������������������������������ 67
8.6 The switch Statement����������������������������������������������������������������������������������������������������������� 68
8.7 Iteration Statements������������������������������������������������������������������������������������������������������������� 68

Chapter 9: Arrays���������������������������������������������������������������������������������������������������� 71
9.1 Declaration���������������������������������������������������������������������������������������������������������������������������� 71
9.2 Subscript Operator���������������������������������������������������������������������������������������������������������������� 72
9.3 Array Initialization����������������������������������������������������������������������������������������������������������������� 74
9.4 Character Arrays������������������������������������������������������������������������������������������������������������������� 76
9.5 Multidimensional Arrays������������������������������������������������������������������������������������������������������� 77
9.6 Array Size and Count������������������������������������������������������������������������������������������������������������� 78

Chapter 10: Pointers����������������������������������������������������������������������������������������������� 81


10.1 Introduction������������������������������������������������������������������������������������������������������������������������� 81
10.2 Declaration and Initialization���������������������������������������������������������������������������������������������� 81
10.3 Pointers and Arrays������������������������������������������������������������������������������������������������������������� 85
10.4 Pointer Arithmetics������������������������������������������������������������������������������������������������������������� 87
10.5 Void Pointers����������������������������������������������������������������������������������������������������������������������� 89
10.6 Pointer to Character Arrays������������������������������������������������������������������������������������������������� 91
10.7 Arrays of Pointers���������������������������������������������������������������������������������������������������������������� 92

Chapter 11: Command-Line Arguments����������������������������������������������������������������� 95

vii
Table of Contents

Chapter 12: Exercises��������������������������������������������������������������������������������������������� 97


12.1 Character Array������������������������������������������������������������������������������������������������������������������� 97
12.2 Array Elements�������������������������������������������������������������������������������������������������������������������� 97
12.3 Pointer to an Existing Object����������������������������������������������������������������������������������������������� 98
12.4 Pointers and Arrays������������������������������������������������������������������������������������������������������������� 98
12.5 Pointer to a Character Array������������������������������������������������������������������������������������������������ 99
12.6 Pointer Arithmetics����������������������������������������������������������������������������������������������������������� 100
12.7 Array of Pointers��������������������������������������������������������������������������������������������������������������� 100

Chapter 13: Functions������������������������������������������������������������������������������������������ 103


13.1 Introduction����������������������������������������������������������������������������������������������������������������������� 103
13.2 Function Declaration��������������������������������������������������������������������������������������������������������� 105
13.3 Function Definition������������������������������������������������������������������������������������������������������������ 107
13.4 Parameters and Arguments���������������������������������������������������������������������������������������������� 109
13.4.1 Passing Arguments��������������������������������������������������������������������������������������������������� 113
13.5 Return Statement�������������������������������������������������������������������������������������������������������������� 115

Chapter 14: Exercises������������������������������������������������������������������������������������������� 119


14.1 A Simple Function������������������������������������������������������������������������������������������������������������� 119
14.2 Function Declaration and Definition���������������������������������������������������������������������������������� 119
14.3 Passing Arguments by Value��������������������������������������������������������������������������������������������� 120
14.4 Passing Arguments by Pointer/Address���������������������������������������������������������������������������� 121
14.5 Function – Multiple Parameters���������������������������������������������������������������������������������������� 122

Chapter 15: Structures����������������������������������������������������������������������������������������� 123


15.1 Introduction����������������������������������������������������������������������������������������������������������������������� 123
15.2 Initialization����������������������������������������������������������������������������������������������������������������������� 126
15.3 Member Access Operator�������������������������������������������������������������������������������������������������� 128
15.4 Copying Structures����������������������������������������������������������������������������������������������������������� 130
15.5 Pointers to Structures������������������������������������������������������������������������������������������������������� 131
15.6 Self-Referencing Structures��������������������������������������������������������������������������������������������� 133
15.7 Structures as Function Arguments����������������������������������������������������������������������������������� 134

viii
Table of Contents

Chapter 16: Unions����������������������������������������������������������������������������������������������� 139

Chapter 17: Conditional Expression���������������������������������������������������������������������� 141

Chapter 18: Typedef���������������������������������������������������������������������������������������������� 143

Chapter 19: Const Qualifier����������������������������������������������������������������������������������� 147

Chapter 20: Enumerations������������������������������������������������������������������������������������ 153

Chapter 21: Function Pointers������������������������������������������������������������������������������ 157

Chapter 22: Exercises������������������������������������������������������������������������������������������� 161


22.1 Structure Definition����������������������������������������������������������������������������������������������������������� 161
22.2 Structure Typedef Alias����������������������������������������������������������������������������������������������������� 162
22.3 Structure Initialization������������������������������������������������������������������������������������������������������� 163
22.4 Pointers to Structures������������������������������������������������������������������������������������������������������� 163
22.5 Unions������������������������������������������������������������������������������������������������������������������������������� 164
22.6 Constants and Pointers����������������������������������������������������������������������������������������������������� 165
22.7 Constant Function Parameters������������������������������������������������������������������������������������������ 166
22.8 Enums������������������������������������������������������������������������������������������������������������������������������� 166
22.9 Pointers to Functions�������������������������������������������������������������������������������������������������������� 168

Chapter 23: Preprocessor������������������������������������������������������������������������������������� 169


23.1 #include���������������������������������������������������������������������������������������������������������������������������� 169
23.2 #define������������������������������������������������������������������������������������������������������������������������������ 171
23.3 #undef������������������������������������������������������������������������������������������������������������������������������� 173
23.4 Conditional Compilation���������������������������������������������������������������������������������������������������� 175
23.4.1 #if����������������������������������������������������������������������������������������������������������������������������� 175
23.4.2 #ifdef������������������������������������������������������������������������������������������������������������������������ 177
23.4.3 #ifndef���������������������������������������������������������������������������������������������������������������������� 178
23.5 Built-In Macros����������������������������������������������������������������������������������������������������������������� 179
23.6 Function-Like Macros������������������������������������������������������������������������������������������������������� 181

ix
Table of Contents

Chapter 24: Exercises������������������������������������������������������������������������������������������� 183


24.1 Define and Undefine a Macro�������������������������������������������������������������������������������������������� 183
24.2 Conditional Compilation���������������������������������������������������������������������������������������������������� 184
24.3 Built-In Macros����������������������������������������������������������������������������������������������������������������� 184
24.4 Function Macros��������������������������������������������������������������������������������������������������������������� 185

Chapter 25: Dynamic Memory Allocation������������������������������������������������������������� 187


25.1 malloc������������������������������������������������������������������������������������������������������������������������������� 188
25.2 calloc�������������������������������������������������������������������������������������������������������������������������������� 196
25.3 realloc������������������������������������������������������������������������������������������������������������������������������� 199

Chapter 26: Storage and Scope���������������������������������������������������������������������������� 201


26.1 Scope�������������������������������������������������������������������������������������������������������������������������������� 201
26.1.1 Local Scope�������������������������������������������������������������������������������������������������������������� 201
26.1.2 Global Scope������������������������������������������������������������������������������������������������������������� 202
26.2 Storage������������������������������������������������������������������������������������������������������������������������������ 204
26.2.1 Automatic Storage Duration������������������������������������������������������������������������������������� 204
26.2.2 Static Storage Duration�������������������������������������������������������������������������������������������� 205
26.2.3 Allocated Storage Duration��������������������������������������������������������������������������������������� 206

Chapter 27: Exercises������������������������������������������������������������������������������������������� 209


27.1 Dynamic Memory Allocation��������������������������������������������������������������������������������������������� 209
27.2 Dynamic Memory Allocation: Arrays��������������������������������������������������������������������������������� 210
27.3 Dynamic Memory Resizing����������������������������������������������������������������������������������������������� 211
27.4 Automatic and Allocated Storage�������������������������������������������������������������������������������������� 212

Chapter 28: Standard Input and Output���������������������������������������������������������������� 213


28.1 Standard Input������������������������������������������������������������������������������������������������������������������ 213
28.1.1 scanf������������������������������������������������������������������������������������������������������������������������� 213
28.1.2 sscanf����������������������������������������������������������������������������������������������������������������������� 215
28.1.3 fgets������������������������������������������������������������������������������������������������������������������������� 216

x
Visit https://ebookmass.com today to explore
a vast collection of ebooks across various
genres, available in popular formats like
PDF, EPUB, and MOBI, fully compatible with
all devices. Enjoy a seamless reading
experience and effortlessly download high-
quality materials in just a few simple steps.
Plus, don’t miss out on exciting offers that
let you access a wealth of knowledge at the
best prices!
Table of Contents

28.2 Standard Output���������������������������������������������������������������������������������������������������������������� 218


28.2.1 printf������������������������������������������������������������������������������������������������������������������������� 218
28.2.2 puts�������������������������������������������������������������������������������������������������������������������������� 220
28.2.3 fputs������������������������������������������������������������������������������������������������������������������������� 221
28.2.4 putchar��������������������������������������������������������������������������������������������������������������������� 221

Chapter 29: File Input and Output������������������������������������������������������������������������� 223


29.1 File Input��������������������������������������������������������������������������������������������������������������������������� 223
29.2 File Output������������������������������������������������������������������������������������������������������������������������� 225

Chapter 30: Exercises������������������������������������������������������������������������������������������� 227


30.1 Standard Input������������������������������������������������������������������������������������������������������������������ 227
30.2 Standard Output���������������������������������������������������������������������������������������������������������������� 228

Chapter 31: Header and Source Files������������������������������������������������������������������� 231

Part II: The C Standard Library������������������������������������������������������������������� 235


Chapter 32: Introduction to C Standard Library��������������������������������������������������� 237
32.1 String Manipulation����������������������������������������������������������������������������������������������������������� 239
32.1.1 strlen������������������������������������������������������������������������������������������������������������������������ 239
32.1.2 strcmp���������������������������������������������������������������������������������������������������������������������� 240
32.1.3 strcat������������������������������������������������������������������������������������������������������������������������ 241
32.1.4 strcpy������������������������������������������������������������������������������������������������������������������������ 241
32.1.5 strstr������������������������������������������������������������������������������������������������������������������������� 242
32.2 Memory Manipulation Functions�������������������������������������������������������������������������������������� 244
32.2.1 memset�������������������������������������������������������������������������������������������������������������������� 244
32.2.2 memcpy�������������������������������������������������������������������������������������������������������������������� 245
32.2.3 memcmp������������������������������������������������������������������������������������������������������������������ 248
32.2.4 memchr�������������������������������������������������������������������������������������������������������������������� 249
32.3 Mathematical Functions��������������������������������������������������������������������������������������������������� 250
32.3.1 abs���������������������������������������������������������������������������������������������������������������������������� 250
32.3.2 fabs��������������������������������������������������������������������������������������������������������������������������� 251

xi
Table of Contents

32.3.3 pow��������������������������������������������������������������������������������������������������������������������������� 251


32.3.4 round������������������������������������������������������������������������������������������������������������������������ 252
32.3.5 sqrt��������������������������������������������������������������������������������������������������������������������������� 253
32.4 String Conversion Functions��������������������������������������������������������������������������������������������� 254
32.4.1 strtol������������������������������������������������������������������������������������������������������������������������� 254
32.4.2 snprintf��������������������������������������������������������������������������������������������������������������������� 256

Part III: Modern C Standards���������������������������������������������������������������������� 259


Chapter 33: Introduction to C11 Standard������������������������������������������������������������ 261
33.1 _Static_assert������������������������������������������������������������������������������������������������������������������� 261
33.2 The _Noreturn Function Specifier������������������������������������������������������������������������������������� 262
33.3 Type Generic Macros Using _Generic�������������������������������������������������������������������������������� 263
33.4 The _Alignof Operator������������������������������������������������������������������������������������������������������� 265
33.5 The _Alignas Specifier������������������������������������������������������������������������������������������������������ 267
33.6 Anonymous Structures and Unions����������������������������������������������������������������������������������� 268
33.7 Aligned Memory Allocation: aligned_alloc������������������������������������������������������������������������ 269
33.8 Unicode Support for UTF-16 and UTF-32�������������������������������������������������������������������������� 2 70
33.9 Bounds Checking and Threads Overview�������������������������������������������������������������������������� 270
33.9.1 Bounds-Checking Functions������������������������������������������������������������������������������������� 270
33.9.2 Threads Support������������������������������������������������������������������������������������������������������� 271

Chapter 34: The C17 Standard������������������������������������������������������������������������������ 273

Chapter 35: The Upcoming C23 Standard������������������������������������������������������������� 275


35.1 constexpr�������������������������������������������������������������������������������������������������������������������������� 275
35.2 Binary Integer Constants�������������������������������������������������������������������������������������������������� 277
35.3 true and false�������������������������������������������������������������������������������������������������������������������� 278
35.4 nullptr�������������������������������������������������������������������������������������������������������������������������������� 279
35.5 Empty initializer ={}���������������������������������������������������������������������������������������������������������� 280
35.6 #embed����������������������������������������������������������������������������������������������������������������������������� 281
35.7 Attributes�������������������������������������������������������������������������������������������������������������������������� 284

xii
Table of Contents

35.8 No Parameters Function Declaration�������������������������������������������������������������������������������� 285


35.9 The strdup Function���������������������������������������������������������������������������������������������������������� 286
35.10 The memccpy Function��������������������������������������������������������������������������������������������������� 287

Part IV: Dos and Don’ts������������������������������������������������������������������������������� 289


Chapter 36: Do Not Use the gets Function������������������������������������������������������������ 291

Chapter 37: Initialize Variables Before Using Them��������������������������������������������� 293


Chapter 38: Do Not Read Out of Bounds��������������������������������������������������������������� 295

Chapter 39: Do Not Free the Allocated Memory Twice����������������������������������������� 297

Chapter 40: Do Not Cast the Result of malloc������������������������������������������������������� 299

Chapter 41: Do Not Overflow a Signed Integer����������������������������������������������������� 301

Chapter 42: Cast a Pointer to void* When Printing Through printf����������������������� 303

Chapter 43: Do Not Divide by Zero������������������������������������������������������������������������ 305

Chapter 44: Where to Use Pointers?��������������������������������������������������������������������� 307


44.1 Pointers to Existing Objects���������������������������������������������������������������������������������������������� 307
44.2 Pointers to Arrays�������������������������������������������������������������������������������������������������������������� 308
44.3 Pointers to String Constants��������������������������������������������������������������������������������������������� 310
44.4 Pointers to Dynamically Allocated Memory���������������������������������������������������������������������� 311
44.5 Pointers as Function Arguments��������������������������������������������������������������������������������������� 312

Chapter 45: Prefer Functions to Function-Like Macros���������������������������������������� 315

Chapter 46: static Global Names�������������������������������������������������������������������������� 317

Chapter 47: What to Put in Header Files?������������������������������������������������������������� 319


47.1 Shared Macros������������������������������������������������������������������������������������������������������������������ 319
47.2 Function Declarations������������������������������������������������������������������������������������������������������� 321
47.3 Shared extern Variables and Constants���������������������������������������������������������������������������� 322
47.4 Other Header Files������������������������������������������������������������������������������������������������������������ 324

xiii
Table of Contents

Part V: Appendices������������������������������������������������������������������������������������� 325


Appendix A: Linkage��������������������������������������������������������������������������������������������� 327

Appendix B: Time and Date����������������������������������������������������������������������������������� 329

Appendix C: Bitwise Operators����������������������������������������������������������������������������� 333


C.1 The Bitwise NOT Operator ~����������������������������������������������������������������������������������������������� 333
C.2 Bitwise Shift Operators << and >>������������������������������������������������������������������������������������ 335
C.3 The Bitwise AND Operator &����������������������������������������������������������������������������������������������� 338

Appendix D: Numeric Limits��������������������������������������������������������������������������������� 341


D.1 Integer Types Limits������������������������������������������������������������������������������������������������������������ 341
D.2 Floating-Point Types Limits������������������������������������������������������������������������������������������������� 343

Appendix E: Summary and Advice������������������������������������������������������������������������ 345


E.1 What to Learn Next?������������������������������������������������������������������������������������������������������������ 345
E.2 Online References��������������������������������������������������������������������������������������������������������������� 346
E.3 Other C Books��������������������������������������������������������������������������������������������������������������������� 346
E.4 Advice��������������������������������������������������������������������������������������������������������������������������������� 346

Index��������������������������������������������������������������������������������������������������������������������� 347

xiv
About the Author
Slobodan Dmitrović is a software consultant, trainer, and
author of several programming books. He is a professional
R&D software developer with two decades of experience in
the industry. Slobodan provides C and C++ training courses
to corporate clients and academic institutions. Contact
Slobodan at linkedin.com/in/slobodan-dmitrovic.

xv
About the Technical Reviewer
German Gonzalez-Morris is a polyglot software architect/
engineer with 20+ years in the field, with knowledge in Java,
Spring Boot, C/C++, Julia, Python, Haskell, and JavaScript,
among others. He works with cloud (architecture),
web-distributed applications, and microservices. German
loves math puzzles (including reading Knuth, proud of
solving some of Don’s puzzles), swimming, and table tennis.
Also, he has reviewed several books, including an application
container book (WebLogic) and some on languages (C, Java,
Spring, Python, Haskell, TypeScript, WebAssembly, Math for
coders, regexp, Julia, data structures and algorithms). You
can see details in his blog https://devwebcl.blogspot.com/
or X/Twitter account: @devwebcl.

xvii
Acknowledgments
I want to thank the readers, friends, and peers who have supported me in writing the
second edition of this book.
I am indebted to Peter Dunne, Glenn Dufke, Bruce McGee, Tim Crouse, Jens Fudge,
Rainer Grimm, and Rob Machin for all their work, help, and support.
I am grateful to the outstanding professionals at Apress who have supported me
throughout the writing process.
I am thankful to all the amazing software developers, architects, and entrepreneurs I
met and collaborated with.

xix
Introduction
Dear reader, congratulations on choosing to learn the C programming language, and
thank you for picking up this book. My name is Slobodan Dmitrović, and I will try to
introduce you to the wonderful world of C programming to the best of my abilities.
This book is divided into five parts. In Part 1, we cover the C language basics. Part 2
explains the C standard library, and Part 3 introduces us to modern C standards. Part 4
explains the dos and don’ts in modern C. The final part consists of the Appendices. Let
us get started!

xxi
PART I

The C Programming
Language
CHAPTER 1

Introduction
1.1 What Is C?
C is a programming language – a general-purpose, procedural, compiled programming
language. C language was created by Dennis Ritchie in the late 1960s and early 1970s.
The C program is a collection of C source code spread across one or more source and
header files. Source files, by convention, have the .c extension, and header files have the
.h extension. Source and header files are plain text files that contain some C code.

1.2 What Is C Used For?


C is often used for the so-called systems programming, which is operating systems
programming, application programming, and embedded systems programming, to
name a few. A large portion of Linux and Windows operating systems was programmed
using C. C is often used as a replacement for an assembly language. C language
constructs efficiently translate to the hardware itself.

1.3 C Compilers
To compile and run a C program, we need a C compiler. A compiler compiles a C
program and turns the source code into an object file. The linker then links the object
files together and produces an executable or library. For the most part, we say we
compile the program and assume the compilation process results in an executable file we
can run. At the time of writing, some of the more popular C compilers are

• gcc – As part of the GCC toolchain

• Clang – As part of the LLVM toolchain

3
© Slobodan Dmitrović 2024
S. Dmitrović, Modern C for Absolute Beginners, https://doi.org/10.1007/979-8-8688-0224-9_1
Visit https://ebookmass.com today to explore
a vast collection of ebooks across various
genres, available in popular formats like
PDF, EPUB, and MOBI, fully compatible with
all devices. Enjoy a seamless reading
experience and effortlessly download high-
quality materials in just a few simple steps.
Plus, don’t miss out on exciting offers that
let you access a wealth of knowledge at the
best prices!
Exploring the Variety of Random
Documents with Different Content
venäläisten voimakkaita rynnäkköjä, mutta olivat nyt sekä perin
uupuneita että ilman ampumavaroja. —

III.
Toinen peräytymisretki.

1.

— Kapteeni Burman, — huusi Sandels, kun hän taistelun päätyttyä


ratsasti sillan ohi ja näki sen kammottavan paljouden haavoitettuja
ja kuolleita, joita oli kasottunut sillan molempiin päihin, — lähtekää
heti kenraali Tutshkowin luo kysymään, tahtoisiko hän aselepoa
haudatakseen kuolleita ja korjatakseen haavoitetut kentältä pois. —

Burman läksi. Hänen täytyi kiipeämällä kiivetä sillalle


pinoutuneiden ruumisläjien yli. Keskellä siltaa tuli häntä vastaan
parooni von Pahlen ja kenraali Aleksejeff, joista viimemainittu oli
johtanut venäläisten onnetonta rynnäkköä päävarustuksia vastaan.
Lyhyen odotuksen jälkeen ehdotti Tutshkow 24 tunnin välirauhaa.
Tämän vastauksen joudutti Burman Sandelsille, joka hyvän aikaa
mietittyään vastasi:

— Kerro venäläisten välitysmiehille semmoiset terveiset, että


jolleivät he suostu 36-tuntiseen välirauhaan, niin olkoot heti paikalla
valmiit jatkamaan taistelua. —

Kun Burman palasi takasin, kysyi Aleksejeff levottoman näköisenä


vastausta.

Burman ilmoitti sen ja ilman mitään suostuttiin Sandelsin


ehdotukseen.

Nämä 36 tuntia käytettiin kummallakin puolella


taisteluvalmistuksiin. Tutshkowilla kun oli paljoa suurempi ylivoima,
piti hän perin raukkamaisena, ellei voittaisi harvalukuisia suomalaisia,
Nämä ahertivat taukoamatta yötä päivää saadakseen varustuksensa
parempaan kuntoon.

Mutta vaikka pantiin kaikki voimat ja parhaat neuvot liikkeelle


brigaadin turvaamiseksi, huomasi Sandels kuitenkin kohta, että
hänen asemansa oli heikko, jos vihollinen tekisi yhtä voimakkaan
rynnäkön kuin tänäänkin.

Hänen tunteensa eivät siis olleet iloisia, kun hän illalla lokakuun 28
päivänä verkkaan käyskeli edestakasin äärimmäisellä vallilla, jossa
työt olivat toistaiseksi lopetettu. Eräällä vallin kulmakkeella seisoi
joukko upseereja, keskustellen matalalla äänellä, etteivät olisi
häirinneet ajatuksiinsa vaipunutta päällikköä. Joukossa oli myöskin
Valter Jernfält.
Taistelun päätyttyä oli hän Sandelsin luvalla lähettänyt Olgan
Niemeen, koska tämä ei enää voinut olla turvattuna leirissä niiden
uusien ja ehkä vieläkin verisempien taistelujen tähden, joita oli
tulossa.

Surumielin jätti nuori tyttö sulhonsa. Mutta Valter rohkaisi häntä


ilmoittamalla, että urhoollinen Kokko kuuden ravakan jääkärin kanssa
läksisi häntä saattamaan.

Valter Jernfält oli hänkin ajatuksiinsa vaipunut nojatessaan


rintavallia vasten. Toverien keskustelua hän ei juuri seurannut, sillä
ajatukset seurasivat häntä, joka äsken oli hänet jättänyt.

Brigaadin päällikön liikkeet olivat aivan epäsäännöllisiä. Milloin hän


kulki suoraan, milloin teki mutkia, konsa liikkui hitaasti, konsa taas
kiihkeämmin.

Viimein hän pysähtyi erääseen kohden, josta aukeni avara näköala


varustusten ja Virran sillan välillä. Ajatukset veivät hänet takaisin
eilispäiväisen taistelun pyörteisiin. Raskas huokaus pääsi povesta.
Varustusten edustalla savusi vielä palaneiden rakennusten hiiltyneitä
raunioita ja kepeä iltatuuli levitti savua ympäri kenttää.

Sandelsin seistessä näissä aatteissaan ilmestyi hänen luokseen


Fahlander ja Duncker. Nämät nähtyään päällikön vakavat kasvot
hieman elostuivat.

— Tiedättekö, hyvät herrat, mitä näen kaukoputkessa? — virkkoi


hän viimein niin matalalla äänellä, etteivät etempänä seisovat
upseerit sitä kuulleet.
— Emme, — vastasivat Fahlander ja Duncker yhteen ääneen, —
sitä on mahdotoin arvata. —

— Niin, olen aprikoinut tyysten tätä meidän asemaamme ja


huomannut, ettei se kestä näin vähillä joukoilla, jotka ovat
käytettävissäni. —

Duncker peräytyi pari askelta ja aikoi päästää huudahduksen,


mutta estyi siitä, kun Sandels heitti merkitsevän katseen syrjempänä
seisoviin upseereihin.

Kenraali jatkoi sitte huomattuaan, etteivät muut kuin Fahlander ja


Duncker häntä kuulleet.

— Asemamme on liian avoin viholliselle. Suurella ylivoimallaan


onnistuu Tutshkowin epäilemättä vallata meidät ennemmin tai
myöhemmin… —

Samassa saapui ajutantti von Fieandt hengästyneenä paikalle.

— Hoh, tulette aivan kuin tulisesta pätsistä, — virkkoi Sandels


reippaasti.

Kun loitompana olevat upseerit huomasivat von Fieandtin,


jännittivät he kuulohermojaan voidakseen saada selvää, mitä tällä oli
sanomista.

— Niin, — vastasi von Fieandt, — tietoni eivät ole juuri


ilahduttaviakaan. —

— Antaa kuulua kuitenkin! — käski Sandels ja huomattuaan, että


ajutantti heitti epäilevän katseen Fahlanderiin ja Dunckeriin hän
lisäsi: — sanokaa pois sanottavanne suoraan. Ei se tee mitään, jos
nämä herrat tässä sen kuulevat. —

Ja von Fieandt kertoi:

— Käskyn mukaan olin valvomassa töitä sillan luona. Äkkiä kiintyi


huomioni erääseen outoon liikkeeseen toisella rannalla. Joukko
veneitä oli siellä valmiina lähtöön nähtävästi kaikessa hiljaisuudessa
ja… —

— Näittekö, mistä veneet tulivat? — keskeytti Fahlander kiivaan


puoleisesti.

— En. —

— No, jatkakaa sitte, — kehoitti Sandels kärsimättömänä, että


ajutanttia oli keskeytetty.

— Siinä niillä lienee varmaankin salainen retki tekeillä, ajattelin.


On siis parasta pitää silmänsä auki. Hiljaa ryömin sen tähden rantaa
pitkin, jolloin sainkin utelijaisuuteni tyydytetyksi. Noin keskipaikkeilla
pappilaa ja Iisalmen kirkkoa näin kokonaisen venhekunnan. Joukko
sotamiehiä nousi venheisiin ja soutivat nopeasti Niirolanniemelle
päin. Kaksi rakuunaa, jotka lähetin sinne, kertoivat, että vihollinen
teki siellä maallenousua ja että… —

— Pysähtykää, — keskeytti Sandels. Siitä nyt näette, herrani, —


jatkoi hän Fahlanderille ja Dunckerille, — etten ole aprikoinut
niinkään hullusti. Mutta mitä nyt? Tuollahan tulla lennättää vielä
joku! Lienee toinen Jobin sanoma! —

Sitä se olikin. Tulija, eräs aliupseeri Kataisten kylässä olevasta


patterista, toi sen sanoman, että eräs vihollisjoukko, joka oli ollut
jotakuinkin mieslukuinen, oli nähty Lapinniemen käressä vastapäätä
mainittua kylää. Kapea salmi erottaa tässä kohden maat toisistaan.

— Ahaa, — virkkoi Sandels, kun ali-upseeri oli lopettanut, — meitä


aijotaan saartaa. Sama se! Siitä pääsee ainoastaan yhdellä tavalla —
peräytymällä. Rientäkää heti takasin ja jouduttakaa joukot
lähtökuntoon. Viimeistään kello kaksi aamulla täytyy meidän jo
lähteä! —

Lähtövarustukset toimitettiin nopeaan ja määrätunnilla oli kaikki


valmista peräytymisretkelle.

Synkkä oli se hetki jolloin Sandelsin urhean joukon, joka niin


kauan oli sekä kurittanut vihollista että ajanut sitä pitkin Karjalaa,
täytyi jättää valiopaikkansa, jota se vasta muutamia tunteja sitte oli
verellään kostuttanut ja voittajana hallinnut.

Vanhojen, harmaapäiden uroiden nähtiin heittävän synkkiä,


uhkaavia katseita toiselle rannalle. Monta kaipauksen huokausta
pääsi sotilaiden rinnoista tuona yönä.

Sandels itse oli tavattoman synkkä ratsastaessaan joukkonsa


etunenässä.
Hän ei puhunut sanaakaan, ei seurustellut kenenkään kanssa.

Eksyttääkseen venäläisiä ja salatakseen peräytymisen, joka


muussa tapauksessa olisi voinut saada ikävän lopun, jätettiin paikalle
osasto Karjalan rakuunia pitämään vireillä vahtitulia. Heti päivän
koittaessa oli näiden sitte rientäminen pääjoukon perästä Vierimälle,
noin pari peninkulmaa Virran sillalta pohjoiseen.
Kun Vierimän seudulle ei voitu järjestyä niin vahvaan
puolustusasemaan kuin brigaadin päällikkö tahtoi, jätti hän tänne
ainoastaan selkäjoukon eversti Aminoffin komennolla. Muun joukon
kanssa marssi hän Salahurin kylään, jonne tulee peninkulma
Vierimästä, Ja täällä lakkasi olemasta viides brigaadi, tuo Sandelsin
urhea joukko.

Salahurissa tuli tähän näet lisäksi jäännökset entisestä Savon


brigaadista. Tämä yhdistettiin nyt Sandelsin joukkoon ja samalla
kertaa muutettiin viides brigaadi neljänneksi, joka nimi, kuten
tiedämme, sillä oli ensimmäisellä peräytymisretkellä.

2.

Niemessä vallitsi syvä ja pitkällinen suru Olgan ryöstämisen


tähden. Talon palvelusväkikin tunsi kovaa kaipuuta kasakkatytön
kohtalon johdosta. Hän oli näet aina ollut niin hyvä ja hellä köyhille
ja rohkaissut näitä sydämmellisyydellään.

Kovimmin oli isku kohdannut Patrik Jernfältiä. Ensi päivinä ei ukko


oikein ottanut uskoakseen, että Olga olikaan poissa, vaan allapäin
käveli ympäriinsä aivan kuin odottaen tämän tulevan esiin jostain
piilosta. Ja kun ei kotvilleen tullut Valteriltakaan kirjettä, alkoi elämä
tuntua majurista liian raskaalta taakalta.

Oliko Valter vielä elossa vai oliko hän kenties jo kaatunut?

Ei kukaan voinut antaa vanhalle sankarille tyydyttävää vastausta


näihin kysymyksiin, jotka hän joka päivä itselleen teki.
Ainoat valoisat hetket olivat silloin, kun nuori lääkäri Fabian H. kävi
heidän luonaan. Tämän ja Amalian välit olivat vähitellen saaneet yhä
hellemmän luonteen ja eräänä syyskuun iltana uskoi lääkäri
sydämmensä tunteet Amalialle samalla paikalla, jossa Olga oli
joutunut kasakkojen käsiin. Amalian ehdotuksesta pitivät he liittonsa
salassa ja päätettiin se pitää semmoisena sodan loppuun saakka.
Mutta eräänä iltana tapasi Patrik Jernfält nuoret yhdessä ja silloin ei
näiden auttanut muu kuin tunnusta pois.

On taas eräs syksyn synkkiä iltoja. Isä tyttärineen ja majurin


tuleva vävy istuvat ukon työhuoneessa. Fabian H:n olisi kyllä pitänyt
lähteä illaksi kotiinsa, mutta nuoren morsiamen pyynnöt saivat hänet
kuitenkin jäämään heille.

Syysillan pitkää puhdetta kulutettiin lukemisella ja keskustelulla. Ja


puheen aiheena oli tietysti päivän polttavin kysymys, sota.

— On se Sandels kelpo sotaherra, — lausui majuri, mutta


enemmän minä kapteeni Malmia ihmettelen. Tekee niin loistavan
retken Venäjälle semmoisilla sotavoimilla. Lempo vieköön, — jatkoi
vanha sotilas innostuneena, — on ihan synti ja häpeä, ettei
ylipäällikkö auttanut… —

— Älkää sanoko niin, — keskeytti tohtori. — Joukkoja on tarvittu


toisellakin taholla. Syy on yksinomaan kuninkaassa ja hallituksessa,
Miten oli varustettu esim. se joukko, joka nousi maalle Etelä-
Suomessa! Surkeampaa ei liene muulloin nähty. Kuningas on
itsepäinen ja niin naurettavan lapsellinen, että luulee olevansa toinen
Kaarlo XII ja kaiken lisäksi vielä halveksii vihollista. Sen tähden
menevät asiat, niin kuin ne menee. —
— Merkillistä, miten kaikki ihmiset käyvät Kustaa Aadolf raukan
kimppuun, — virkkoi Amalia hieman harmistuneena. — Jos jokukaan
noista ruikuttajista itse asettuisi hallitsemaan, niin saataisiin nähdä,
miten kävisi. —

— Varmaankin paremmin kuin nyt, — sanoi majuri. — Mutta


hänen isänsä, siinä se oli miesten mies. Kyllähän häntäkin morkataan
tuhlaavaisuudesta ja ranskalaisten tapojen suosimisesta, mutta se oli
ajan hengen mukaista. Kukapa voisi kieltää hänen urhokkuuttaan,
joka historiassa hänelle omistetaan? Ja kuka sen kunnian, että hän
on kohottanut Ruotsin sotamainetta? Ei kukaan, sillä hänen Venäjän
sotansa ja ne voitot, jotka silloin sekä merellä että maalla
saavutettiin, puhuvat kyllin hänen puolestaan. Vikoineen ja
puutteineen hän sittenkin oli kuningas, jolla sydän oli oikealla
paikallaan, sen sain itse monet kerrat omin silmin nähdä. Mitä taas
hänen poikaansa tulee, niin… —

Samassa silmänräpäyksessä syöksyi sisään vanha Juho, kalpeana


ja pelästyneenä.

— Mitä nyt? Mitä on tekeillä? — kysyi Patrik Jernfält hypähtäen


ylös.
Amalia ja tohtorikin kavahtivat pystyyn.

Viimein Juho pääsi sen verran tolkulle, että läähättämällä sai


sanotuksi:

— Nähkääs, kun mi-minä… minä… näin… ku-kummituksen! Se…


se on varmaankin… sa-sama, joka… joka… —

— Minähän se vain säikytin vanhan Juho paran, — kuului samassa


nuorelta sointuva ääni ovelta ja ennen kuin majuri ehti tointua
hämmästyksestään, riensi Olga esiin ja heittäytyi hänen kaulaansa.

Juho seisoi kuin puustapudonneena.

— Jumalan kiitos, että toki osaa puhua, — ähki Juho itsekseen. —


Ei se sitte kummitus olekaan. —

Ja näin sanoen vanha palvelija luikki nolostuneena ulos, mutta


riensi kiiruimman kautta ilmoittamaan toisille palvelijoille, että
"jumalanenkeli" oli tullut takasin terveenä ja reippaana.

Useampia kertoja tarvitsi majurin käännellä Olgaa puoleen ja


toiseen ja tarkastella häntä joka taholta, ennen kuin tuli
vakuutetuksi, että hän se siinä oli. Ja kun hän viimein sai tämän
päähänsä, avasi hän uudelleen sylinsä, painoi tyttöä rintaansa vasten
niin hellästi kuin omaa lastaan.

— No, Jumalan kiitos, että olet täällä jälleen! Sanohan nyt kaikista
ensiksi, miten Valter jaksaa, sitte saat kertoa omat kuulumisesi. —

Punastuen korviaan myöten vastasi Olga:

— Hyvin hän jaksaa. Käski kertomaan tuhansia terveisiä teille ja


Amalialle. —

— Niin, kuulehan, — tokasi majuri hymyillen. — Nyt ei sinun enää


tarvitse peitellä meiltä mitään. Amalian on onnistunut valloittaa tuo
tohtori tuolla ja sinun lienee parasta tunnustaa, että olet anastanut
linnoituksen nimeltä Valter Jernfält. —

Kun Olga punottaen ja nauraen oli tunnustanut anastuksensa,


painautui seura istumaan ja nuori kasakkatyttö kertoi kohtalonsa
juurta jaksain. Hänen lopetettuaan, sanoi Patrik Jernfält:
— Minä en tahdo ainoankaan syntisen kuolemaa, mutta parasta se
sentään oli että isäsi kaatui. Nyt voit sinäkin hengittää vapaasti ja
kaikessa rauhassa tarvitsematta pelätä vihollisen tuloa. —

Olgan tulo toi Niemeen iloa ja elämää ja oikein oli liikuttavaa


nähdä sitä vilpitöntä ystävällisyyttä, millä talon palvelijat tervehtivät
Olgaa, kun saivat häntä seuraavana päivänä nähdä.

*****

Marraskuun 16 päivä 1808 oli kylmä ja tuulinen. Lunta ryöppysi


tuntimääriä, niin että tuskin erotti kymmenen kyynärän päähän
eteensä.

Maantietä pitkin Piippolasta päin kulki eräs mies ja nainen.


Elähtäneitä olivat molemmat ja jos heitä lähemmin tarkastamme,
tunnemme heissä ukko Hiukan ja Nellan, Onnin äidin. He kulkivat
kovasti, sillä viima oli pureva. Mutta kun ei tälläkään tavoin ruumis
ottanut pysyäkseen lämpimänä, veti ukko poveltaan pienen
viinanassakan, otti siitä siemauksen ja tarjosi tilkan tyttärelleenkin.

Se tekikin lämmittävän vaikutuksen.

— Ompa siitä jo aikoja, kun Onnista on mitään kuulunut, — virkkoi


ukko Hiukka, kun Pulkkilan kirkonkylän äärimmäiset hökkelit alkoivat
häämöttää. — Vieläköhän poika elää? —

— Älkää puhuko niin, isä, — sanoi Nella pyyhkien karkealle


poskelleen hyytyneen kyynelkarpalon.

— Niin, tulee sitä tämmöisinä aikoina ajattelemaan kaikkea ja


ottamaan vastaan vaikka mitä, — vastasi Hiukka. — Jos hän on
kaatunut, niin sen tiedän, että hän on miehenä kaatunut, niin poika
kuin onkin. —

Samassa sattui Nella katsahtamaan taaksensa. Hätäisesti tarttui


hän ukon mekon liepeeseen ja sanoi:

— Mitä väkeä tuolta jälestä päin tulee? —

Tähysteltyään hetken aikaa virkkoi Hiukka:

— Näkyvät olevan Savon jääkärien puvussa. —

Tulevat sotamiehet olivat niitä, jotka Kokon johdolla olivat


saattaneet Olgan Niemeen. Kun he olivat täällä paripäivää levänneet
ja perinpohjin virkistyneet matkan vaivoista, läksivät he
paluumatkalle saavuttaakseen brigaadin Pulkkiiassa.

Kokko tunsi heti ukko Hiukan ja tämän tyttären ja huusi jo


etempää:

— Terve, vanha hiihtomies! Pitkän matkanhan sinäkin olet tehnyt


Lehtoniemestä saakka tyttärenpoikaasi tapaamaan.

Hiukka ja Nella vaihtoivat jonkun aikaa katseita äänettöminä.


Olivat nähtävästi hämillään odottamattomasta tuttavuudesta. Mutta
kun sotamiehet tulivat lähemmä, tunsi Hiukkakin Kokon.

— Ah, — virkkoi hän iloisesti, — sinähän se olit meillä yötä, kun


tyttärenpoikani päähän pisti ruveta sotamieheksi! —

— Oikein arvattu, ukkoseni, — vastasi Kokko lyöden hiihtomiehelle


kättä. — Se oli muuten hyvä kauppa, se. Voin näet kertoa teille, että
pojasta on paisunut jo koko mies ja hän on paraita jääkärejä Savon
brigaadissa. —

— Vai niin, — ihmetteli Hiukka ilon sädehtiessä hänen silmistään.

— Hän siis elää! — huudahti Nella pannen kädet ristiin rinnoilleen.


— Jumalalle kiitos! —

— Niin, kyllä hän vielä eli minun lähtiessäni Iisalmelta taistelun


jälkeisenä päivänä, —

— Kuulehan, — tokasi Hiukka ja tarjosi pullostaan viimeisiä tilkkoja


Kokolle, — tuleeko brigaadi ihan varmaan tänne Pulkkilaan? —

— Ihan varmaan, sen pitäisi tulla tänään. —

Pari tuntia tämän jälkeen nähtiin jo Savon brigaadin etujoukko.


Pulkkilan kylään oli kertynyt semmoiset joukot ihmisiä, että kaikki
asunnot olivat ahdinkoon asti täynnä.

Hiukka ja Nella olivat eräässä talossa kylän eteläpäässä. Puoleen


ja toiseen siinä arvailtiin ja tuumittiin, milloinkahan Onni näkyisi.

— Saapas nähdä, minkä näköinen poika nyt on, — arveli vanha


hiihtäjä ja raapi miettivänä korvallistaan.

— Minkähän lienee, — säesti Nella. — Taitaa olla hyvin


päivettynyt. —

— Päivettynyt syksyllä! —

— Tosiaankin, syksyhän nyt on. Mutta on se varmaankin kasvanut.



— Totta kai. Onhan siitä jo vuosi pojan lähdöstä. Mutta se ei
merkitse vielä mitään, kunhan olisi säilyttänyt hyvän sydämmensä ja
täyttänyt aina velvollisuutensa isänmaata kohtaan. —

— Kuulittehan, että Kokko sanoi hänen olevan kelpo jääkärin ja


että… —

Kokko tuli samassa saapuville keskeyttäen puhelun.

— Miksi te olette tänne jääneet? — kysyi hän ihmetellen.

— Saadaksemme nähdä Onnin niin kohta kuin mahdollista, —


vastasi
Hiukka hänkin ihmeissään Kokon kysymyksestä.

— Saisitte sitte istua täällä sivu tuomiopäivänkin poikaanne


näkemättä, — vastasi Kokko nauraen.

— Mitenkä niin? — kysyivät Hiukka ja Nella yhteen ääneen.

— Siten, että Savon jääkärit ovat tulossa Tuomaalan kautta ja


saapuvat kylään pohjoisesta päin. Sitäpaitsi ei ainoakaan sotamies
saa puhua yhtään sanaa omaistensa kanssa ennen, kuin ovat
sijoittuneet asemilleen. Kenraali on siinä suhteessa ankara ja se
onkin oikein, sillä pitkän marssin jälkeen tarvitsevat miehet lepoa. Ja
kun vihollinen luultavasti seuraa kintereillä, niin on viisainta ensin
panna kaikki järjestykseen, jos sattuisi noin niinkuin pamahtamaan.

— Se on totta, se, — myönsi Hiukka, — mutta mitenkäs sen pojan


sitte näkee? —
— Minä vien teidät hänen luokseen, — sanoi Kokko, — Seuratkaa
vain minua, niin pääsette vähällä —

Kokon saattamina, jolle tunkeileva väkijoukko vastustelematta teki


tietä, saapuivat Hiukka ja Nella kylän pohjoispäähän, missä Kokon
toverit odottivat jääkäripataljoonaa.

Ja tuolta se jo näkyikin tulevan.

— Nyt ne tulee, — kuiskasi Kokko Nellan korvaan. — Näettekö


joukkoja tuolla? —

— Näen. —

— No pitäkää silmänne auki, sillä olen varma siitä, ettette Onnia


tunne. —

Näin sanoen riensi Kokko järjestämään miehiään voidakseen


sotilaallisella tavalla ottaa vastaan tovereita.

— Herra tule ja siunaa, isä! — huudahti Nella jääkäripataljoonan


reippaasti marssiessa ohi. — Tuollahan se minun poikani on! —

Pitkä, solakka nuorukainen, joka marssi eräässä eturivissä, käänsi


samassa äkkiä päätään. Hänen katseensa kohtasi Hiukan ja Nellan.
Näki selvästi pojasta, että hän olisi niin mielellään rientänyt rivistä
syleilemään rakkaita omaisiaan, mutta sotakuri oli voittamattomana
esseenä ja tukahdutti tunteet. Mutta kukaan ei voinut häntä estää
iloisesti nyökäyttämästä päätään äidille ja iso-isälle.

Puoli tuntia tämän jälkeen työntäytyi jo Onni väkijoukkoon


omaisiaan etsimään. Viimein hän keksikin nämä väen vilinästä ja
kietoen takaapäin kätensä äidin kaulaan sanoi:
— Jumalalle kiitos, että vielä elätte ja olette terveet! —

Ja sitte taas syleiltiin ja tervehdittiin ja kun nämä temput


päättyivät, pani ukko Hiukka kätensä puuskaan, katseli hyvän aikaa
Onnia, joka oli kasvanut koko lailla, ja sanoi entiseen tapaansa:

— Sitä poikaa! —

— Niin sanoitte te kerran ennenkin, iso-isä, — virkkoi Onni


iloisesti, — ja silloin arvelin, että näinköhän vielä joskus sanotte
samalla tavalla! —

— Olet varmaankin tehnyt paljon pahojasi, — virkkoi äiti hellästi


silmäillen poikaansa.

— Olenpa kyllä, äiti, mutta se ei tee mitään, kun saa ryssää


löylyttää. Ja Virran sillalla se saikin oikein kelpo saunan. —

— On ne siitä jo kertoneet, — virkkoi ukko Hiukka. — Olitko sinä


niiden kuuden sadan joukossa? —

— Olin ja silloin autoin sekä minä että Kokko ja Kärki luutnantti


Jernfältiä ottamaan pois hänen morsiantaan kasakkatyttöä, jonka
Niemen majuri oli pienenä ottanut kasvatikseen ja jonka tämän isä
vähää ennen oli ryöstänyt Niemestä. Siinä sitä vasta kuumasti
kamppailtiin ja… —

— Vielä kehut, — keskeytti Nella siunaillen. — Miten voi nyt


rehellinen mies pitää kasakkanaisesta? Nehän ovat kaikki noitia. —

— Erehdytte, äiti. Kauniimpaa tyttöä kuin luutnantti Jernfältin


morsian ei ole koko Suomessa. Mutta lähdetään nyt katsomaan,
miten tässä huomiseen päästään, jolloin taas täytyy lähteä. —
Kun Valter Jernfält oli saanut joukkonsa katon alle, riensi hän
kiiruimman kautta ottamaan selvää Kokosta.

— No, — kysyi hän viimein tavattuaan ukon, — mitenkä matka


Niemeen sujui? —

— Paremmin kuin osasimme toivoakaan, — vastasi Kokko.

— Ja hänet otettiin siellä hyvästi vastaan? —

Kokko kertoi Olgan tulosta Niemeen, mitä hän palvelusväeltä siellä


oli kuullut ja virkkoi lopuksi:

— Hyvin sitä elettiinkin siellä. Vanha majuri istui tuntikausia


meidän parissamme ja silloin täytyi minun tai jonkun muun meistä
kertoa taisteluistamme. Ja aina marmatti hän, ettei saanut olla
mukana. On se vankka ukko se majuri, mikäli minä häntä näin. —

— On kyllä. Hänenlaisiaan on vähä Suomessa. —

4.

Niin kuin ylempänä mainittiin, kadotti viides brigaadi Salaburissa


sen nimensä, jonka aikana se oli niin uljaasti taistellut. Tämän
jälkeen se nimitettiin neljänneksi brigaadiksi ja vaivaloisella
peräytymisretkellään Pohjan lahden ympäri teki se urhoollisen
Sandelsin johtamana parhaansa pelastaakseen Suomen sotakunnian.

Joka paikassa, missä se joutui tekemisiin vihollisen kanssa, osotti


se entistä miehuutta, kestävyyttä ja isänmaanrakkautta.
Virran taistelun jälkeen kärsi brigaadi suurimman tappion
Hörneforsin luona 5 päivänä heinäkuuta 1809. Urhean viidennen
brigaadin viimeiset jäännökset olivat jälkijoukkona, kun kenraali
Sandels saatuaan tiedon, että venäläinen kenraalimajuri
Kosatschoffski vahvalla kolonnalla marssi Engsjöhön päin aikeessa
sulkea hänet kahden tulen väliin, komensi peräytymään.

Duncker, joka nyt oli everstiluutnantti, johti rakasta Savon


jääkäripataljoonaansa. Tämän eturiveissä olivat Kokko, Kärki ja Onni,
ensi mainituilla kaksi tähteä urhoollisuuden merkkinä rintaa koristaen
viime mainitulla yksi.

Peräytyminen oli jo alkanut, mutta Duncker, joka ei millään


muotoa tahtonut peräytyä, seisoi vielä paikoillaan Hörnejoen sillan
luona. Kun Sandels huomasi vaaran, joka uhkasi urheita savolaisia,
lähetti hän ajutantti Montgomeryn viemään Dunckerille sanaa, että
tämä läksisi peräytymään.

— En lähde, — vastasi Duncker, — minä jään paikoilleni ja


taistelen vielä jonkun aikaa. —

— Mutta kenraali on käskenyt ja sitä paitsi ovat pohjalaiset lyödyt


takasin. Everstiluutnantti on vaarassa joutua saarroksiin. —

Mutta Duncker vastasi miehevästi, joskin epätoivoa ilmaisevalla


äänellä:

— Jos pohjalaiset ovat peräytyneet ennen aikojaan, niin minä ja


savolaiset emme sitä tee! —

Montgomeryn ei auttanut muu kuin lähteä matkoihinsa ja


ainoastaan ruudinsavun hämärässä onnistui hänen pujotella
kaikkialla parveilevien vihollisten läpi.

Viimein suostui Duncker peräytymään, mutta juuri kun hän antoi


käskyn siihen, kaikui läpi savolaisten rivien:

— Piiritetään! —

Kaikilta tahoilta hyökkäsi vihollisia pienen suomalaisen joukon


päälle, joka kuitenkin rohkeasti katsoi kuolemaa silmiin.

— Nyt syntyy toisellainen leikki kuin Virran sillalla, — virkkoi Kokko


lävistäen samassa erään venäläisen ali-upseerin, joka aikoi ottaa
hänet vangiksi, — mutta lujasti päälle, pojat! Näytetään ryssille, ettei
pitkä peräytyminen ole vielä voimiamme vienyt! —

Duncker, joka seisoi vähän matkan päässä Kokosta, kuuli nämä


sanat. Hän kääntyi silloin tuohon vanhaan sotilaaseen päin ja hänen
vakavat kasvonsa hieman kirkastuivat, kun hän sanoi:

— Sillä tavoin se savolainen puhuu ja tekee. Lujasti päälle, pojat!


Elävinä eivät he meitä saa! Koettakaamme murtautua läpi! —

Mutta tämä oli helpommin sanottu kuin tehty. Samassa kun


Dunckerin piti panna täytäntöön aikeensa, rynnisti häntä vastaan
eversti Karpenkoff, joka Hörnehammarista tullen sulki häneltä tien.

— Everstiluutnantti, — huusi Karpenkoff ratsastaen rintamasta


esiin, — te olette saarroksissa, josta ette voi päästä mihinkään.
Olette taistelleet ihmeteltävällä urhoollisuudella ja sen tähden te
voitte antautua, tahraamatta senkautta vähääkään omaa tai
sotamiestenne mainetta. —
Dunckerin vakavat kasvot muuttuivat vieläkin synkemmiksi. Ja
melkein samassa hän huusi:

— Moisen solvauksen voi pestä ainoastaan verellä. Tulta! —

Samaan aikaan antoi Karpenkoffkin samallaisen käskyn. Solvaus


tulikin verellä pestyksi, niin kuin Duncker oli toivonut, mutta se tuli
hänen omalla verellään.

Useampien luotien lävistämänä kaatui hän Kokon käsiin. Kärki ja


Onni riensivät samassa apuun ja ottivat kuolettavasti haavoittuneen
päällikkönsä käsiinsä.

— Nyt päälle! — karjui Kokko. — Tänne miehet! Kannetaan hänet


vihollisrivien läpi. Eespäin! —

Savolaiset hyökkäsivät. Ensimmäinen venäläisten rivi musertui ja


näytti siltä, kuin murtautuminen olisi mahdollinen.

Samassa heräsi Duncker tajuntaan. Nähtyään, mitä oli tekeillä,


sanoi hän heikolla äänellä:

— Minä olen kohta lopussa. Tunnen kuoleman lähestyvän nopein


askelin.
Jättäkää minut, pelastakaa itsenne. —

— Ei, me emme jätä teitä ryssien käsiin, — virkkoi Kärki, — ja sen


tähden… —

Duncker keskeytti hänet:

— Mutta minä käsken tottelemaan…. hyvästi… —


Savolaiset tottelivat, panivat Dunckerin varovasti maahan ja
murtautuivat sitte hurjalla rohkeudella tiheiden vihollisrivien läpi.
Vain muutamia harvoja joutui vangiksi.

Näin päättyi Hörneforsin taistelu ja näin sai sankarikuoleman yksi


Suomen joukon kaunistuksista, yksi viidennen brigaadin uljaimmista
uroista.

Yön tullen harhailivat kolme ystäväämme ilman päämäärää


etelään päin. Muutaman onnellisen sattuman kautta tapasivatkin he
aavistamattaan eräitä elossa olevia tovereitaan ja sittemmin
pääjoukon.

He olivat tällöin niin nääntyneitä nälästä, janosta ja vaivoista, että


vaivoin pystyssä pysyivät. Miehuus kuitenkin oli entisen vireä,
urhoutta ja lujuutta vielä oli olemassa vaikka uusiin taisteluihin.

5.

On kevät 1810. Vuoret, laaksot, järvet ja metsät olivat


lumipeitteensä luoneet. Lauhkea tuulenhenki hyväili poskea. Linnut
lauloivat nyt, kuten muinakin keväinä, sulosävelin kiitosta
Luojallensa.

Lähdemme Tukholmaan eräänä kauniina kevätpäivänä ja


pysähdymme tämän kauniin kaupungin keskipisteeseen
Pohjoissillalle. Mutta huolimatta siitä, että ympärillä versoi kevät
kukkeimmillaan eivät mielet olleet niin iloisia kuin ne tähän aikaan
tavallisesti ovat. Mihin katsoikin, kaikkialla kuuli pidätettyä kuisketta
ja näki synkkiä kasvoja. Mikä oli syynä?

Rauha oli viimein tehty ja Suomi kadotettu.

Väkijoukossa, joka tänään oli liikkeellä, herätti kolme henkilöä


muiden erityistä huomiota.

Yksi näistä oli Patrik Jernfält ja kaksi muuta Valter sekä hänen
nuori puolisonsa Olga, joista edellinen oli Savon jääkäripataljoonan
kapteenin univormussa.

Vasemmassa käsivarressaan Valter kantoi surunauhaa. Vähää


ennen sodan loppua oli hänen isänsä näet kuollut ja hän sai periä
tämän suurenpuoleisen omaisuuden.

Heidän hiljaa kävellessään Rahatorilta Pohjoissillalle päin


tahdomme kuunnella heidän keskusteluaan.

— Oli se sentään aika hyvä onni, että niin hyvissä ajoin myin
Niemen, jota sitä paitsi vihollinen ryösti ja poltti kohta teidän
lähdettyänne Pulkkilasta, — sanoi Patrik Jernfält. — Muuten olisin
minä jäänyt puille paljaille. —

— Niin, hyvähän se oli, — virkkoi Valter, — mutta ei muutto


Niemestä
Sulkavalle tainnut juuri hauska olla. —

— Ei ensinkään, — vakuutti Olga. — Minä sain niin paljon kärsiä


sinä aikana ja ellei toivo sinuun olisi minua elähyttänyt, niin olisin
kenties menehtynytkin. Se minua kuitenkin ihmetyttää, ettei Fabian
muuttanut Ruotsiin. —
— Hänen on hyvä olla sielläkin, — vastasi majuri. — Ei hänen
tarvitse huolia venäläisistä eikä heidän toimistaan, kunhan vain
hoitaa virkaansa. —

— Oi, miten kaunista täällä on, — virkkoi Olga, kun olivat tulleet
Pohjoissillalle. — Tämmöistä ei monessa pääkaupungissa liene
nähtävänä. —

— Tuskin, lapseni, — vastasi Patrik Jernfält. — Nuoruuteni päivinä


matkustelin paljon, mutta en missään nähnyt niin kaunisseutuista
kaupunkia kuin Tukholma on. Sen luonnonihana asema on yleisesti
tunnettu Euroopassa.

Nyt olivat he saapuneet sillan päähän. Sen itäiselle korvalle oli


kertynyt melkoinen joukko kansaa, jota poliisimiehet koettivat saada
hajaantumaan, mutta huonolla menestyksellä.

— Katsotaan, mitä siellä on, — sanoi Valter.

— Oletko niin utelias? — huomautti Olga hymyillen.

— Olen vähän. Olenhan nyt tukholmalainen ja siksi täytyy olla


utelias. —

Näin sanoen hän jätti Olgan käden majurin kainaloon ja meni


väkijoukkoon, joka vapaehtoisesti teki tietä nähtyään suomalaisen
univormun.

Kohta pääsikin Valter toivottuun paikkaan. Mutta se, mitä hän


näki, sai hänet ehdottomasti häpsähtämään.

Siinä seisoi hänen edessään sillan kaidepuuta vasten kolme Savon


jääkäriä repaleisissa puvuissa. He ojentelivat läsnäolijoille
päähineitään almuja pyytäen, että pääsisivät takasin kotimaahaan
Suomeen.

Valterin silmissä milt'ei musteni. Ensi hämmästyksestä olivat


jääkärit pudottaa lakkinsa lantteineen. Samassa he huudahtivat
yhteen ääneen:

— Kapteeni Jernfält! —

— Kokko, Kärki ja Onni, — virkkoi Valter ja ojensi uskollisille


sotatovereilleen kätensä. — Jos tahdotte jäädä tänne, niin saatte
elatuksenne kuolinpäiväänne asti, mutta jos aijotte matkustaa
kotiinne, niin annan teille runsaat matkarahat. —

— Me ikävöimme Sulkavalle ja omaistemme luo, — sanoivat Kokko


ja
Kärki yht'aikaa.

— Ja minä äidin ja iso-isän luo Lehtoniemen kärkeen, — virkkoi


Onni katsahtaen ihastellen tähteä rinnassaan.

— Olkoon menneeksi, tapahtukoon teidän tahtonne, mutta täällä


ei teidän enää tarvitse olla töllistelemässä. Tulkaa! —

Ja kansajoukon kaikuvasti hurratessa poistuivat Valter Jernfält ja


hänen kolme toveriaan.

Muutamia päiviä tämän jälkeen läksi eräs purjealus suoraan


Helsinkiin. Sen kannella seisoi kolme jääkäriä. Molemmat Jernfältit
olivat antaneet heille runsaasti matkatarpeita ja nyt jättivät he
ainiaaksi Ruotsin palaten iloisina ja onnellisina armaaseen
syntymämaahansa, jonka edestä he olivat niin uskollisesti ja
miehuullisesti taistelleet ja vertaan vuodattaneet.
Paljoa ei enää ole lisättävä kertomukseemme. Majuri Patrik
Jernfält osti itselleen kauniin tilan lähellä pääkaupunkia, jonne hän
usein matkusti leikkimään ja loruamaan nuorten Jernfälttien
vallattomien poikien kanssa.

Ja kun Valter Jernfält ei ollut kadottanut haluaan sotatoimiin, astui


hän erään ruotsalaisen rykmentin palvelukseen yleten täällä aikaa
myöten korkeammille arvoasteille.

Kokko ja Kärki saapuivat onnellisesti Sulkavalle. He luopuivat


kokonaan sotilasammatista, koska eivät tahtoneet olla venäläisten
päällikkyyden alla.

Lehtoniemen kären pienessä pirtissä syntyi iloa ja elämää Onnin


tultua kotiin. Hänkin erosi palveluksestaan ja hoiti sittemmin lapsen
hellyydellä äitiään ja iso-isäänsä näiden kuolemaan saakka. Ja kun
nämä muutaman vuoden kuluttua muuttivat mananmajoille, meni
Onni naimisiin erään varakkaan talonpojan tyttären kanssa Jynkässä
päästen näin vauraaksi tilanomistajaksi.

Virran noidasta Katrista ei kuulunut mitään muuta, kuin että hänet


Iisalmen asukkaat olivat löytäneet eräänä päivänä keväällä 1809
Virtajoesta hukkuneena. Luultavasti oli hän joutunut pakenevien
venäläisten pariin ja hirveässä sekasorrossa saanut aalloissa
kuolemansa.

Näin taisteli ja kärsi viides brigaadi, tuo Sandelsin urhea joukko, ja


sen kunniakas maine on kautta aikojen aina säilyvä kirkkaana.
*** END OF THE PROJECT GUTENBERG EBOOK SANDELSIN URHEA
JOUKKO: KERTOMUS SUOMEN SODASTA VV. 1808-1809 ***

Updated editions will replace the previous one—the old editions will
be renamed.

Creating the works from print editions not protected by U.S.


copyright law means that no one owns a United States copyright in
these works, so the Foundation (and you!) can copy and distribute it
in the United States without permission and without paying
copyright royalties. Special rules, set forth in the General Terms of
Use part of this license, apply to copying and distributing Project
Gutenberg™ electronic works to protect the PROJECT GUTENBERG™
concept and trademark. Project Gutenberg is a registered trademark,
and may not be used if you charge for an eBook, except by following
the terms of the trademark license, including paying royalties for use
of the Project Gutenberg trademark. If you do not charge anything
for copies of this eBook, complying with the trademark license is
very easy. You may use this eBook for nearly any purpose such as
creation of derivative works, reports, performances and research.
Project Gutenberg eBooks may be modified and printed and given
away—you may do practically ANYTHING in the United States with
eBooks not protected by U.S. copyright law. Redistribution is subject
to the trademark license, especially commercial redistribution.

START: FULL LICENSE


THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK

To protect the Project Gutenberg™ mission of promoting the free


distribution of electronic works, by using or distributing this work (or
any other work associated in any way with the phrase “Project
Gutenberg”), you agree to comply with all the terms of the Full
Project Gutenberg™ License available with this file or online at
www.gutenberg.org/license.

Section 1. General Terms of Use and


Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand, agree
to and accept all the terms of this license and intellectual property
(trademark/copyright) agreement. If you do not agree to abide by all
the terms of this agreement, you must cease using and return or
destroy all copies of Project Gutenberg™ electronic works in your
possession. If you paid a fee for obtaining a copy of or access to a
Project Gutenberg™ electronic work and you do not agree to be
bound by the terms of this agreement, you may obtain a refund
from the person or entity to whom you paid the fee as set forth in
paragraph 1.E.8.

1.B. “Project Gutenberg” is a registered trademark. It may only be


used on or associated in any way with an electronic work by people
who agree to be bound by the terms of this agreement. There are a
few things that you can do with most Project Gutenberg™ electronic
works even without complying with the full terms of this agreement.
See paragraph 1.C below. There are a lot of things you can do with
Project Gutenberg™ electronic works if you follow the terms of this
agreement and help preserve free future access to Project
Gutenberg™ electronic works. See paragraph 1.E below.
1.C. The Project Gutenberg Literary Archive Foundation (“the
Foundation” or PGLAF), owns a compilation copyright in the
collection of Project Gutenberg™ electronic works. Nearly all the
individual works in the collection are in the public domain in the
United States. If an individual work is unprotected by copyright law
in the United States and you are located in the United States, we do
not claim a right to prevent you from copying, distributing,
performing, displaying or creating derivative works based on the
work as long as all references to Project Gutenberg are removed. Of
course, we hope that you will support the Project Gutenberg™
mission of promoting free access to electronic works by freely
sharing Project Gutenberg™ works in compliance with the terms of
this agreement for keeping the Project Gutenberg™ name associated
with the work. You can easily comply with the terms of this
agreement by keeping this work in the same format with its attached
full Project Gutenberg™ License when you share it without charge
with others.

1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside the
United States, check the laws of your country in addition to the
terms of this agreement before downloading, copying, displaying,
performing, distributing or creating derivative works based on this
work or any other Project Gutenberg™ work. The Foundation makes
no representations concerning the copyright status of any work in
any country other than the United States.

1.E. Unless you have removed all references to Project Gutenberg:

1.E.1. The following sentence, with active links to, or other


immediate access to, the full Project Gutenberg™ License must
appear prominently whenever any copy of a Project Gutenberg™
work (any work on which the phrase “Project Gutenberg” appears,
or with which the phrase “Project Gutenberg” is associated) is
accessed, displayed, performed, viewed, copied or distributed:
This eBook is for the use of anyone anywhere in the United
States and most other parts of the world at no cost and with
almost no restrictions whatsoever. You may copy it, give it away
or re-use it under the terms of the Project Gutenberg License
included with this eBook or online at www.gutenberg.org. If you
are not located in the United States, you will have to check the
laws of the country where you are located before using this
eBook.

1.E.2. If an individual Project Gutenberg™ electronic work is derived


from texts not protected by U.S. copyright law (does not contain a
notice indicating that it is posted with permission of the copyright
holder), the work can be copied and distributed to anyone in the
United States without paying any fees or charges. If you are
redistributing or providing access to a work with the phrase “Project
Gutenberg” associated with or appearing on the work, you must
comply either with the requirements of paragraphs 1.E.1 through
1.E.7 or obtain permission for the use of the work and the Project
Gutenberg™ trademark as set forth in paragraphs 1.E.8 or 1.E.9.

1.E.3. If an individual Project Gutenberg™ electronic work is posted


with the permission of the copyright holder, your use and distribution
must comply with both paragraphs 1.E.1 through 1.E.7 and any
additional terms imposed by the copyright holder. Additional terms
will be linked to the Project Gutenberg™ License for all works posted
with the permission of the copyright holder found at the beginning
of this work.

1.E.4. Do not unlink or detach or remove the full Project


Gutenberg™ License terms from this work, or any files containing a
part of this work or any other work associated with Project
Gutenberg™.

1.E.5. Do not copy, display, perform, distribute or redistribute this


electronic work, or any part of this electronic work, without
prominently displaying the sentence set forth in paragraph 1.E.1
with active links or immediate access to the full terms of the Project
Gutenberg™ License.

1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if you
provide access to or distribute copies of a Project Gutenberg™ work
in a format other than “Plain Vanilla ASCII” or other format used in
the official version posted on the official Project Gutenberg™ website
(www.gutenberg.org), you must, at no additional cost, fee or
expense to the user, provide a copy, a means of exporting a copy, or
a means of obtaining a copy upon request, of the work in its original
“Plain Vanilla ASCII” or other form. Any alternate format must
include the full Project Gutenberg™ License as specified in
paragraph 1.E.1.

1.E.7. Do not charge a fee for access to, viewing, displaying,


performing, copying or distributing any Project Gutenberg™ works
unless you comply with paragraph 1.E.8 or 1.E.9.

1.E.8. You may charge a reasonable fee for copies of or providing


access to or distributing Project Gutenberg™ electronic works
provided that:

• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
about donations to the Project Gutenberg Literary Archive
Foundation.”

• You provide a full refund of any money paid by a user who


notifies you in writing (or by e-mail) within 30 days of receipt
that s/he does not agree to the terms of the full Project
Gutenberg™ License. You must require such a user to return or
destroy all copies of the works possessed in a physical medium
and discontinue all use of and all access to other copies of
Project Gutenberg™ works.

• You provide, in accordance with paragraph 1.F.3, a full refund of


any money paid for a work or a replacement copy, if a defect in
the electronic work is discovered and reported to you within 90
days of receipt of the work.

• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.

1.E.9. If you wish to charge a fee or distribute a Project Gutenberg™


electronic work or group of works on different terms than are set
forth in this agreement, you must obtain permission in writing from
the Project Gutenberg Literary Archive Foundation, the manager of
the Project Gutenberg™ trademark. Contact the Foundation as set
forth in Section 3 below.

1.F.

1.F.1. Project Gutenberg volunteers and employees expend


considerable effort to identify, do copyright research on, transcribe
and proofread works not protected by U.S. copyright law in creating
the Project Gutenberg™ collection. Despite these efforts, Project
Gutenberg™ electronic works, and the medium on which they may
be stored, may contain “Defects,” such as, but not limited to,
incomplete, inaccurate or corrupt data, transcription errors, a
copyright or other intellectual property infringement, a defective or
Welcome to our website – the perfect destination for book lovers and
knowledge seekers. We believe that every book holds a new world,
offering opportunities for learning, discovery, and personal growth.
That’s why we are dedicated to bringing you a diverse collection of
books, ranging from classic literature and specialized publications to
self-development guides and children's books.

More than just a book-buying platform, we strive to be a bridge


connecting you with timeless cultural and intellectual values. With an
elegant, user-friendly interface and a smart search system, you can
quickly find the books that best suit your interests. Additionally,
our special promotions and home delivery services help you save time
and fully enjoy the joy of reading.

Join us on a journey of knowledge exploration, passion nurturing, and


personal growth every day!

ebookmasss.com

You might also like