英语法语西班牙语

Ad


OnWorks 网站图标

c++decl - 云端在线

在 OnWorks 免费托管服务提供商中通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器运行 c++decl

这是命令 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)。 按 T​​AB 将
在光标前完成部分关键字,除非有多个可能
完成,在这种情况下,第二个选项卡将显示可能的完成列表和
重新显示命令行。 左右方向键和退格键可用于
以自然的方式编辑,向上和向下箭头键检索以前的命令行
从历史。 大多数其他熟悉的键,例如 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


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad