为什么 llvm::FunctionType(Type*, bool) 如果根据定义它不带参数,那么它有 bool ?

Why llvm::FunctionType(Type*, bool) has bool if by definition it doesn't take parameters?

FunctionType *FunctionType::get 的一个定义是:

FunctionType *FunctionType::get(Type *Result, bool  isVarArg)   

documentation 说:

Create a FunctionType taking no parameters.

如果类型没有参数,我们什么时候使用bool isVarArg参数来表示参数个数是可变的?

原因是 LLVM 对待可变参数的方式与 fixed/positional 参数不同。没有 fixed 参数(会出现在 ArrayRef<Type *> llvm::FunctionType::params () const 中的那种)是文档中 "no parameters" 的意思,因此可变参数是豁免的。

如果您查看 getNumParams() 的注释,它会显示:

Return the number of fixed parameters this function type requires. This does not consider varargs.