6.4.2 标识符

6.4.2.1 通用

语法

1、identifier:

identifier-nodigit

identifier    identifier-nondigit

identifier    digit

identifier-nondigit:

nondigit

        universal-character-name

other implementation-defined characters

nondigit:以下字符之一

_    a到z    A到Z

digit:0到9

语义

2、一个标识符是一个非数字的(包括下划线_,小写与大写的拉丁字母,以及其它字符)和数字序列,它指派了一个或多个在6.2.1中所描述的实体。小写与大写字母是有区别的。对于一个标识符的最大长度没有特定限制。

3、在一个标识符中的每个通用字符名应该指派一个字符,其ISO/IEC 10646中的编码坐落于D.1中所指定的范围中。[注:在连接器不能接受扩展字符的系统中,通用字符名可以被用于形成有效的外部标识符。比如,一些在其它方面未被使用的字符或字符序列可以被用于在一个通用字符名中编码\u。扩展字符可以产生一个长的扩展标识符。]初始字符不应该是一个指派一个字符坐落于D.2中所指定的范围的通用字符名。一个实现可以允许多字节字符,它们不是出现在标识符中的基本源字符集的一部分;哪些字符以及它们相应的通用字符名是实现定义的。

4、当预处理标记在翻译阶段7期间被转换为标记时,如果一个预处理标记可以被转换为一个关键字或一个标识符,那么它被转换为一个关键字。

实现限制

5、正如在5.2.4.1中所讨论的,一个实现可以限制一个标识符中的有效初始字符的个数;对于一个扩展名的限制(具有外部连接的一个标识符)可能比一个内部名(一个宏名或一个不具有外部连接的标识符)有更多限制。一个标识符中的有效字符的个数是实现定义的。

6、任何在一个有效字符中有所区别的标识符都是不同的标识符。如果两个标识符仅仅在非有效字符中不同,那么行为是未定义的。

6.4.2.2 预定义的标识符

语义

1、标识符__func__应该被翻译器隐式声明为就好比立即跟在每个函数定义的大括号后面出现,声明为:

static const char __func__ [] = "function-name";

这里,function-name是词法上封闭起来的函数名。[注:由于__func__名保留给使用任意使用(7.1.3),如果任何其它的标识符显式地使用名称__func__来声明,那么行为是未定义的。]

2、__func__被编码为好比已经把隐式的声明写在了源字符集中,然后被翻译到在翻译阶段5中所指明的执行字符集中。

3、例子:考虑以下代码片段:

#include <stdio.h>
void myfunc(void)
{
printf("%s\n", __func__);
/* ... */
}

每次这个函数被调用时,它将会打印到标准输出流:myfunc

ISO/IEC 9899:2011 条款6.4.2——标识符的更多相关文章

  1. ISO/IEC 9899:2011 条款6.2.1——标识符的作用域

    6.2.1 标识符的作用域 1.一个标识符可以表示一个对象:一个函数:一个结构体.联合体或枚举的一个标签或一个成员,一个typedef名:一个标签名:一个宏名:或一个宏形参.相同的标识符可以在程序中不 ...

  2. ISO/IEC 9899:2011 条款6.2.2——标识符的连接

    6.2.2 标识符的连接 1.在不同作用域中声明的一个标识符或在同一作用域多次出现的一个标识符可以被用作对同一个对象或函数的引用,通过一个称为连接的过程.[注:在两个不同的标识符之间没有连接.]有三种 ...

  3. ISO/IEC 9899:2011 条款6.2.3——标识符的名字空间

    6.2.3 标识符的名字空间 1.如果一个特定标识符的多个声明在一个翻译单元的任意一点可见,那么语法上下文会区分对不同实体的引用.从而,对于标识符各种不同的类别具有独立的名字空间: ——标签名(通过标 ...

  4. ISO/IEC 9899:2011 条款3——术语、定义与符号

    3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...

  5. ISO/IEC 9899:2011 条款5——5.2.1 字符集

    5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...

  6. ISO/IEC 9899:2011 条款6.4.3——通用字符名

    6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...

  7. ISO/IEC 9899:2011 条款5——5.1.2 执行环境

    5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...

  8. ISO/IEC 9899:2011 条款4——标准顺从

    4. 标准顺从 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为 ...

  9. ISO/IEC 9899:2011 条款6——语言

    6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...

随机推荐

  1. Linux命令——source

    参考:What does 'source' do? 前言 当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profil ...

  2. DNS服务——域名解析容错

    介绍 DNS服务至关重要,你我每天访问网站不可能是记忆IP地址.因此DNS服务器的可靠性至关重要.下面介绍DNS服务器容错机制,看图 为了防止DNS服务器故障不再提供服务,引入辅助DNS服务器.辅助D ...

  3. POI中的CellType类型以及值的对应关系

    POI 中的CellType类型以及值的对应关系 CellType 类型 值 CELL_TYPE_NUMERIC 数值型 0 CELL_TYPE_STRING 字符串型 1 CELL_TYPE_FOR ...

  4. 从Retrofit的源码来看 HTTP

    关于Retrofit是啥,这里就不多解释了,还是先来瞅下官网: 而这次主要是了解它的底层动作机制,而在了解底层之前先来回顾一下官网的整体使用步骤: 咱们也以官网的这个例子为例,先从简单的使用开始逐步深 ...

  5. Mybatis3.1-[tp_32-33]-_映射文件_select_resultMap关联查询_association分步查询_延迟加载

    笔记要点出错分析与总结 工程组织 1.定义接口 DepartmentMapper package com.dao; import com.bean.Department; public interfa ...

  6. 为什么要设置HTTP timeout?

    先看一个不设置timeout造成的线上事故. 一次线上事故 有一次生产上的一个服务出了点故障,一个原本每5分钟执行一次的定时任务突然不执行了.第一反应是任务执行报错,查看日志,却没有找到任何异常报错信 ...

  7. dos中查找端口的PID,并在任务管理器中处理端口

    本文来源https://www.cnblogs.com/lsyf/p/8979012.html 1.查看所有端口进程 首先点击开始菜单选择运行,接着在运行对话框中输入“cmd”,回车打开命令提示符窗口 ...

  8. 前端学习笔记--CSS入门

    1.css概述: 2.css语法: 3.css添加方法: 用单独的文件存储css样式的优点: 优先级: h3得到的样式是内嵌样式覆盖了外部样式. 4.css选择器 标签选择器: 类别选择器: ID选择 ...

  9. TCP,UDP,IP数据包的大小限制

    1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Da ...

  10. Latex快速注释掉多行

    最简单的方法就是选中你想要注释掉的内容,同时按住Ctrl+Alt+Shift+→