一文刨析C/C++全局常量的定义-创新互联

创新互联专注于广昌企业网站建设,自适应网站建设,商城网站建设。广昌网站建设公司,为广昌等地区提供建站服务。全流程按需求定制制作,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

目录

文件特性常量

文件常量

堆常量

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
EIOI/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_Ee2.71828182845904523536
M_LOG2Elog2(e)1.44269504088896340736
M_LOG10Elog10(e)0.434294481903251827651
M_LN2ln(2)0.693147180559945309417
M_LN10ln(10)2.30258509299404568402
M_PIpi3.14159265358979323846
M_PI_2pi/21.57079632679489661923
M_PI_4pi/40.785398163397448309616
M_1_PI1/pi0.318309886183790671538
M_2_PI2/pi0.636619772367581343076
M_2_SQRTPI2/sqrt(pi)1.12837916709551257390
M_SQRT2sqrt(2)1.41421356237309504880
M_SQRT1_21/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 函数可用于将流重定向到磁盘文件或其他设备。 操作系统使您可以在命令级别重定向程序的标准输入和输出。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


名称栏目:一文刨析C/C++全局常量的定义-创新互联
文章位置:http://ybzwz.com/article/jeecs.html