Artifact [be9aadf97d]
Not logged in

Artifact be9aadf97d56df35eb1123aa73a36a5cb994dcd2cd51bd49229be4f884fe4a21:


---
CommandName: Tcl_WrongNumArgs
ManualSection: 3
Version: 8.0
TclPart: Tcl
TclDescription: Tcl Library Procedures
Links:
 - Tcl_GetIndexFromObj(3)
Keywords:
 - command
 - error message
 - wrong number of arguments
Copyright:
 - Copyright (c) 1994-1997 Sun Microsystems, Inc.
---

# Name

Tcl_WrongNumArgs - generate standard error message for wrong number of arguments

# Synopsis

::: {.synopsis} :::
**#include <tcl.h>**
[Tcl_WrongNumArgs]{.ccmd}[interp, objc, objv, message]{.cargs}
:::

# Arguments

.AP Tcl_Interp interp in Interpreter in which error will be reported: error message gets stored in its result value. .AP Tcl_Size objc in Number of leading arguments from *objv* to include in error message. .AP "Tcl_Obj *const" objv[] in Arguments to command that had the wrong number of arguments. .AP "const char" *message in Additional error information to print after leading arguments from *objv*.  This typically gives the acceptable syntax of the command.  This argument may be NULL.

# Description

**Tcl_WrongNumArgs** is a utility procedure that is invoked by command procedures when they discover that they have received the wrong number of arguments.  **Tcl_WrongNumArgs** generates a standard error message and stores it in the result value of *interp*.  The message includes the *objc* initial elements of *objv* plus *message*.  For example, if *objv* consists of the values **foo** and **bar**, *objc* is 1, and *message* is "**fileName count**" then *interp*'s result value will be set to the following string:

```
wrong # args: should be "foo fileName count"
```

If *objc* is 2, the result will be set to the following string:

```
wrong # args: should be "foo bar fileName count"
```

*Objc* is usually 1, but may be 2 or more for commands like **string** and the Tk widget commands, which use the first argument as a subcommand.

Some of the values in the *objv* array may be abbreviations for a subcommand.  The command **Tcl_GetIndexFromObj** will convert the abbreviated string value into an *indexObject*.  If an error occurs in the parsing of the subcommand we would like to use the full subcommand name rather than the abbreviation.  If the **Tcl_WrongNumArgs** command finds any *indexObject*s in the *objv* array, it will use the full subcommand name in the error message instead of the abbreviated name that was originally passed in.  Using the above example, let us assume that *bar* is actually an abbreviation for *barfly* and the value is now an *indexObject* because it was passed to **Tcl_GetIndexFromObj**.  In this case the error message would be:

```
wrong # args: should be "foo barfly fileName count"
```

# Reference count management

The *objv* argument to **Tcl_WrongNumArgs** should be the exact arguments passed to the command or method implementation function that is calling **Tcl_WrongNumArgs**. As such, all values referenced in it should have reference counts greater than zero; this is usually a non-issue.