From 6761cc24f545765c0422198077ef209ce81dfb40 Mon Sep 17 00:00:00 2001 From: Joshua Potter Date: Mon, 16 Dec 2024 10:48:51 -0700 Subject: [PATCH] Notes on linkers. --- .../plugins/obsidian-to-anki-plugin/data.json | 9 +- notes/_journal/2024-11/2024-11-28.md | 2 +- notes/_journal/2024-12-16.md | 4 +- notes/c17/strings/index.md | 357 ++++++++++++++ notes/c17/{strings.md => strings/printf.md} | 464 +----------------- notes/linkers/elf.md | 331 +++++++++++++ notes/linkers/images/elf.png | Bin 0 -> 78398 bytes notes/linkers/index.md | 93 ++++ notes/linkers/object-files.md | 138 ------ 9 files changed, 798 insertions(+), 600 deletions(-) create mode 100644 notes/c17/strings/index.md rename notes/c17/{strings.md => strings/printf.md} (70%) create mode 100644 notes/linkers/elf.md create mode 100644 notes/linkers/images/elf.png delete mode 100644 notes/linkers/object-files.md diff --git a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json index 7cd0e1c..72b2964 100644 --- a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json +++ b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json @@ -985,7 +985,7 @@ "c17/linkage.md": "1e4f60f07619b9cbf2f71f11aae9e5f4", "_journal/2024-11-30.md": "c6040ba2caf1c9ff55faed25d7879e9a", "_journal/2024-11/2024-11-29.md": "4896d849b6345010669047323521e21a", - "_journal/2024-11/2024-11-28.md": "e9d252bc4bc3d6f70db56c36e1090e86", + "_journal/2024-11/2024-11-28.md": "dd843bc11263a1dca3c9e27ab4fd8c68", "_journal/2024-11/2024-11-27.md": "7f44f4c91fea0c5c05d542aeeb9e723d", "_journal/2024-12-01.md": "d34aff07b7fa8a9a05f84841496d13b5", "_journal/2024-11/2024-11-30.md": "c6040ba2caf1c9ff55faed25d7879e9a", @@ -1005,7 +1005,7 @@ "_journal/2024-12-08.md": "5662897539b222db1af45dcd217f0796", "_journal/2024-12/2024-12-07.md": "bfb6c4db0acbacba19f03a04ec29fa5c", "linkers/static.md": "cc56ddfc33f605d26b954ec242abc4cf", - "linkers/index.md": "73b07789a48be8a611941d50ae4f3831", + "linkers/index.md": "18d4a03aa1a94418d450a5107e7c883d", "_journal/2024-12-09.md": "8988f0e8f0060f4b86d17e0bc4e7ff7e", "_journal/2024-12/2024-12-08.md": "5662897539b222db1af45dcd217f0796", "_journal/2024-12-10.md": "c12d380d24d7d1dc2e74a57a1b79399e", @@ -1024,7 +1024,10 @@ "_journal/2024-12/2024-12-12.md": "59e71caa4e9ebdb11a7c7549c33bed20", "linkers/object-files.md": "77767f310330b8650a5023dd0522226c", "_journal/2024-12-16.md": "77c27920d5b44b6315c2ea22b990eefc", - "_journal/2024-12/2024-12-15.md": "be66c8808d8bb66d4e7b91db7c93c94a" + "_journal/2024-12/2024-12-15.md": "be66c8808d8bb66d4e7b91db7c93c94a", + "linkers/elf.md": "83a27a7d71ca26f8f034770a31d58fa0", + "c17/strings/printf.md": "8b67cfbccaf35dd9488b73e7e5555405", + "c17/strings/index.md": "3fa6f42967f3cc786740bb8537c62682" }, "fields_dict": { "Basic": [ diff --git a/notes/_journal/2024-11/2024-11-28.md b/notes/_journal/2024-11/2024-11-28.md index bc63444..c574067 100644 --- a/notes/_journal/2024-11/2024-11-28.md +++ b/notes/_journal/2024-11/2024-11-28.md @@ -8,4 +8,4 @@ title: "2024-11-28" - [ ] Sheet Music (10 min.) - [ ] Korean (Read 1 Story) -* Notes on [[strings#Copying Functions|memcpy and memmove]]. \ No newline at end of file +* Notes on [[c17/strings/index#Copying Functions|memcpy and memmove]]. \ No newline at end of file diff --git a/notes/_journal/2024-12-16.md b/notes/_journal/2024-12-16.md index 15c3faa..898a5e7 100644 --- a/notes/_journal/2024-12-16.md +++ b/notes/_journal/2024-12-16.md @@ -6,4 +6,6 @@ title: "2024-12-16" - [x] KoL - [ ] OGS - [ ] Sheet Music (10 min.) -- [ ] Korean (Read 1 Story) \ No newline at end of file +- [ ] Korean (Read 1 Story) + +* Notes on sections found within an [[elf|ELF]] file. \ No newline at end of file diff --git a/notes/c17/strings/index.md b/notes/c17/strings/index.md new file mode 100644 index 0000000..a8598bb --- /dev/null +++ b/notes/c17/strings/index.md @@ -0,0 +1,357 @@ +--- +title: Strings +TARGET DECK: Obsidian::STEM +FILE TAGS: c17 +tags: + - c17 +--- + +## Overview + +A contiguous sequence of characters terminated by the `NUL` character (refer to [[ascii|ASCII]]). Text data is said to be more platform-independent than [[endianness|binary]] data since it is unaffected by word size or byte ordering. + +%%ANKI +Basic +What is a C-style string? +Back: A character array terminated with a `NUL` character. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What character terminates all C-style strings? +Back: `NUL` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the decimal value of `NUL` in ASCII encoding? +Back: `0` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Text is more platform-independent than e.g. integer encodings because it is unaffected by what two properties? +Back: Word size and byte ordering. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What kind of array can be expressed as a literal? +Back: Strings. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Cloze +A {string} is a {`NUL`}-terminated array of {`char`}. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Cloze +`` uses prefix {`mem`} to refer to {array} arguments. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Cloze +`` uses prefix {`str`} to refer to {string} arguments. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +## Escape Sequences + +C has a standard for processing different escape sequences. Many languages built with C in mind parse these escape sequences in a similar way. + +* `\ooo`: Consists of one to three octal digits. + * [[bash/index|Bash]] supports this sequence as `$'\ooo'`. + +%%ANKI +Basic +How are C escape sequences for octal digits denoted? +Back: As `\ooo`. +Reference: Brian W. Kernighan and Dennis M. Ritchie, *The C Programming Language*, 2nd ed (Englewood Cliffs, N.J: Prentice Hall, 1988). + +END%% + +%%ANKI +Basic +In C, `\ooo` allows specifying how many octal digits? +Back: One to three. +Reference: Brian W. Kernighan and Dennis M. Ritchie, *The C Programming Language*, 2nd ed (Englewood Cliffs, N.J: Prentice Hall, 1988). + +END%% + +%%ANKI +Basic +How are C escape sequences exposed in bash? +Back: Using ANSI-C quoting, i.e. `$$'string'`. +Reference: Mendel Cooper, “Advanced Bash-Scripting Guide,” n.d., 916. +Tags: bash + +END%% + +* `\xhh`: Consists of one or more [[radices#Hexadecimal|hexadecimal]] digits. The `x` prefix is required to distinguish from octal escape sequences. + * [[bash/index|Bash]] supports this sequence as `$'\xhh'`. One or two digits is supported. + +%%ANKI +Basic +How are C escape sequences for hexadecimal digits denoted? +Back: As `\xhh`. +Reference: Brian W. Kernighan and Dennis M. Ritchie, *The C Programming Language*, 2nd ed (Englewood Cliffs, N.J: Prentice Hall, 1988). + +END%% + +%%ANKI +Basic +In C, `\x` allows specifying how many hexadecimal digits? +Back: One or more. +Reference: Brian W. Kernighan and Dennis M. Ritchie, *The C Programming Language*, 2nd ed (Englewood Cliffs, N.J: Prentice Hall, 1988). + +END%% + +%%ANKI +Basic +What footgun does C's `\x` sequence expose? +Back: Using more than two hexadecimal digits can produce undefined results. +Reference: Arnold D. Robbins, “GAWK: Effective AWK Programming,” October 2023, [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf). + +END%% + +* `\uhhhh`: Introduced in C11 to represent Unicode code points. *Must* have exactly four hexadecimal characters specified with `0` leading padding if necessary. + * [[bash/index|Bash]] supports this sequence as `$'uhhhh'`. One to four hex digits is supported. + +%%ANKI +Basic +What two ways are C escape sequences for unicode denoted? +Back: As `\uhhhh` or `\Uhhhhhhhh`. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). +Tags: encoding::unicode + +END%% + +%%ANKI +Basic +In C, `\u` allows specifying how many hexadecimal digits? +Back: Exactly four. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). +Tags: encoding::unicode + +END%% + +%%ANKI +Basic +In what standard were C's `\u` and `\U` escape sequences introduced? +Back: C11. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). +Tags: encoding::unicode + +END%% + +* `\Uhhhhhhhh`: Introduced in C11 to represent larger unicode code points. *Must* have exactly eight hexadecimal characters specified with `0` leading padding if necessary. + +%%ANKI +Basic +In C, `\U` allows specifying how many hexadecimal digits? +Back: Exactly eight. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). +Tags: encoding::unicode + +END%% + +%%ANKI +Basic +Why does C have both `\u` and `\U`? +Back: `\U` accommodates for larger code point values. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). +Tags: encoding::unicode + +END%% + +## Copying Functions + +The two primary functions used for copying memory are `memcpy` and `memmove`: + +```c +void* memcpy(void* restrict s1, const void* restrict s2, size_t n); +void* memmove(void* s1, const void* s2, size_t n); +``` + +%%ANKI +Basic +What are the two primary functions provided by the standard library for copying memory? +Back: `memcpy` and `memmove`. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What is the function prototype of `memcpy`? +Back: +```c +void* memcpy(void* restrict s1, const void* restrict s2, size_t n); +``` +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What does the `memcpy` function do? +Back: Copies a specified number of bytes from one object to another. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +Disregarding out of bounds errors, when does `memcpy` invoke undefined behavior? +Back: When copying occurs between objects that overlap in memory. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What does the first argument of `memcpy` refer to? +Back: The destination address bytes are copied to. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What does the second argument of `memcpy` refer to? +Back: The source address bytes are copied from. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What does the third argument of `memcpy` refer to? +Back: The number of bytes to copy from the source address. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +Which of `memcpy` or `memmove` is faster? +Back: `memcpy` +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +*Why* is `memmove` slower than `memcpy`? +Back: It's implemented as if copying first into a temporary array that does not overlap the arguments in memory. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +When should you prefer using `memcpy` instead of `memmove`? +Back: When the copying occurs between objects that do not overlap in memory. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +Which standard header library defines `memcpy`? +Back: `` +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What is the function prototype of `memmove`? +Back: +```c +void* memmove(void* s1, const void* s2, size_t n); +``` +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What does the first argument of `memmove` refer to? +Back: The destination address bytes are copied to. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What does the second argument of `memmove` refer to? +Back: The source address bytes are copied from. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What does the third argument of `memmove` refer to? +Back: The number of bytes to copy from the source address. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +Disregarding out of bounds errors, when does `memmove` invoke undefined behavior? +Back: N/A. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +When should you prefer using `memmove` instead of `memcopy`? +Back: When the copying occurs between objects that overlap in memory. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +Which standard header library defines `memmove`? +Back: `` +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What does the `memmove` function do? +Back: Copies a specified number of bytes from one object to another. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +## Bibliography + +* Arnold D. Robbins, “GAWK: Effective AWK Programming,” October 2023, [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf). +* Brian W. Kernighan and Dennis M. Ritchie, *The C Programming Language*, 2nd ed (Englewood Cliffs, N.J: Prentice Hall, 1988). +* Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +* “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). +* Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). +* Mendel Cooper, “Advanced Bash-Scripting Guide,” n.d., 916. diff --git a/notes/c17/strings.md b/notes/c17/strings/printf.md similarity index 70% rename from notes/c17/strings.md rename to notes/c17/strings/printf.md index dd771c8..76d0e8c 100644 --- a/notes/c17/strings.md +++ b/notes/c17/strings/printf.md @@ -1,78 +1,14 @@ --- -title: Strings +title: printf TARGET DECK: Obsidian::STEM -FILE TAGS: c17 +FILE TAGS: c17::printf tags: - c17 + - printf --- ## Overview -A contiguous sequence of characters terminated by the `NUL` character (refer to [[ascii|ASCII]]). Text data is said to be more platform-independent than [[endianness|binary]] data since it is unaffected by word size or byte ordering. - -%%ANKI -Basic -What is a C-style string? -Back: A character array terminated with a `NUL` character. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - -END%% - -%%ANKI -Basic -What character terminates all C-style strings? -Back: `NUL` -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - -END%% - -%%ANKI -Basic -What is the decimal value of `NUL` in ASCII encoding? -Back: `0` -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - -END%% - -%%ANKI -Basic -Text is more platform-independent than e.g. integer encodings because it is unaffected by what two properties? -Back: Word size and byte ordering. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - -END%% - -%%ANKI -Basic -What kind of array can be expressed as a literal? -Back: Strings. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - -%%ANKI -Cloze -A {string} is a {`NUL`}-terminated array of {`char`}. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - -%%ANKI -Cloze -`` uses prefix {`mem`} to refer to {array} arguments. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - -%%ANKI -Cloze -`` uses prefix {`str`} to refer to {string} arguments. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - -## `printf` - The syntax for the format placeholder is `%[flags][width][.precision][length]specifier`. %%ANKI @@ -80,7 +16,6 @@ Basic What four optional parts make up a `printf` argument? Back: Flags, width, precision, and length. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -89,7 +24,6 @@ Basic What is the purpose of the width field in a `printf` argument? Back: It specifies a minimum number of characters to ouput. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -98,7 +32,6 @@ Basic What is the purpose of the precision field in a `printf` argument? Back: It specifies the maximum limit on the output, depending on the argument type. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -107,7 +40,6 @@ Basic What is the purpose of the length field in a `printf` argument? Back: It specifies the size of the `printf` argument before default promotion. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -116,7 +48,6 @@ Basic Which header file contains basic `printf` functionality? Back: `` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -124,7 +55,6 @@ END%% Cloze {1:`width`} specifies a {2:minimum} while {2:`precision`} specifies a {1:maximum}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -132,11 +62,10 @@ END%% Cloze The {1:`width`} and {1:`precision`} fields are output related whereas the {2:`length`} field is input related. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% -### Flags +## Flags | Flag | Description | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -150,7 +79,6 @@ END%% Cloze The {`-`} flag {left-aligns} the output. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -159,7 +87,6 @@ Basic What is the output of `printf("%-2d abc", 100)`? Back: `100␣abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -168,7 +95,6 @@ Basic What is the output of `printf("%-4d abc", 100)`? Back: `100␣␣abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -177,7 +103,6 @@ Basic What is the output of `printf("%.4d abc", 100)`? Back: `0100␣abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -186,7 +111,6 @@ Basic What is the output of `printf("%04d abc", 100)`? Back: `0100␣abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -195,7 +119,6 @@ Basic What is the output of `printf("%.4s abc", "efg")`? Back: `efg␣abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -204,7 +127,6 @@ Basic What is the output of `printf("%.2s abc", "efg")`? Back: `ef␣abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -213,7 +135,6 @@ Basic What is the output of `printf("%.2f abc", 0.01234)`? Back: `0.01␣abc` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -222,7 +143,6 @@ Basic How does the precision field affect `"%s"` parameters? Back: Strings are truncated if longer than the specified precision. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -231,7 +151,6 @@ Basic How does the precision field affect `"%f"` parameters? Back: Decimal values are truncated if longer than the specified precision. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -240,7 +159,6 @@ Basic What does a negative width field value indicate? Back: This is actually a positive width with a `-` (left-align) flag. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -249,7 +167,6 @@ Basic The `-` `printf` flag overrides what default behavior? Back: Output is right-aligned by default. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -257,7 +174,6 @@ END%% Cloze The {`+`} `printf` flag {prepends a plus for positive signed-numeric types}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -266,7 +182,6 @@ Basic The `+` `printf` flag overrides what default behavior? Back: Nothing is prepended to positive signed-numeric types by default. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -274,7 +189,6 @@ END%% Cloze The {`␣`} `printf` flag {prepends a space for positive signed-numeric types}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -283,7 +197,6 @@ Basic The `␣` `printf` flag overrides what default behavior? Back: Nothing is prepended to positive signed-numeric types by default. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -292,7 +205,6 @@ Basic How do the `+` and `␣` `printf` flags relate to one another? Back: Both prepend a character to positively signed-numeric types. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -301,7 +213,6 @@ Basic What happens if both the `+` and `␣` `printf` flags are specified? Back: The `+` flag takes precedence. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -309,7 +220,6 @@ END%% Cloze The {`0`} `printf` flag {prepends zeros for numeric types}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -318,7 +228,6 @@ Basic What option must be specified for the `0` `printf` flag to take effect? Back: The "width" option. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -327,7 +236,6 @@ Basic The `0` `printf` flag overrides what default behavior? Back: Spaces are used to match the "width" option by default. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -336,7 +244,6 @@ Basic How is `%#g` different from `%g`? Back: The former always includes a decimal point and may include trailing `0`s. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -345,7 +252,6 @@ Basic How is `%#f` different from `%f`? Back: The former always includes a decimal point. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -354,7 +260,6 @@ Basic How is `%#e` different from `%e`? Back: The former always includes a decimal point. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -363,7 +268,6 @@ Basic Which `printf` flag can be used to ensure decimal points in the output of floating-point types? Back: `#` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -372,7 +276,6 @@ Basic How is `%#o` different from `%o`? Back: The former prepends a `0` to the output. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -381,7 +284,6 @@ Basic How is `%#x` different from `%x`? Back: The former prepends a `0x` to the output. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -390,7 +292,6 @@ Basic How is `%#X` different from `%X`? Back: The former prepends a `0X` to the output. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -398,11 +299,10 @@ END%% Cloze `%#o` is to {`0`} as `%#x` is to {`0x`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% -### Length +## Length Length | Description --------- | ----------- @@ -417,7 +317,6 @@ Basic *Why* do length modifiers for e.g. `char` exist? Back: For maximum portability in the face of default argument promotions. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -425,7 +324,6 @@ END%% Cloze The {`hh`} length corresponds to the {`char`} type declaration. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -433,7 +331,6 @@ END%% Cloze The {`h`} length corresponds to the {`short`} type declaration. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -441,7 +338,6 @@ END%% Cloze The {`l`} length corresponds to the {`long`} type declaration. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -449,7 +345,6 @@ END%% Cloze The {`ll`} length corresponds to the {`long long`} type declaration. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -457,11 +352,10 @@ END%% Cloze The {`z`} length corresponds to the {`size_t`} type declaration. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% -### Specifiers +## Specifiers Specifier | Description --------- | ----------- @@ -481,7 +375,6 @@ Basic What character do `printf` format specifiers start with? Back: `%` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -490,7 +383,6 @@ Basic Why is `printf` named the way it is? Back: It stands for **print f**ormatted. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -498,7 +390,6 @@ END%% Cloze The {`%d` and `%i`} format specifers work on a {decimal `signed int`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -506,7 +397,6 @@ END%% Cloze {`%d` and `%i`} are to `signed` as {`%u`} is to `unsigned`. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -514,7 +404,6 @@ END%% Cloze The {`%u`} format specifier outputs a {decimal `unsigned int`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -523,7 +412,6 @@ Basic What distinguishes format specifiers `%d` and `%i`? Back: Nothing. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -532,7 +420,6 @@ Basic Which format specifiers were probably used to yield `printf` output `-12`? Back: `%d` or `%i` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -541,7 +428,6 @@ Basic What distinguishes format specifiers `%d` and `%u`? Back: The former is for signed integers, the latter unsigned. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -549,7 +435,6 @@ END%% Cloze The {`%x`} format specifier outputs a {lowercase hexadecimal `unsigned int`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -558,7 +443,6 @@ Basic Which format specifier was probably used to yield `printf` output `7af`? Back: `%x` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -566,7 +450,6 @@ END%% Cloze The {`%X`} format specifier outputs an {uppercase hexadecimal `unsigned int`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -575,7 +458,6 @@ Basic Which format specifier was probably used to yield `printf` output `7AF`? Back: `%X` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -584,7 +466,6 @@ Basic What distinguishes format specifiers `%x` and `%X`? Back: The former outputs lowercase hex digits, the latter uppercase. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -592,7 +473,6 @@ END%% Cloze The {`%f`} format specifier outputs a {lowercase fixed-point `double`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -600,7 +480,6 @@ END%% Cloze The {`%F`} format specifier outputs an {uppercase fixed-point `double`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -609,7 +488,6 @@ Basic What distinguishes format specifiers `%f` and `%F`? Back: The former outputs lowercase identifiers, the latter uppercase. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -618,7 +496,6 @@ Basic What three special identifiers might specifier `%f` output? Back: `inf`, `infinity`, and `nan` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -627,7 +504,6 @@ Basic Assuming round-to-even, what is the output of `printf("%.0f", 3.5)`? Back: `4` Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: printf END%% @@ -636,7 +512,6 @@ Basic Assuming round-to-even, what is the output of `printf("%.0f", 2.5)`? Back: `2` Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: printf END%% @@ -645,7 +520,6 @@ Basic How does the C standard define the rounding mode of floating-point specifiers? Back: This is implementation specific. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: printf END%% @@ -654,7 +528,6 @@ Basic What does the rounding mode of floating-point specifiers refer to? Back: How numbers with greater than the specified precision are output. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: printf END%% @@ -663,7 +536,6 @@ Basic What three special identifiers might specifier `%F` output? Back: `INF`, `INFINITY`, and `NAN` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -672,7 +544,6 @@ Basic Which format specifier was probably used to yield `printf` output `inf`? Back: `%f` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -680,7 +551,6 @@ END%% Cloze {1:Fixed-point} notation is to {2:`%f`} whereas {2:standard/exponential} notation is to {1:`%e`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -689,7 +559,6 @@ Basic Which format specifier was probably used to yield `printf` output `172.345000`? Back: `%f` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -698,7 +567,6 @@ Basic What term describes the kind of output notation corresponding to `%f`? Back: Fixed-point notation. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -707,7 +575,6 @@ Basic What distinguishes format specifiers `%e` and `%E`? Back: The former outputs an `e`, the latter an `E`. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -716,7 +583,6 @@ Basic How many digits follow `e` in the output of `printf` specifier `%e`? Back: At least `2`. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -725,7 +591,6 @@ Basic Which format specifiers correspond to scientific notation? Back: `%e` and `%E` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -734,7 +599,6 @@ Basic Which format specifier was probably used to yield `printf` output `1.723450e+02`? Back: `%e` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -743,7 +607,6 @@ Basic What is the default precision of `%f`? Back: `6` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -752,7 +615,6 @@ Basic What is the output of `printf("%e", 3.14)`? Back: `3.140000e00` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -761,7 +623,6 @@ Basic What is the output of `printf("%e", 314)`? Back: `3.140000e02` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -770,7 +631,6 @@ Basic What term describes the kind of output notation corresponding to `%e`? Back: Standard or exponential notation. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -779,7 +639,6 @@ Basic What is the default precision of `%e`? Back: `6` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -787,7 +646,6 @@ END%% Cloze The {`%g`} format specifier outputs a {lowercase `double` in fixed-point or standard notation}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -795,7 +653,6 @@ END%% Cloze The {`%G`} format specifier outputs an {uppercase `double` in fixed-point or standard notation}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -804,7 +661,6 @@ Basic The `%g` format specifier subsumes functionality of what other format specifiers? Back: `%f` and `%e` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -813,7 +669,6 @@ Basic The `%G` format specifier subsumes functionality of what other format specifiers? Back: `%F` and `%E` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -822,7 +677,6 @@ Basic How does `%g` handle integral values differently from `%f`? Back: It excludes a trailing `.` and insignificant `0`s. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -831,7 +685,6 @@ Basic How does `%g` handle non-integral values differently from `%f`? Back: It excludes insignifant `0`s after the decimal point. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -840,7 +693,6 @@ Basic What distinguishes `%g` from `%G`? Back: The former uses lowercase letters. The latter uses uppercase letters. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -849,7 +701,6 @@ Basic What is the output of `printf("%.1f", 2.0)`? Back: `2.0` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -858,7 +709,6 @@ Basic Assuming fixed-point notation, what is the output of `printf("%.1g", 2.0)`? Back: `2` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -867,7 +717,6 @@ Basic Assuming fixed-point notation, what is the output of `printf("%g", 3.14)`? Back: `3.14` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -876,7 +725,6 @@ Basic Assuming fixed-point notation, what is the output of `printf("%g", 3)`? Back: `3` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -885,7 +733,6 @@ Basic What is the output of `printf("%f", 3)`? Back: `3.000000` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -893,7 +740,6 @@ END%% Cloze The {`%o`} format specifier outputs an {octal `unsigned int`}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -902,7 +748,6 @@ Basic Why doesn't the `%o` format specifier have a corresponding `%O` specifier? Back: There is no distinction between lower and uppercase octal digits. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -910,7 +755,6 @@ END%% Cloze The {`%s`} format specifiers outputs a {`NUL`-terminated string}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -919,7 +763,6 @@ Basic Which format specifier was probably used to yield `printf` output `abc`? Back: `%s` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -927,7 +770,6 @@ END%% Cloze The {`%c`} format specifier outputs a {`char` character}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -936,7 +778,6 @@ Basic Which format specifier was probably used to yield `printf` output `a`? Back: `%c` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -944,7 +785,6 @@ END%% Cloze The {`%p`} format specifier outputs a {`void*` address}. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -953,7 +793,6 @@ Basic Which format specifier was probably used to yield `printf` output `0b80000000`? Back: `%p` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -962,7 +801,6 @@ Basic How is the address outputted by the `%p` format specifier written? Back: In an implementation-specific way. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -971,7 +809,6 @@ Basic What should be done to a pointer outputted by the `%p` format specifier? Back: It should be cast to a `void*` pointer. Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). -Tags: printf END%% @@ -980,7 +817,6 @@ Basic Given `int64_t x`, why is `printf("%d", x)` a problem? Back: `%d` matches an `int` which is not necessarily 64-bits. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: printf END%% @@ -989,7 +825,6 @@ Basic What must you use when invoking `printf` with a fixed-width integer type? Back: `printf`-specific macros. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: printf END%% @@ -998,7 +833,6 @@ Basic What is `PRId32` an example macro for? Back: A macro that expands to the correct specifier for a 32-bit signed integral type. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: printf END%% @@ -1006,7 +840,6 @@ END%% Cloze {`PRId32`} is to signed whereas {`PRIu32`} is to unsigned. Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -1015,7 +848,6 @@ Basic Which C header specifies `printf` macros for fixed-width integral types? Back: `` Reference: “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). -Tags: printf END%% @@ -1024,7 +856,6 @@ Basic Given `int32_t x`, how might we invoke `printf` on it? Back: `printf("%" PRId32, x)` Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: printf END%% @@ -1033,292 +864,11 @@ Basic What prefix do `printf` macros from `` share? Back: `PRI` Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: printf END%% -## Escape Sequences - -C has a standard for processing different escape sequences. Many languages built with C in mind parse these escape sequences in a similar way. - -* `\ooo`: Consists of one to three octal digits. - * [[bash/index|Bash]] supports this sequence as `$'\ooo'`. - -%%ANKI -Basic -How are C escape sequences for octal digits denoted? -Back: As `\ooo`. -Reference: Brian W. Kernighan and Dennis M. Ritchie, *The C Programming Language*, 2nd ed (Englewood Cliffs, N.J: Prentice Hall, 1988). - -END%% - -%%ANKI -Basic -In C, `\ooo` allows specifying how many octal digits? -Back: One to three. -Reference: Brian W. Kernighan and Dennis M. Ritchie, *The C Programming Language*, 2nd ed (Englewood Cliffs, N.J: Prentice Hall, 1988). - -END%% - -%%ANKI -Basic -How are C escape sequences exposed in bash? -Back: Using ANSI-C quoting, i.e. `$$'string'`. -Reference: Mendel Cooper, “Advanced Bash-Scripting Guide,” n.d., 916. -Tags: bash - -END%% - -* `\xhh`: Consists of one or more [[radices#Hexadecimal|hexadecimal]] digits. The `x` prefix is required to distinguish from octal escape sequences. - * [[bash/index|Bash]] supports this sequence as `$'\xhh'`. One or two digits is supported. - -%%ANKI -Basic -How are C escape sequences for hexadecimal digits denoted? -Back: As `\xhh`. -Reference: Brian W. Kernighan and Dennis M. Ritchie, *The C Programming Language*, 2nd ed (Englewood Cliffs, N.J: Prentice Hall, 1988). - -END%% - -%%ANKI -Basic -In C, `\x` allows specifying how many hexadecimal digits? -Back: One or more. -Reference: Brian W. Kernighan and Dennis M. Ritchie, *The C Programming Language*, 2nd ed (Englewood Cliffs, N.J: Prentice Hall, 1988). - -END%% - -%%ANKI -Basic -What footgun does C's `\x` sequence expose? -Back: Using more than two hexadecimal digits can produce undefined results. -Reference: Arnold D. Robbins, “GAWK: Effective AWK Programming,” October 2023, [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf). - -END%% - -* `\uhhhh`: Introduced in C11 to represent Unicode code points. *Must* have exactly four hexadecimal characters specified with `0` leading padding if necessary. - * [[bash/index|Bash]] supports this sequence as `$'uhhhh'`. One to four hex digits is supported. - -%%ANKI -Basic -What two ways are C escape sequences for unicode denoted? -Back: As `\uhhhh` or `\Uhhhhhhhh`. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). -Tags: encoding::unicode - -END%% - -%%ANKI -Basic -In C, `\u` allows specifying how many hexadecimal digits? -Back: Exactly four. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). -Tags: encoding::unicode - -END%% - -%%ANKI -Basic -In what standard were C's `\u` and `\U` escape sequences introduced? -Back: C11. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). -Tags: encoding::unicode - -END%% - -* `\Uhhhhhhhh`: Introduced in C11 to represent larger unicode code points. *Must* have exactly eight hexadecimal characters specified with `0` leading padding if necessary. - -%%ANKI -Basic -In C, `\U` allows specifying how many hexadecimal digits? -Back: Exactly eight. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). -Tags: encoding::unicode - -END%% - -%%ANKI -Basic -Why does C have both `\u` and `\U`? -Back: `\U` accommodates for larger code point values. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). -Tags: encoding::unicode - -END%% - -## Copying Functions - -The two primary functions used for copying memory are `memcpy` and `memmove`: - -```c -void* memcpy(void* restrict s1, const void* restrict s2, size_t n); -void* memmove(void* s1, const void* s2, size_t n); -``` - -%%ANKI -Basic -What are the two primary functions provided by the standard library for copying memory? -Back: `memcpy` and `memmove`. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -What is the function prototype of `memcpy`? -Back: -```c -void* memcpy(void* restrict s1, const void* restrict s2, size_t n); -``` -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -What does the `memcpy` function do? -Back: Copies a specified number of bytes from one object to another. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -Disregarding out of bounds errors, when does `memcpy` invoke undefined behavior? -Back: When copying occurs between objects that overlap in memory. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -What does the first argument of `memcpy` refer to? -Back: The destination address bytes are copied to. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -What does the second argument of `memcpy` refer to? -Back: The source address bytes are copied from. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -What does the third argument of `memcpy` refer to? -Back: The number of bytes to copy from the source address. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -Which of `memcpy` or `memmove` is faster? -Back: `memcpy` -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -*Why* is `memmove` slower than `memcpy`? -Back: It's implemented as if copying first into a temporary array that does not overlap the arguments in memory. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -When should you prefer using `memcpy` instead of `memmove`? -Back: When the copying occurs between objects that do not overlap in memory. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -Which standard header library defines `memcpy`? -Back: `` -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -What is the function prototype of `memmove`? -Back: -```c -void* memmove(void* s1, const void* s2, size_t n); -``` -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -What does the first argument of `memmove` refer to? -Back: The destination address bytes are copied to. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -What does the second argument of `memmove` refer to? -Back: The source address bytes are copied from. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -What does the third argument of `memmove` refer to? -Back: The number of bytes to copy from the source address. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -Disregarding out of bounds errors, when does `memmove` invoke undefined behavior? -Back: N/A. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -When should you prefer using `memmove` instead of `memcopy`? -Back: When the copying occurs between objects that overlap in memory. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -Which standard header library defines `memmove`? -Back: `` -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - -%%ANKI -Basic -What does the `memmove` function do? -Back: Copies a specified number of bytes from one object to another. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - ## Bibliography -* Arnold D. Robbins, “GAWK: Effective AWK Programming,” October 2023, [https://www.gnu.org/software/gawk/manual/gawk.pdf](https://www.gnu.org/software/gawk/manual/gawk.pdf). -* Brian W. Kernighan and Dennis M. Ritchie, *The C Programming Language*, 2nd ed (Englewood Cliffs, N.J: Prentice Hall, 1988). * Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -* “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). * Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). -* Mendel Cooper, “Advanced Bash-Scripting Guide,” n.d., 916. -* “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). +* “Printf,” in *Wikipedia*, January 18, 2024, [https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962](https://en.wikipedia.org/w/index.php?title=Printf&oldid=1196716962). \ No newline at end of file diff --git a/notes/linkers/elf.md b/notes/linkers/elf.md new file mode 100644 index 0000000..399e911 --- /dev/null +++ b/notes/linkers/elf.md @@ -0,0 +1,331 @@ +--- +title: ELF +TARGET DECK: Obsidian::STEM +FILE TAGS: linker::elf x86-64 +tags: + - elf + - linker + - x86-64 +--- + +## Overview + +Modern [[x86-64/index|x86-64]] Linux systems use the ELF (Executable and Linkable Format) object file format. + +![[elf.png]] + +%%ANKI +Basic +What object file format do modern x86-64 Linux machines typically use? +Back: ELF. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the ELF object file format an acronym for? +Back: **E**xecutable and **L**inkable **F**ormat. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is ELF an example of? +Back: An object file format. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +### Relocatable Object Files + +A typical ELF relocatable object file contains the following sections: + +#### `.text` + +The machine code of the compiled program. + +%%ANKI +Basic +What does the `.text` section of an ELF file contain? +Back: The machine code of the compiled program. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Which ELF section typically contains the machine code of the compiled program? +Back: `.text` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Cloze +The {`.text`} section contains the {machine code} of the compiled program. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +#### `.rodata` + +Read-only data such as the format strings in [[c17/strings/printf|printf]] statements and [[conditions#JMP|jump tables]] for switch statements. + +%%ANKI +Basic +What does the `.rodata` section of an ELF file contain? +Back: Read-only data. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Which ELF section typically contains read-only data? +Back: `.rodata` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Why is the `.rodata` section named the way it is? +Back: It stands for **r**ead-**o**nly **data**. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +In what section of an ELF file would a `printf` format string be found in? +Back: `.rodata` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +Tags: c17::printf + +END%% + +%%ANKI +Basic +In what section of an ELF file would a jump table be found in? +Back: `.rodata` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +#### `.data` + +Global and static C variables initialized to a non-zero value. + +%%ANKI +Basic +What kind of global/static C variables does the `.data` section of an ELF file contain? +Back: Those initialized to a non-zero value. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Which ELF section contains global C variables initialized to a non-zero value? +Back: `.data` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Which ELF section contains static C variables initialized to a non-zero value? +Back: `.data` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Which ELF section contains local C variables initialized to a non-zero value? +Back: N/A. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Consider the following translation unit. Which ELF section will `foo` end up in? +```c +int foo = 1; +``` +Back: `.data` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Consider the following translation unit. Which ELF section will `bar` end up in? +```c +int foo() { + int bar = 0; +} +``` +Back: N/A. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Consider the following translation unit. Which ELF section will `bar` end up in? +```c +int foo() { + static int bar = 1; +} +``` +Back: `.data`. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +#### `.bss` + +Uninitialized global and static C variables, along with any global or static variables initialized to zero. + +%%ANKI +Basic +What kind of global/static C variables does the `.bss` section of an ELF file contain? +Back: Unitialized variables or those initialized to zero. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Which ELF section contains uninitialized global C variables? +Back: `.bss` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Which ELF section contains global C variables initialized to a zero value? +Back: `.bss` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Which two ELF sections contain global/static C variables? +Back: `.data` and `.bss` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Consider the following translation unit. Which ELF section will `foo` end up in? +```c +int foo = 0; +``` +Back: `.bss` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Consider the following translation unit. Which ELF section will `foo` end up in? +```c +int foo; +``` +Back: `.bss` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Both `.bss` and `.data` hold what kind of C variables? +Back: Global or static C variables. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Which of `.data` and/or `.bss` is considered a placeholder? +Back: `.bss` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What does Bryant et al. mean by saying `.bss` is "merely a placeholder"? +Back: The `.bss` section occupies no actual space in the object file. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +How does the size of the `.bss` section compare to that of the `.data` section? +Back: Less than or equal since the `.bss` section is always empty. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What mneumonic does Bryant et al. suggest to remember the `.bss` and `.data` distinction? +Back: `.bss` is a backronym for "**B**etter **S**ave **S**pace!" +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Consider the following translation unit. Which ELF section will `bar` end up in? +```c +int foo() { + static int bar = 0; +} +``` +Back: `.bss`. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +#### `.symtab` + +A symbol table with information about functions and global variables defined and referenced in the program. + +%%ANKI +Basic +What does the `.symtab` section of an ELF file contain? +Back: A symbol table for functions and global variables. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Which ELF section contains a symbol table for functions and global variables? +Back: `.symtab` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Why is the `.symtab` ELF section named the way it is? +Back: It's short for **sym**bol **tab**le. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +## Bibliography + +* Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. \ No newline at end of file diff --git a/notes/linkers/images/elf.png b/notes/linkers/images/elf.png new file mode 100644 index 0000000000000000000000000000000000000000..3139ea4e971b7b6a60252ca967237723797debfd GIT binary patch literal 78398 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 GKK~!M57kWo literal 0 HcmV?d00001 diff --git a/notes/linkers/index.md b/notes/linkers/index.md index c7566df..d9120ab 100644 --- a/notes/linkers/index.md +++ b/notes/linkers/index.md @@ -99,6 +99,99 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program END%% +## Object Files + +Object files come in three forms: + +1. **Relocatable object files**. Contains binary code and data in a form that can be combined with other relocatable object files at compile time. +2. **Executable object files**. Contains binary code and data in a form that can be copied directly into memory and executed. +3. **Shared object files**. A special type of relocatable object file that can be loaded into memory and linked dynamically, at either load time or run time. + +An **object module** is a sequence of bytes whereas an **object file** is an object module stored on disk. + +%%ANKI +Basic +What are the three types of object files? +Back: Relocatable, executable, and shared. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Relocatable object files are outputs of which compiler driver component? +Back: The assembler. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +Tags: c17 + +END%% + +%%ANKI +Basic +Executable object files are outputs of which compiler driver component? +Back: The linker. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +Tags: c17 + +END%% + +%%ANKI +Basic +Relocatable object files are inputs into which compiler driver component? +Back: The linker. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +Tags: c17 + +END%% + +%%ANKI +Basic +Executable object files are inputs into which compiler driver component? +Back: N/A. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +Tags: c17 + +END%% + +%%ANKI +Cloze +A {shared} object file is a special case of a {relocatable} object file. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is an object module? +Back: A sequence of bytes. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +In terms of object modules, what is an object file? +Back: An object module stored on disk. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What distinguishes an object module from an object file? +Back: An object file is an object module stored on disk. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +In what way is the term "object file" misused by Bryant et al.? +Back: Technically this term only refers to object modules on disk. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + ## Bibliography * Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. \ No newline at end of file diff --git a/notes/linkers/object-files.md b/notes/linkers/object-files.md deleted file mode 100644 index 5e54205..0000000 --- a/notes/linkers/object-files.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: Object Files -TARGET DECK: Obsidian::STEM -FILE TAGS: linker::object-file -tags: - - linker - - object-file ---- - -## Overview - -Object files come in three forms: - -1. **Relocatable object files**. Contains binary code and data in a form that can be combined with other relocatable object files at compile time. -2. **Executable object files**. Contains binary code and data in a form that can be copied directly into memory and executed. -3. **Shared object files**. A special type of relocatable object file that can be loaded into memory and linked dynamically, at either load time or run time. - -%%ANKI -Basic -What are the two types of object files? -Back: Relocatable and executable. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - -END%% - -%%ANKI -Basic -Relocatable object files are outputs of which compiler driver component? -Back: The assembler. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: c17 - -END%% - -%%ANKI -Basic -Executable object files are outputs of which compiler driver component? -Back: The linker. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: c17 - -END%% - -%%ANKI -Basic -Relocatable object files are inputs into which compiler driver component? -Back: The linker. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: c17 - -END%% - -%%ANKI -Basic -Executable object files are inputs into which compiler driver component? -Back: N/A. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: c17 - -END%% - -%%ANKI -Cloze -A {shared} object file is a special case of a {relocatable} object file. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - -END%% - -An **object module** is a sequence of bytes whereas an **object file** is an object module stored on disk. - -%%ANKI -Basic -What is an object module? -Back: A sequence of bytes. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - -END%% - -%%ANKI -Basic -In terms of object modules, what is an object file? -Back: An object module stored on disk. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - -END%% - -%%ANKI -Basic -What distinguishes an object module from an object file? -Back: An object file is an object module stored on disk. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - -END%% - -%%ANKI -Basic -In what way is the term "object file" misused by Bryant et al.? -Back: Technically this term only refers to object modules on disk. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - -END%% - -Object files are organized to specific **object file formats**: - -* Windows uses the PE (Portable Executable) format. -* Mac OS-X uses the Mach-O format. -* Modern x86-64 Linux systems use the ELF (Executable and Linkable Format) format. - -%%ANKI -Basic -What object file format do x86-64 Linux machines typically use? -Back: ELF. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: x86-64 - -END%% - -%%ANKI -Basic -What is the ELF object file format an acronym for? -Back: **E**xecutable and **L**inkable **F**ormat. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: x86-64 - -END%% - -%%ANKI -Basic -What is ELF an example of? -Back: An object file format. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. -Tags: x86-64 - -END%% - -## Bibliography - -* Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. \ No newline at end of file