【发布时间】:2014-07-28 05:51:57
【问题描述】:
我怀疑这与范围有关,但请使用此代码生成带有初始空格和后续逗号的列表,取自 Peter van der Linden 的 Expert C Programming, Deep C Secrets: p>
void generate_initializer(char * string) {
static char separator = ' ';
printf("%c %s\n", separator, string);
separator = ',';
}
为什么separator 在通过指令static char separator = ' '; 时没有被重新分配?我知道“静态”是告诉编译器为 separator 分配空间,以扩展程序的长度,并将其范围仅设置为 generate_initializer(),但我认为代码不会忽略赋值操作像这样并且总是将separator重新分配为空白。
【问题讨论】:
-
并不是因为标准要求它不能。没有那个静态就不会那么有用了!
-
static char separator = ' ';行不是赋值,而是声明。符号在声明中的含义与语句不同,=仅表示语句中的赋值。 -
对,忘了那个区别。编译时分配将是一次性的精简且“运行时分配”在声明之外,这是完全有道理的,至少对于静态而言。
标签: c static assignment-operator