notebook/notes/c17/declarations.md

30 KiB

title TARGET DECK FILE TAGS tags
Declarations Obsidian::STEM c17
c17

Overview

C declarations were designed so that the declaration of an object looks like the use of the object. This isn't quite true - keywords like volatile and const only exist in declarations - but for the most part, this philosophy can be leveraged to read C declarations.

Declarators

A declarator in C is roughly an identifier along with pointers, function brackets, or array indications. Pointers will look like one of:

  • *
  • * const
  • * volatile
  • * const volatile
  • * volatile const

whereas direct declarators will look like one of:

  • identifier
  • identifier[size]
  • identifier(args)
  • (declarator)

%%ANKI Basic What two qualifiers can be used in a pointer declaration? Back: const and volatile. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

Declarations

A declaration consists of at least one type-specifier (e.g. signed short), storage class (e.g. static), and/or type qualifier (e.g. const) as well as one or more declarators.

%%ANKI Basic How many declarators does a declaration have? Back: At least one. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic How many declarations does a declarator have? Back: N/A. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic Which part of the following are declarators?

int* a, b;

Back: * a and b. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic Which part of the following are declarations?

int* a, b;

Back: The entire line is a single declaration. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic Which part of the following declaration is the declarator?

const int *const x;

Back: *const x Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic Which part of the following declaration is the type specifier?

const int *const x;

Back: int Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic Which part of the following declaration is the type qualifier?

const int *const x;

Back: The first const. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of x in the following?

const int *const x, y;

Back: const int* const Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of y in the following?

const int *const x, y;

Back: const int Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of x in the following?

#define int_ptr int *
int_ptr x, y;

Back: int * Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of y in the following?

#define int_ptr int *
int_ptr x, y;

Back: int Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of x in the following?

typedef int_ptr int *
int_ptr x, y;

Back: int * Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of y in the following?

typedef int_ptr int *
int_ptr x, y;

Back: int * Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

Declarations can be read by complying with the precedence rules outlined below:

  1. Find the name of the declaration.
  2. Obey the following precedence rules:
    1. Parentheses grouping together parts of a declaration
    2. Postfix operators () and []
    3. Prefix operator: the asterisk * denoting "pointer to"
  3. If const and/or volatile keyword is next to a type specifier, it applies to the type specifier. Otherwise it applies to the pointer asterisk on its immediate left.

%%ANKI Basic In the precedence rules for C declarations, what available postfix operators are there? Back: () and []. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic In the precedence rules for C declarations, what available prefix operators are there? Back: Just *. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic In the precedence rules for C declarations, what available type qualifiers are there? Back: const and volatile. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of foo in the the following declaration?

char *const *(*foo)();

Back: A pointer to a function returning a pointer to a const pointer-to-char. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of foo in the the following declaration?

char *const *foo();

Back: A function returning a pointer to a const pointer-to-char. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of foo in the the following declaration?

int (*(*foo)(void))[3]

Back: A pointer to a function (accepting void) returning a pointer to an array of ints. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of foo in the the following declaration?

const int (* volatile foo)[64]

Back: A volatile pointer to an array of const ints. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of foo in the the following declaration?

const int * const foo;

Back: A const pointer to a const int. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of foo in the the following declaration?

const int * foo;

Back: A pointer to a const int. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of foo in the the following declaration?

int const * foo;

Back: A pointer to a const int. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of foo in the the following declaration?

int * const foo;

Back: A const pointer-to-int. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of foo in the the following declaration?

char *(*foo[10])(int **);

Back: An array of pointers to functions (accepting int **) returning pointer-to-char. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the type of signal in the the following declaration?

void (*signal(int sig, void (*func)(int)))(int);

Back: A function (accepting an int and void (*)(int)) returning a pointer to a function (accepting an int) returning void. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

Type Specifiers

Signed Unsigned 32-bit 64-bit
signed char unsigned char 1 1
short unsigned short 2 2
int unsigned 4 4
long unsigned long 4 8
long long unsigned long long 8 8
char * - 4 8
float - 4 4
double - 8 8

Fixed width data integral types (e.g. int32_t) can be found by including <stdint.h>.

%%ANKI Cloze The {<stdint.h>} header file contains {fixed width data integral types}. 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 header file contains INT32_MAX? Back: <stdint.h> 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 the "width" of an integer type refer to? Back: The number of bits used to represent its 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 What two variants does a C integral type declaration have? Back: Signed and unsigned. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. END%%

%%ANKI What does it mean for an integer to be "signed"? Back: It can represent negative, zero, and positive values. Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016. END%%

%%ANKI What does it mean for an integer to be "unsigned"? Back: It can only represent nonnegative values. 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 large is a word? Back: This is a machine-dependent 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 What word sizes are typical nowadays? Back: 32- and 64-bit word sizes. 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 char typically represents {1} byte(s) on a 64-bit platform. 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 short typically represents {2} byte(s) on a 64-bit platform. 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 int typically represents {4} bytes(s) on a 64-bit platform. 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 unsigned typically represents {4} bytes(s) on a 64-bit platform. 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 long typically represents {8} bytes(s) on a 64-bit platform. 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 long long typically represents {8} bytes(s) on a 64-bit platform. 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 long from long long? Back: long longs are guaranteed to be at least 64-bit wide. 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 there both a long and long long? Back: long longs are at least 64-bit wide, even on 32-bit platforms. 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 char * typically represents {8} bytes(s) on a 64-bit platform. 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 float typically represents {4} bytes(s) on a 64-bit platform. 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 double typically represents {8} bytes(s) on a 64-bit platform. 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 Is declaration int signed or unsigned? Back: Signed. 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 is declaration unsigned written more precisely? Back: unsigned int. 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 Is declaration long signed or unsigned? Back: Signed. 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 Is declaration char signed or unsigned? Back: This is implementation-dependent. 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 {1:float} has {2:4} byte precision whereas {2:double} has {1:8} byte precision. 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 C standard defines {lower} bounds on numeric ranges of data types. 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 C standard does not define {1:upper} bounds on numeric ranges of data types (except for {1:fixed-size} types). Reference: Bryant, Randal E., and David O'Hallaron. Computer Systems: A Programmer's Perspective. Third edition, Global edition. Always Learning. Pearson, 2016.

