prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 15.3

Q我遇到了一个令人沮丧的问题,结果是由以下一行引起的:

	printf("%d", n);
其中n实际上是一个long int。我认为 ANSI 函数原型应该可以防止此类参数类型不匹配。


A当一个函数接受可变数量的参数时,它的原型不会(也不能)提供关于这些可变参数的数量和类型的任何信息。因此,普通的保护机制对于可变长度参数列表的可变长度部分适用:编译器无法执行隐式转换,或者(通常)警告类型不匹配。程序员必须确保参数匹配,或者必须手动插入显式转换。

在类似printf的函数的情况下,一些编译器(包括gcc)和一些版本的lint能够根据格式字符串检查实际参数,只要格式字符串是直接的字符串字面量。

另请参阅问题 5.211.312.915.2


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管