---
name: "Panic"
section: "3"
platform: "macos"
package: "tcl"
version: "152"
release: "macOS 26.5"
platforms: ["macos"]
url: "https://new.carta.tech/Panic"
---

# Panic(3)

report fatal error and abort

## NAME

Tcl\_Panic, Tcl\_PanicVA, Tcl\_SetPanicProc - report fatal error and abort

## SYNOPSIS

```
#include <tcl.h>

void
Tcl_Panic(format, arg, arg, ...)

void
Tcl_PanicVA(format, argList)

void
Tcl_SetPanicProc(panicProc)

```

## ARGUMENTS

A printf-style format string. Arguments matching the format string. An argument list of arguments matching the format string. Must have been initialized using **va\_start**, and cleared using **va\_end**. Procedure to report fatal error message and abort.

## DESCRIPTION

When the Tcl library detects that its internal data structures are in an inconsistent state, or that its C procedures have been called in a manner inconsistent with their documentation, it calls **Tcl\_Panic** to display a message describing the error and abort the process.  The *format* argument is a format string describing how to format the remaining arguments *arg* into an error message, according to the same formatting rules used by the **printf** family of functions.  The same formatting rules are also used by the built-in Tcl command **format**.

In a freshly loaded Tcl library, **Tcl\_Panic** prints the formatted error message to the standard error file of the process, and then calls **abort** to terminate the process.  **Tcl\_Panic** does not return.

**Tcl\_SetPanicProc** may be used to modify the behavior of **Tcl\_Panic**.  The *panicProc* argument should match the type **Tcl\_PanicProc**:

typedef void Tcl\_PanicProc(\
         const char \***format**,\
         **arg**, **arg**,...);

After **Tcl\_SetPanicProc** returns, any future calls to **Tcl\_Panic** will call *panicProc*, passing along the *format* and *arg* arguments.  To maintain consistency with the callers of **Tcl\_Panic**, *panicProc* must not return; it must call **abort**.  *panicProc* should avoid making calls into the Tcl library, or into other libraries that may call the Tcl library, since the original call to **Tcl\_Panic** indicates the Tcl library is not in a state of reliable operation.

The typical use of **Tcl\_SetPanicProc** arranges for the error message to be displayed or reported in a manner more suitable for the application or the platform.  As an example, the Windows implementation of **wish** calls **Tcl\_SetPanicProc** to force all panic messages to be displayed in a system dialog box, rather than to be printed to the standard error file (usually not visible under Windows).

Although the primary callers of **Tcl\_Panic** are the procedures of the Tcl library, **Tcl\_Panic** is a public function and may be called by any extension or application that wishes to abort the process and have a panic message displayed the same way that panic messages from Tcl will be displayed.

**Tcl\_PanicVA** is the same as **Tcl\_Panic** except that instead of taking a variable number of arguments it takes an argument list.

## SEE ALSO

[abort(3)](/abort/3.md), [printf(3)](/printf/3.md), [exec(n)](/exec/n.md), [format(n)](/format/n.md)

## KEYWORDS

abort, fatal, error
