一文刨析C/C++全局常量的定义

一文刨析C/C++全局常量的定义_第1张图片

目录

文件特性常量

文件常量

堆常量

EOF, WEOF

errno 常量

数学常量

数学错误常量

共享常量

转换模式常量

文件读/写访问常量

NULL (CRT)

stdin, stdout, stderr


文件特性常量

语法

#include 

备注

这些常量指定由函数指定的文件或目录的当前特性。

特性可以通过以下清单常量表示:

返回的常量 说明
_A_ARCH 存档。 每当通过 BACKUP 命令更改或清除文件时进行设置。 值:0x20
_A_HIDDEN 隐藏文件。 使用 DIR 命令时通常不可见,除非使用 /AH 选项。 返回有关具有此属性的普通文件和文件的信息。 值:0x02
_A_NORMAL 正常。 可以不受限制地读取或写入的文件。 值:0x00
_A_RDONLY 只读。 无法打开文件进行写入,并且无法创建同名的文件。 值:0x01
_A_SUBDIR 子目录。 值:0x10
_A_SYSTEM 系统文件。 使用 DIR 命令时通常不可见,除非使用 /AS 选项。 值:0x04

可使用 OR 运算符 (|) 组合多个常量。

文件常量

语法

#include 

备注

由这些常量中的一个或多个常量构成的整数表达式确定允许进行的读取或写入操作的类型。 它由将一个或多个常量与翻译模式常量组合在一起形成。

文件常量如下所示:

返回的常量 说明
_O_APPEND 在每次执行写入操作前,将文件指针重新定位到文件尾。
_O_CREAT 创建并打开用于写入的新文件;如果存在 filename 文件,则常量无效。
_O_EXCL 如果由 filename 指定的文件存在,则返回一个错误值。 仅在与 _O_CREAT 一起使用时适用。
_O_RDONLY 打开文件以仅读取;如果提供此标志, _O_RDWR 则 _O_WRONLY 无法提供。
_O_RDWR 打开用于读取和写入的文件;如果提供此标志, _O_RDONLY 则 _O_WRONLY 无法提供。
_O_TRUNC 打开现有文件并将其截断为零长度;此文件必须具有写入权限。 销毁此文件的内容。 如果给定此标志,则无法指定 _O_RDONLY
_O_WRONLY 仅打开用于写入的文件;如果提供此标志, _O_RDONLY 则 _O_RDWR 无法提供。

堆常量 

语法

#include 

备注

这些常量提供表示堆状态的返回值。

返回的常量 含义
_HEAPBADBEGIN 找不到初始标头信息或无效。
_HEAPBADNODE 找到错误节点,或堆已损坏。
_HEAPBADPTR _pentry_HEAPINFO结构字段不包含指向堆的有效指针, (_heapwalk例程仅) 。
_HEAPEMPTY 堆尚未初始化。
_HEAPEND 已成功到达堆的结尾处(仅限 _heapwalk 例程)。
_HEAPOK 堆是一致的(仅限 _heapset 和 _heapchk 例程)。 到目前为止没有错误; _HEAPINFO 结构仅包含有关下一个条目 (_heapwalk 例程的信息) 。

EOFWEOF

语法

#include 

备注

EOF 当文件结束 (或在某些情况下,遇到错误) 时,I/O 例程将返回。

WEOF 生成返回值(类型) wint_t用于向宽流末尾发出信号,或报告错误条件。

errno 常量

语法

#include 

备注

常 errno 量是针对 errno 各种错误条件分配给的值。

ERRNO.H 包含 errno 值的定义。 但是,并非 ERRNO.H 中给定的提供定义都可用于 32 位 Windows 操作系统。 ERRNO.H 中的某些值的存在是为了保持与 UNIX 系列操作系统的兼容性。 32 位 Windows 操作系统中的 errno 值是 XENIX 系统中的 errno 值的子集。

