经验分享 – 基础知识 | 每日一面(7)

古代的剑客们与

对手相逢时,无

论对手多么强大,

明知不敌,也要亮出自己的剑!

读者:extern 在函数声明中是什么意思?

小林:它可以用作一种格式上的提示表明函数的定义可能在另一个源文件中, 但在extern int f();和int f();之间并没有实质的区别。

读者:关键字 auto 到底有什么用途?

小林:具体没什么用处,它已经过时。

读者:我试过 typedef struct { char *item; NODEPTR next; } *NODEPTR; 但是编译器报了错误信息,在C语言中一个结构不能包含指向自己的指针吗?

小林:C语言中的结构当然可以包含指向自己的指针; NODEPTR 例子的问题是在声明 next 域的时候 typedef 还没有定义。

为了解决这个问题, 首先赋予这个结构一个标签 (“struct node”)。然后,声明 “next” 域为 “struct node *”, 或者分开 typedef 定义和结构定义, 或者两者都采纳。

struct node {
    char *item;
    struct node *next;
};
typedef struct node *NODEPTR;

在用 typedef 定义互相引用的两个结构时也会产生类似的问题, 可以用同样的方法解决。

有时候,正是那些意想不到之人,成就了无人能成之事。——图灵

正文完