2011-04-21 21 views
2

对不起有人可能是一个愚蠢的问题:C varargs是否使用了一个名为'end'的关键字?

我有很多使用C风格变量参数的代码。代码在可变长度函数调用的最后传入一个变量,名称为end。而且......代码也有一个叫做的枚举器,结尾为。到目前为止,他们并没有发生冲突(编译器错误说它有一个模糊的定义:它不会告诉我神秘的第二个'end'是在哪里定义的),直到我改变为vc 10.0编译器(VS 2010)。

So is end某种保留关键字特别用于变量参数? 我对他们知之甚少。但是我已经查看了大量关于可变参数的文档,并且在这里搜索,并且没有发现任何东西(这可能是件好事)。所以我想,答案是结束是不是一个特殊的词用于可变参数。我可以让某人确认吗?

感谢

回答

4

否 - C没有定义end具有可变参数的任何特殊含义。当你编写一个带有可变参数列表的函数时,由你决定如何告诉它列表已经传递了多长时间。一些常用的参数是第一个参数指定(至少间接)多少个参数,并在所有其他参数之后传递“sentinel”值(例如NULL)。对于几个例子,前者printf,后者execl

+0

'execl',当然。无论如何,这带来了另一个问题 - execl只能以这种方式工作,因为它的参数[包括NULL]的_all_是相同的类型:'char *'。这个问题的“结束”只有在与他的函数期望的其他参数类型相同时才能起作用。 – Random832 2011-04-21 17:05:09

+0

而不是:我的代码中的'结束'只是在用户定义的长枚举列表的末尾。所以它不是任何附近的char *。 – 2011-04-21 17:06:39

+0

RRandom832:哎呀,是的 - 谢谢。纠正。 – 2011-04-21 17:06:49

2

很久以前(例如Unix的第7版),定义了三个外部符号:etext,edataend。这些对应于代码的高地址,初始化数据和堆。不知何故,你的定义可能与end相冲突。

+0

啊,我忘了把我的问题标记为仅限于Windows。抱歉。 – 2011-04-21 17:09:16

+1

有趣的无所谓。 – 2011-04-21 17:10:50

相关问题