这是命令 c++decl,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
cdecl, c++decl - 组合 C 和 C++ 类型声明
概要
CDECL [-一个 | -+ | -p | -r] [-ciqdDV]
[[ 档 ...] | 说明 ... | 宣布 ... | 投 ... | 集 ... | 帮助 | ? ]
由 c++decl 发布 [-一个 | -+ | -p | -r] [-ciqdDV]
[[ 档 ...] | 说明 ... | 宣布 ... | 投 ... | 集 ... | 帮助 | ? ]
说明 ...
宣布 ...
投 ...
商品描述
解码器 (和 由 c++decl 发布) 是一个用于编码和解码 C(或 C++)类型声明的程序。
C 语言基于(提议的草案)X3J11 ANSI 标准; 可选地,C
语言可能基于 Kernighan & Ritchie 定义的 pre-ANSI 定义 这款 C
代码编程 语言选择 书,或由 Ritchie PDP-11 C 编译器定义的 C 语言。
C++ 语言基于 Bjarne Stroustrup 的 这款 C + +中 代码编程 语言选择,再加上
2.0 版增加了语言。
配置
-a 使用 C 语言的 ANSI C 方言。
-p 使用由 Kernighan & Ritchie 的书定义的 pre-ANSI 方言。
-r 使用 Ritchie PDP-11 C 编译器定义的方言。
-+ 使用 C++ 语言,而不是 C。
-i 以交互模式运行(从终端读取时的默认模式)。 这也是
打开提示、行编辑和行历史。
-q 安静提示。 在交互模式下关闭提示。
-c 创建可编译的 C 或 C++ 代码作为输出。 解码器 将在末尾添加一个分号
声明和一对大括号到函数定义的末尾。
-d 打开调试信息(如果已编译)。
-D 打开 YACC 调试信息(如果已编译)。
-V 显示版本信息并退出。
调用
解码器 可以在许多不同的名称下调用(通过重命名可执行文件,
或创建符号链接或硬链接)。 如果它被调用为 CDECL 那么 ANSI C 是
默认语言。 如果它被调用为 由 c++decl 发布 那么 C++ 是默认的。 如果被调用
作为 说明, 投或 宣布 然后它将解释命令行的其余部分
选项作为该命令的参数,执行该命令,然后退出。 它也会做
如果命令行上的第一个非开关参数是这三个命令之一。
输入也可能来自文件。
解码器 使用下面描述的语言读取语句的命名文件。 一种
从该语言转换为 C (C++) 或伪英语。 结果
这个转换写在标准输出上。 如果没有命名文件,或者文件名
遇到 ``-'' 时,将读取标准输入。 如果标准输入来自
终端,(或 -i 选项),在每次之前都会向终端写入提示
线。 提示可以关闭 -q 选项(或 集 不提示 命令)。 如果
CDECL 被调用为 说明, 宣布 or 投, 或者第一个参数是命令之一
下面讨论,参数列表将根据所示的语法进行解释
下面而不是作为文件名。
当它以交互方式运行时, CDECL 使用 GNU readline 库提供关键字
完成和命令行历史,非常像 打坏(1) (qv)。 按 TAB 将
在光标前完成部分关键字,除非有多个可能
完成,在这种情况下,第二个选项卡将显示可能的完成列表和
重新显示命令行。 左右方向键和退格键可用于
以自然的方式编辑,向上和向下箭头键检索以前的命令行
从历史。 大多数其他熟悉的键,例如 Ctrl-U 删除所有文本
光标回到行首,按预期工作。 之间有歧义
此 INT 和 成 关键字,但 CDECL 会猜你说的是哪一个,它总是猜
正确。
您可以使用 CDECL 当您使用类似的编辑器创建 C 程序时 vi(1)或 emacs的(1). 你
只需输入声明的伪英文版本并应用 CDECL 作为过滤器
到线。 (在 vi(1)、输入``!!cdecl''。)
如果 创建信息图 程序 选项 -c 使用后,输出将包括分号
函数声明后的变量声明和大括号对。
这款 -V 选项将打印出用于创建进程的文件的版本号。
如果源代码是在打开调试信息的情况下编译的,则 -d 选项将启用
它被输出。 如果源代码是在打开 YACC 调试信息的情况下编译的,则
-D 选项将使其能够被输出。
指挥 语言
该语言有六个语句。 这 宣布 语句组成一个 C 类型
来自详细描述的声明。 这 投 语句组成一个 C 类型转换为
可能出现在表达式中。 这 说明 语句解码 C 类型声明或
强制转换,产生详细的描述。 这 帮助 (或 ?) 语句提供了帮助
信息。 这 退出 (或 出口) 语句(或文件结尾)退出程序。 这 集
语句允许以交互方式设置命令行选项。 每个语句都是
以分号或换行符分隔。
同义词
声明期间允许使用一些同义词:
字符是字符的同义词
常量是常量的同义词
枚举是枚举的同义词
func 是函数的同义词
整数是 int 的同义词
ptr 是指针的同义词
ref 是参考的同义词
ret 是返回的同义词
结构是结构的同义词
向量是数组的同义词
TAB 补全功能只知道右栏中的关键字
结构,而不是左栏中的结构。 TAB 补全在以下情况下用处不大
不同关键字的前导字符相同(关键字与一个
另一个),将两列都放入会引起不少冲突。
语法
以下语法描述了该语言。 在语法中,“<>”中的词是非
终端,裸露的小写单词是代表自己的终端。 裸大写
单词是其他词汇标记:NOTHING 表示空字符串; NAME 表示 C 标识符;
NUMBER 表示一串十进制数字; NL 表示换行符或分号
字符。
::= 什么都没有
| NL
::= 什么都没有
| 将 NAME 声明为
| 宣布
| 将 NAME 投射到
| 投掷
| 解释
| 解释
| 解释 ( ) 可选-NAME
| 放
| 帮助 | ?
| 退出
| 出口
::= 数组
| 数组 NUMBER
| 函数返回
| 功能 ( ) 返回
| 指向
| 指向 NAME 类成员的指针
| 参考
|
::=
| *
| 姓名 :: *
| &
::= ( )
| ( )
| [ ]
| [ 数字 ]
| ( )
| 姓名
::= 什么都没有
| ( )
| ( ) ( )
| ( ) ( )
| ( )
| 姓名 :: *
| *
| &
| [ ]
| [ 数字 ]
::= |
|
| 结构名称 | 工会名称 | 枚举名称 | 班级名称
::= ,
|
|
::= ,
| 没有
|
|
| 作为
::= 整数 | 字符 | 双| 浮动| 空白
::= |
::= 短 | 长 | 未签名 | 签名 |
::= | 没有
::= 常量 | 易变| 别名
::= 自动 | 外部 | 注册 | 静止的
::= 什么都没有
::= 什么都没有
| 创建 | 不创建
| 提示| 不提示
| 里奇| 前 | 安西| 加加
| 调试 | 节点错误 | yydebug | 调试
设置 配置
这款 集 命令有几个选项。 你可以输入 集 or 集 选项 看
当前选择的选项和可用选项的摘要。 首先
四个对应 -a, -p, -r及 -+ 命令行选项,分别。
ansi 使用 C 语言的 ANSI C 方言。
普兰西
使用 Kernighan & Ritchie 的书定义的 pre-ANSI 方言。
里奇
使用 Ritchie PDP-11 C 编译器定义的方言。
加加
使用 C++ 语言,而不是 C。
[无]提示
在交互模式下打开或关闭提示。
[没有]创建
打开或关闭分号或花括号附加到声明
由输出 CDECL. 这对应于 -c 命令行选项。
[无]调试
打开或关闭调试信息。
[否]yy调试
打开或关闭 YACC 调试信息。
注意:调试信息和 YACC 调试信息只有在有
被编译成 CDECL. 最后两个选项对应于 -d 和 -D 命令行
选项,分别。 调试信息通常用于程序开发,以及
通常不会编译成分布式可执行文件。
示例
声明一个指向类似函数的指针数组 分配(3)、做
将 fptab 声明为指向函数的指针数组,返回指向 char 的指针
这个命令的结果是
字符 *(*fptab[])()
当你在别人的代码中看到这个声明时,你可以通过
做
解释 char *(*fptab[])()
正确的声明 信号(2),忽略函数原型,很容易在
CDECL的语言:
将信号声明为函数,返回指向返回 void 的函数的指针
产生
无效(*信号())()
结果的函数声明有两组空括号。 的作者
这样的函数可能想知道将参数放在哪里:
将信号声明为函数 (arg1,arg2) 返回指向返回 void 的函数的指针
提供以下解决方案(当与 -c 选项):
无效(*信号(arg1,arg2))(){}
如果我们想在函数原型中添加函数原型,例如
as _出口(2) 将声明为:
将 _exit 声明为函数(retvalue 为 int)返回 void
给予
无效_exit(int retvalue){}
作为使用函数原型的更复杂示例, 信号(2) 可以完全定义为:
将信号声明为函数(x 为 int,y 为指向 function(int) 返回 void 的指针)
返回指向 function(int) 的指针返回 void
给予(带 -c)
void (*signal(int x, void (*y)(int)))(int) { }
解码器 可以帮助找出放置“const”和“volatile”修饰符的位置
声明,因此
将 foo 声明为指向 const int 的指针
给
常量 int *foo
而
将 foo 声明为指向 int 的 const 指针
给
int * 常量 foo
C++声明 可以帮助声明引用,因此
将 x 声明为对字符指针的引用
给
字符 *&x
C++声明 可以帮助指向类成员的指针,从而声明一个指向
类 X 的整数成员
将 foo 声明为指向类 X int 成员的指针
给
整数 X::*foo
和
将 foo 声明为指向 X 类函数成员的指针 (arg1, arg2) 返回指针
Y级
给
类 Y *(X::*foo)(arg1, arg2)
诊断
声明、转换和解释语句试图指出不属于
在 C 中支持。在某些情况下,会猜测真正的意图。 在这些
在这种情况下,C 结果是一个玩具声明,其语义仅适用于 Algol-68。 这
不受支持的 C 构造列表取决于正在使用的 C 语言版本
使用(参见 ANSI、pre-ANSI 和 Ritchie 选项)。 支持的 C++ 结构集
是 ANSI 集的超集,除了 别名 关键词。
参考文献:
ANSI 标准 X3.159-1989 (ANSI C)
ISO/IEC 9899:1990(ISO 标准)
comp.lang.c 常见问题
http://www.eskimo.com/~scs/C-faq.top.html
内的 C 参考手册的第 8.4 节 这款 C 代码编程 语言选择 通过 B. Kernighan &
D. 里奇。
C++ 参考手册的第 8 节 这款 C + +中 代码编程 语言选择 由 B。
斯特劳斯特鲁普。
洞穴
伪英语语法过于冗长。
有大量的语义检查没有完成。
解码器 是在ANSI C标准完成之前写的,没有尝试过
使其保持最新状态。 尽管如此,它非常接近标准,具有明显的
的例外 别名.
解码器的范围故意很小。 它不能帮助您弄清楚初始化。 它
期望存储类位于声明的开头,然后是
const、volatile 和 noalias 修饰符,后跟变量的类型。 解码器
对可变长度参数列表一无所知。 (这包括``,...''
句法。)
解码器 认为您所说的所有声明都将用作外部定义。
C 中的一些声明上下文允许比这更大的灵活性。 这方面的一个例子是:
将 argv 声明为字符数组的数组
哪里 CDECL 回应
警告:在 C 中不受支持——“未指定大小的内部数组”
(也许你的意思是“指针数组”)
字符 argv[][]
暂定支持 别名 关键字被放入,因为它在 ANSI 草案中
规格。
作者
最初由 Graham Ross 编写,由 David Wolverton、Tony Hansen 改进和扩展,
和梅林·勒罗伊。
David R. Conrad 的 GNU readline 支持和 Linux 端口,[电子邮件保护]>
使用 onworks.net 服务在线使用 c++decl