---
name: "elftc_demangle"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/elftc_demangle"
---

# elftc\_demangle(3)

demangle a C++ name

## NAME

**elftc\_demangle** – demangle a C++ name

## LIBRARY

library “libelftc”

## SYNOPSIS

**#include \<libelftc.h\>**

*int*\

**elftc\_demangle**(*const char \*encodedname*, *char \*buffer*, *size\_t bufsize*, *unsigned int flags*);

## DESCRIPTION

Function **elftc\_demangle**() decodes a symbol name encoded according to the type encoding rules for the C++ language and returns a string denoting an equivalent C++ prototype.

Argument *encodedname* specifies the encoded symbol name. Argument *buffer* denotes a programmer-specified area to place the prototype string in. Argument *bufsize* specifies the size of the programmer-specified area. Argument *flags* specifies the encoding style in use for argument *encodedname*. Supported encoding styles are:

- ELFTC\_DEM\_ARM

  The encoding style used by compilers adhering to the conventions of the C++ Annotated Reference Manual.

- ELFTC\_DEM\_GNU2

  The encoding style by GNU C++ version 2.

- ELFTC\_DEM\_GNU3

  The encoding style by GNU C++ version 3 and later.

Argument *flags* may be zero, in which case the function will attempt to guess the encoding scheme from the contents of *encodedname*.

## RETURN VALUES

Function **elftc\_demangle**() returns 0 on success. In case of an error it returns -1 and sets the *errno* variable.

## EXAMPLES

To decode a name that uses an unknown encoding style use:

```
char buffer[1024];
const char *funcname;
funcname = ...; /* points to string to be demangled */
if (elftc_demangle(funcname, buffer, sizeof(buffer), 0) == 0)
	printf("Demangled name: %\n", buffer);
else
	perror("Cannot demangle %s", funcname);
```

## ERRORS

Function **elftc\_demangle**() may fail with the following errors:

- \[EINVAL\]

  Argument *encodedname* was not a valid encoded name.

- \[ENAMETOOLONG\]

  The output buffer specified by arguments *buffer* and *bufsize* was too small to hold the decoded function prototype.

## SEE ALSO

[elf(3)](/elf/3.md), [elf\_strptr(3)](/elf_strptr/3.md)