errno 值不一定与由从 Windows 操作系统进行的系统调用返回的实际错误代码相同。 若要访问实际操作系统错误代码,请使用包含此值的 _doserrno 变量。

支持以下 errno 值:

返回的常量 说明
E2BIG 自变量列表太长。 7
EACCES 权限被拒绝。 文件的权限设置不允许指定访问。 尝试访问文件 (,在某些情况下,目录) 与文件的属性不兼容。

例如,尝试从未打开的文件读取时,可能会发生错误。 或者,尝试打开现有只读文件进行写入,或打开目录而不是文件。 在 MS-DOS 操作系统版本 3.0 以及更高版本下,EACCES 也可能表示锁定或共享冲突。

在尝试重命名文件或目录或者删除现有目录时也可能发生错误。
13
EAGAIN 没有更多进程、没有足够内存或达到最大嵌套级别。 尝试创建新进程失败,因为没有更多的进程槽,或者没有足够的内存,或者达到最大嵌套级别。 11
EBADF 文件编号错误。 有两个可能的原因:1) 指定的文件描述符不是有效值或未引用打开的文件。 2) 尝试写入到已打开进行只读访问的文件或设备。 9
EBUSY 设备或资源忙碌。 16
ECHILD 没有生成的进程。 10
EDEADLK 将会发生资源死锁。 36
EDEADLOCK 与 EDEADLK 相同,以便与早期的 Microsoft C 版本兼容。 36
EDOM 数学自变量。 数学函数的参数不在函数的域中。 33
EEXIST 存在文件。 尝试创建已存在的文件。 例如,在 _open 调用中指定 _O_CREAT 和 _O_EXCL 标志,但命名的文件已存在。 17
EFAULT 地址错误。 14
EFBIG 文件太大。 27
EILSEQ 非法字节序列(例如,在 MBCS 字符串中)。 42
EINTR 函数中断。 4
EINVAL 无效的参数。 为某个函数的自变量之一给定了无效值。 例如,当通过调用 fseek) 将文件指针定位到源时给定的值位于文件开头之前 (。 22
EIO I/O 错误。 5
EISDIR 是目录。 21
EMFILE 打开的文件太多。 没有更多文件说明符可用,因此无法打开更多文件。 24
EMLINK 链接太多。 31
ENAMETOOLONG 文件名太长。 38
ENFILE 系统中打开的文件太多。 23
ENODEV 没有此设备。 19
ENOENT 没有此文件或目录。 指定的文件或目录不存在或找不到。 每当指定的文件不存在或路径的组件未指定现有目录时,可能会发生此消息。 2
ENOEXEC 执行格式错误。 尝试执行无效的可执行文件或具有无效可执行文件格式的文件。 8
ENOLCK 无可用锁。 39
ENOMEM 无法为尝试的运算符提供足够的内存。 例如,当内存不足可用于执行子进程或无法满足调用中的 _getcwd 分配请求时,可能会出现此消息。 12
ENOSPC 设备上没有剩余空间。 设备上没有可供写入的其他空间(例如,当磁盘已满时)。 28
ENOSYS 功能不受支持。 40
ENOTDIR 不是目录。 20
ENOTEMPTY 目录不为空。 41
ENOTTY 不适当的 I/O 控制操作。 25
ENXIO 没有此设备或地址。 6
EPERM 不允许执行该操作。 1
EPIPE 管道损坏。 32
ERANGE 结果太大。 数学函数的自变量太大,造成结果中的有效位部分或全部丢失。 当参数大于预期值时(例如,当 _getcwd 的 buffer 参数大于预期值时),在其他函数中也可能发生此错误。 34
EROFS 只读文件系统。 30
ESPIPE 搜寻无效。 29
ESRCH 没有此进程。 3
EXDEV 跨设备链接。 尝试将文件移至不同的设备(使用 rename 函数)。 18
STRUNCATE 字符串复制或串联导致字符串被截断。 请参阅 _TRUNCATE。 80

下列值支持 POSIX 的兼容性:

返回的常量 说明
EADDRINUSE 正在使用的地址。 100
EADDRNOTAVAIL 地址不可用。 101
EAFNOSUPPORT 地址系列不受支持。 102
EALREADY 连接已经进行。 103
EBADMSG 错误消息。 104
ECANCELED 操作已取消。 105
ECONNABORTED 连接已中止。 106
ECONNREFUSED 连接被拒绝。 107
ECONNRESET 连接重置。 108
EDESTADDRREQ 需要目标地址。 109
EHOSTUNREACH 无法访问主机。 110
EIDRM 已删除标识符。 111
EINPROGRESS 操作正在进行。 112
EISCONN 已连接。 113
ELOOP 符号链接级别过多。 114
EMSGSIZE 消息大小。 115
ENETDOWN 网络中断。 116
ENETRESET 网络重置。 117
ENETUNREACH 无法访问网络。 118
ENOBUFS 无缓冲空间。 119
ENODATA 无可用消息。 120
ENOLINK 无链接。 121
ENOMSG 无消息。 122
ENOPROTOOPT 无协议选项。 123
ENOSR 无流资源。 124
ENOSTR 不是流。 125
ENOTCONN 未连接。 126
ENOTRECOVERABLE 状态不可恢复。 127
ENOTSOCK 不是套接字。 128
ENOTSUP 不支持。 129
EOPNOTSUPP 不支持操作。 130
EOTHER 其他。 131
EOVERFLOW 值太大。 132
EOWNERDEAD 所有者亡。 133
EPROTO 协议错误。 134
EPROTONOSUPPORT 协议不受支持。 135
EPROTOTYPE 协议类型错误。 136
ETIME 流超时。 137
ETIMEDOUT 已超时。 138
ETXTBSY 文本文件繁忙。 139
EWOULDBLOCK 操作将阻塞。 140

数学常量

常见的数学常量提供了多个预定义的预处理器宏。

语法

#define _USE_MATH_DEFINES // for C++
#include 

#define _USE_MATH_DEFINES // for C
#include 

备注

下列符号定义了其所指示的表达式的值:

符号 表达式
M_E e 2.71828182845904523536
M_LOG2E log2(e) 1.44269504088896340736
M_LOG10E log10(e) 0.434294481903251827651
M_LN2 ln(2) 0.693147180559945309417
M_LN10 ln(10) 2.30258509299404568402
M_PI pi 3.14159265358979323846
M_PI_2 pi/2 1.57079632679489661923
M_PI_4 pi/4 0.785398163397448309616
M_1_PI 1/pi 0.318309886183790671538
M_2_PI 2/pi 0.636619772367581343076
M_2_SQRTPI 2/sqrt(pi) 1.12837916709551257390
M_SQRT2 sqrt(2) 1.41421356237309504880
M_SQRT1_2 1/sqrt(2) 0.707106781186547524401

数学常量未在标准 C/C++ 中定义。 若要使用它们,必须先定义 _USE_MATH_DEFINES,然后包括  或 

在“发布模式”下生成项目时,文件  包含 。 如果在同时包含  的项目中使用了一个或多个数学常量,则在包含  前必须先定义 _USE_MATH_DEFINES


数学错误常量

语法

#include 

备注

运行库的数学例程可生成数学错误常量。

如下所述,这些错误对应于 MATH.H 中定义的异常类型,并在发生数学错误后由 _matherr 函数返回。

返回的常量 含义
_DOMAIN 函数的自变量位于函数域的外部。
_OVERFLOW 结果太大而无法在函数的返回类型中表示。
_PLOSS 发生了有效位部分丢失的情况。
_SING 自变量奇异性:函数的自变量具有非法值。 (例如,将值 0 传递到需要非零值的函数。)
_TLOSS 发生了有效位完全丢失的情况。
_UNDERFLOW 结果太小而无法表示。

共享常量

文件共享模式的常量。

语法

#include 

备注

该 shflag 参数确定共享模式,该模式由一个或多个清单常量组成。 这些常量可以与 oflag 参数结合使用, (请参阅 文件常量) 。

下表列出了常量及其含义:

返回的常量 含义
_SH_DENYRW 拒绝对文件的读写访问权限
_SH_DENYWR 拒绝对文件的写访问权限
_SH_DENYRD 拒绝对文件的读访问权限
_SH_DENYNO 允许读写访问权限
_SH_SECURE 设置安全模式(共享读取、独占写入访问权限)。

转换模式常量

语法

#include 

备注

_O_BINARY 和 _O_TEXT 清单常数将决定文件(_open 和 _sopen)的转换模式或流 (_setmode) 的转换模式。

允许的值为:

说明
_O_TEXT 在文本(已转换)模式下打开文件。 输入时回车符–换行符 (CR-LF) 组合将转换为单个换行符 (LF)。 输出时换行符将转换为 CR-LF 组合。 CTRL+Z 也将在输入时解释为文件尾字符。 在打开以进行读取或读取和写入的文件中,fopen 将检查文件末尾的 Ctrl+Z 并在可能的情况下将其移除。 由于使用 fseek 和 ftell 函数在以 CTRL+Z 结尾的文件内移动可能会导致 fseek 在文件末尾附近行为不当而被删除。
_O_BINARY 在二进制(未转换)模式下打开文件。 禁止上述的转换。
_O_RAW 与 _O_BINARY 相同。 支持 C 2.0 兼容性。

文件读/写访问常量

语法

#include 

备注

这些常量指定为文件请求的访问类型(“a”、“r”或“w”)。 可以使用访问类型来指定转换模式(“b”或“t”)和 模式(“c”或“n”)。

访问类型如下表中所述:

访问类型 说明
"r" 打开以便读取。 如果文件不存在或找不到,则打开该文件的调用将失败。
"w" 打开用于写入的空文件。 如果给定文件存在,则其内容会被销毁。
"a" 打开以在文件末尾写入 (追加) ;如果文件不存在,请先创建该文件。 所有写入操作均在文件末尾发生。 尽管可以使用或rewind重新定位fseek文件指针,但在执行任何写入操作之前,它始终会移回到文件的末尾。
"r+" 打开以便读取和写入。 如果文件不存在或找不到,则打开该文件的调用将失败。
"w+" 打开用于读取和写入的空文件。 如果给定文件存在,则其内容会被销毁。
"a+" 与 “”a相同, 但也允许读取。

指定“r+”、“w+”或“a+”类型时,允许读取和写入(文件将处于打开状态以进行“更新”)。 但是,在读取与写入之间切换时,必须有中间 fflushfsetposfseek 或 rewind 操作。 可以为 fsetpos 或 fseek 操作指定当前位置。

 


NULL (CRT)

NULL 是用于许多指针操作和函数的 null 指针值。 它等效于 0。 NULL 在以下头文件中定义:CRTDBG。H、LOCALE。H、STDDEF。H、STDIO。H、STDLIB。H、STRING。H、TCHAR。H,时间。H 和 WCHAR.H.

stdinstdoutstderr

语法

FILE *stdin;
FILE *stdout;
FILE *stderr;
#include 

备注

stdinstdoutstderr全局常量指针是输入、输出和错误输出的标准流。

默认情况下,标准输入是从键盘读取的,而标准输出和错误输出将打印到屏幕。

下列流指针可用于访问标准流:

指针 Stream
stdin 标准输入
stdout 标准输出
stderr 标准错误

这些指针可用作函数自变量。 一些函数(如 getchar 和 putchar)将自动使用 stdin 和 stdout

这些指针是常量,不能分配新值。 freopen 函数可用于将流重定向到磁盘文件或其他设备。 操作系统使您可以在命令级别重定向程序的标准输入和输出。

你可能感兴趣的:(c++,开发语言)