END%%

Structs

A struct is a grouping of data together. It has the following general form:

struct optional_tag {
  type_1 ident1;
  ...
  type_N identN;
} optional_var1 ... optional_varM;

%%ANKI Basic What is the underlined portion of the following declaration called?

struct ___ { ... };

Back: The tag. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What distinguishes the X's from one another in the following?

struct X { ... } X;

Back: The first X is a tag whereas the second is a variable with type struct X. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What distinguishes the X's from one another in the following?

typedef struct X { ... } X;

Back: The first X is a tag whereas the second is an alias for type struct X. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

Unions

A union is a grouping of data together but with overlaid storage. It has the following general form:

union optional_tag {
  type1 ident1;
  ...
  typeN identN;
} optional_var1 ... optional_varN;

%%ANKI Basic What is the underlined portion of the following declaration called?

union ___ { ... };

Back: The tag. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What distinguishes the X's from one another in the following?

union X { ... } X;

Back: The first X is a tag whereas the second is a variable with type union X. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What distinguishes the X's from one another in the following?

typedef union X { ... } X;

Back: The first X is a tag whereas the second is an alias for type union X. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

Enums

An enum is a mapping of identifiers with integer values. They have general form:

enum optional_tag {
  type1 ident1;
  ...
  typeN identN;
} optional_var1 ... optional_varN;

%%ANKI Basic What is the underlined portion of the following declaration called?

enum ___ { ... };

Back: The tag. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What distinguishes the X's from one another in the following?

enum X { ... } X;

Back: The first X is a tag whereas the second is a variable with type enum X. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What distinguishes the X's from one another in the following?

typedef enum X { ... } X;

Back: The first X is a tag whereas the second is an alias for type enum X. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the value of A in the following?

enum X { A, B, C };

Back: 0 Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the value of B in the following?

enum X { A, B, C };

Back: 1 Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic What is the value of B in the following?

enum X { A=2, B, C };

Back: 3 Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

%%ANKI Basic According to Linden, what is the "only advantage" of enums over #define? Back: enums can usually be traced in a debugger. Reference: Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.

END%%

Integer Literals

Negative integer literals are typed in a counterintuitive way. When the compiler sees a number of form -X, the type of X is determined before being negated. Promotion rules are as follows:

Decimal Other Bases
int int
long unsigned
long long long
- unsigned long
- long long
- unsigned long long

%%ANKI Basic How does the compiler process integer literal -X? Back: By first determining the type of X and then negating the value. Reference: 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 integer literals are guaranteed signed? Back: Decimal integer constants. Reference: 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 do we specify an octal integer literal? Back: Prepend the literal with a 0. Reference: 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 avoid negative octal integer literals? Back: Depending on value, the resulting type may be unsigned. Reference: 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 do we specify a hexadecimal integer literal? Back: Prepend the literal with a 0x or 0X. Reference: 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 Octal literals are to {0} whereas hexadecimal literals are to {0x/0X}. Reference: 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 might C dangerously interpret a negative hexadecimal integer literal? Back: Depending on the value, the resulting type may be unsigned. Reference: 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 header file contains INT_MAX? Back: <limits.h> 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 {INT_MAX} is to signed whereas {UINT_MAX} is to unsigned. 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 <limits.h> define INT_MIN? Back: As (-INT_MAX - 1). 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 INT_MIN defined as (-INT_MAX - 1) instead of directly as e.g. -2147483648? Back: Because 2147483648 (without -) would be sized as a non-int before being negated. 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 INT_MAX is to {<limits.h>} whereas INT32_MAX is to {<stdint.h>}. 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 suffix can be used to denote an unsigned integer literal? Back: Case-insensitive U. 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 suffix can be used to denote a long integer literal? Back: Case-insensitive L. 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 suffix can be used to denote a long long integer literal? Back: Case-insensitive LL. 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 suffix can be used to denote an unsigned long long integer literal? Back: Case-insensitive ULL. 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 order does C cast size and "signedness"? Back: C casts size then signedness. 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 order does C cast "signedness" and size? Back: C casts size then signedness. 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 Given short sx, cast (unsigned) sx is more explicitly written as what other sequence of casts? Back: (unsigned) (int) sx 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 Given short sx, are the following two lines equivalent?

(unsigned) sx
(unsigned) (int) sx

Back: Yes. 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 Given short sx, are the following two lines equivalent?

(unsigned) sx
(unsigned) (unsigned short) sx

Back: No. 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 Given short sx, why is the following not an identity?

(unsigned) sx = (unsigned) (unsigned short) sx

Back: (unsigned) sx casts size before "signedness". 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 "signedness" of a variable refer to? Back: Whether the variable was declared signed or unsigned. 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.
  • “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.
  • Van der Linden, Peter. Expert C Programming: Deep C Secrets. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994.