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

# ispunct(3)

punctuation character test

## NAME

**ispunct**, **ispunct\_l** – punctuation character test

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*int*\

**ispunct**(*int c*);

*int*\

**ispunct\_l**(*int c*, *locale\_t loc*);

## DESCRIPTION

The **ispunct**() and **ispunct\_l**() functions test for any printing character except for space (‘ ’) or a character for which [isalnum(3)](/isalnum/3.md) or [isalnum\_l(3)](/isalnum_l/3.md) is true. The value of the argument must be representable as an *unsigned char* or the value of EOF.

In the ASCII character set, this includes the following characters (with their numeric values shown in octal):

| | | | | |
| --- | --- | --- | --- | --- |
| 041 \`\`!'' | 042 \`\`"'' | 043 \`\`#'' | 044 \`\`$'' | 045 \`\`%'' |
| 046 \`\`&'' | 047 \`\`''' | 050 \`\`('' | 051 \`\`)'' | 052 \`\`\*'' |
| 053 \`\`+'' | 054 \`\`,'' | 055 \`\`-'' | 056 \`\`.'' | 057 \`\`/'' |
| 072 \`\`:'' | 073 \`\`;'' | 074 \`\`\<'' | 075 \`\`='' | 076 \`\`\>'' |
| 077 \`\`?'' | 100 \`\`@'' | 133 \`\`\['' | 134 \`\`\\'' | 135 \`\`\]'' |
| 136 \`\`^'' | 137 \`\`\_'' | 140 \`\`\`'' | 173 \`\`{'' | 174 \`\`\|'' |
| 175 \`\`}'' | 176 \`\`~'' |  |  |  |

The **ispunct\_l**() function takes an explicit locale argument, whereas the **ispunct**() function uses the current global or per-thread locale.

## RETURN VALUES

The **ispunct**() and **ispunct\_l**() functions return zero if the character tests false and return non-zero if the character tests true.

## COMPATIBILITY

The 4.4BSD extension of accepting arguments outside of the range of the *unsigned char* type in locales with large character sets is considered obsolete and may not be supported in future releases. The **iswpunct**() or **iswpunct\_l**() function should be used instead.

## SEE ALSO

[ctype(3)](/ctype/3.md), [ctype\_l(3)](/ctype_l/3.md), [iswpunct(3)](/iswpunct/3.md), [iswpunct\_l(3)](/iswpunct_l/3.md), [xlocale(3)](/xlocale/3.md), [ascii(7)](/ascii/7.md)

## STANDARDS

The **ispunct**() function conforms to ISO/IEC 9899:1990 (“ISO C90”). The **ispunct\_l**() function conforms to IEEE Std 1003.1-2008 (“POSIX.1”).

## HISTORY

The **ispunct**() function first appeared in Version 7 AT&T UNIX.
