notebook/notes/c17/linkage.md

10 KiB

title TARGET DECK FILE TAGS tags
Linkage Obsidian::STEM c17::linkage
c17
linkage

Overview

An identifier declared in different scopes or in the same scope multiple times can be made to refer to the same object or function by a process called linkage. There are three kinds of linkage: external, internal, and none.

%%ANKI Basic Linkage is a property of what C construct? Back: Identifiers. Reference: Jens Gustedt, Modern C (Shelter Island, NY: Manning Publications Co, 2020).

END%%

%%ANKI Basic What capability does linkage allow identifiers to perform? Back: Reference to the same object or function. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic What are the three kinds of linkage? Back: External, internal, and none. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic External linkage denotes the same object across what? Back: The entire program. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Internal linkage denotes the same object across what? Back: A single translation unit. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic What is the linkage between two different identifiers? Back: None. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Which keyword is usually associated with external linkage? Back: extern Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic What linkage does a keyword annotated with extern have? Back: Internal or external. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic What linkage does a keyword associated with static have? Back: Internal. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Which keyword is usually associated with internal linkage? Back: static Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic When can an identifier have both external and internal linkage? Back: When specified in two different translation units. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Within a translation unit, what happens if an identifer has both external and internal linkage? Back: Undefined behavior. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of x?

int x;

Back: External. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of foo?

void foo(void) { }

Back: External. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic What is the linkage of an object identifier with file scope and no storage-class specifier? Back: External. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic How do you identify the linkage of an object identifier with file scope and no storage-class specifier? Back: Its always external. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic What is the linkage of a function identifier with file scope and no storage-class specifier? Back: Internal or external. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of foo?

static void foo(void);
extern void foo(void);

Back: Internal. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of foo?

extern void foo(void);
static void foo(void);

Back: N/A. Undefined behavior. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of foo?

void foo(void);
static void foo(void);

Back: N/A. Undefined behavior. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of foo?

void foo(void);
void foo(void);

Back: External. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic How do you identify the linkage of a function identifier with file scope and no storage-class specifier? Back: Its the same as if the function identifier were declared extern. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic What is the linkage of a function parameter? Back: None. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic What is the linkage of a local variable without a storage specified? Back: None. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of the last x?

int x;
int main(void) { extern int x; }

Back: External. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of the last x?

int x;
int main(void) { static int x; }

Back: Internal. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of the last x?

extern int x;
int main(void) { static int x; }

Back: Internal. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of the last x?

extern int x;
int main(void) { extern int x; }

Back: External. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of the last x?

static int x;
extern int x;
int main(void) { extern int x; }

Back: Internal. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of the last x?

extern int x;
static int x;
int main(void) { extern int x; }

Back: N/A. Undefined behavior. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of the last x?

extern int x;
int main(void) { int x; }

Back: None. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of the last x?

static int x;
int main(void) { int x; }

Back: None. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

%%ANKI Basic Consider the following translation unit. What is the linkage of the last x?

void foo(int x) { }

Back: None. Reference: “ISO: Programming Languages - C,” April 12, 2011, https://port70.net/~nsz/c/c11/n1570.pdf.

END%%

Bibliography