C/C++开发工具MazuCC、CIDLib、clipp、gft4c介绍

以下为你介绍的C/C++开发工具都可用在Linux系统上:MazuCC(微型C编译器)、CIDLib(C++开发平台)、clipp(C++ 命令行界面)、gft4c(生成函数声明列表工具)。

1、MazuCC(微型C编译器)

Mazucc 是一个最低限度的C编译器,具有x86_代码生成功能。它旨在支持部分C99语言功能,同时尽可能保持代码的小和简单。灵感来自于 8cc。

构建:

$ make

MazuCC 包含单元测试,使用如下命令进行测试:

$ make check

MazuCC 支持 GNU/Linux 和 MacOS。

使用 MazuCC 编译 C 代码:

$ ./mzcc < sample/nqueen.c

将生成 AT&T 语法格式的 x86_64 汇编:

$ ./mzcc < sample/nqueen.c > sample/nqueen.s

$ gcc -no-pie -o sample/nqueen sample/nqueen.s

如果是 MacOS 系统,则可忽略 --no-pie 参数。

参考输出,如下图所示:

C/C++开发工具MazuCC、CIDLib、clipp、gft4c介绍

你也可以查看内部抽象语法树:

echo 'struct {int x; char y; struct { int t; } z; } a;' | ./mzcc --dump-ast

输出内容:

(decl (struct (int)

 (char)

 ((struct (int)))) a)

执照:

根据BSD 2条款许可,MazuCC可自由重新分发。此源代码的使用受BSD样式的许可证约束,可以在LICENSE文件中找到该许可证。

下载地址:https://github.com/jserv/MazuCC

2、CIDLib(C++开发平台)

CIDLib 是一个 C++ 开发平台。对于许多 C++ 开发人员来说,参考点可能与 Qt 产品类似,即用于创建全功能 C ++ 应用程序的全套通用工具和类。主要区别在于 CIDLib 并非基于标准 C++ 库。

CIDLib 包含大约 1100 个类(约 450,000 行代码)。以下是它提供的功能类型的粗略列表:

构建工具、项目定义系统、资源编译器、可加载文本系统。

'Virtual Kernel' 平台可移植层。

全套标准库(包括流、集合/游标、内存缓冲区、字符串、事件、互斥体、套接字、线程/进程、串行端口、URL、UPnP、安全套接字、音频流、语音识别、数字音频提取、medatada 提取、文本转码、日志记录、发布/订阅、PNG、JPEG、位图、分块文件、ODBC 等)。

各种标准的自定义实现,如 PNG、zLib、WebSockets、HTTP、SMTP、Blowfish、AES、MD5、SHA-X、正则表达式、XML、JSON 等。

一个相当广泛的窗口和“常规图形”框架(还没有 3D 图形)

一个非常强大的 ORB(对象请求代理)、IDL 编译器和一组标准服务器(名称,日志记录和配置)。

一种可嵌入的,基于虚拟机的 OO 语言引擎,称为 CML(解析器、VM、运行时库)。

用于 CML 编辑和调试的可嵌入 IDE。

一个简单但好用的对象存储引擎(用于应用程序配置存储等等,上面提到的配置服务器使用的)。

一个不错的测试框架。

文件打包系统。

下载地址:https://github.com/DeanRoddey/CIDLib

3、clipp(C++ 命令行界面)

clipp 是一个现代 C++ 的命令行界面。它易于使用,功能强大,支持 C++ 11/14/17,且项目仅集成在单个头文件中的。

功能支持选项、选项+值、文档路径值、位置命令、嵌套替代、决策树、可连接标志、自定义值过滤等,此外还有文档生成(使用行、手册页)与错误处理。

简单使用示例:

以这个命令行界面为例:

概要:

convert <input file> [-r] [-o <output format>] [-utf16]

选项:

-r, --recursive:递归转换文件。

-utf16:使用UTF-16编码。

代码定义了 input file 和三个选项:-r、-o 和 -utf16。如果解析失败,默认使用文档页代码片段将打印到 stdout。

#include <iostream>

#include "clipp.h"

using namespace clipp; using std::cout; using std::string;

int main(int argc, char* argv[]) { 

bool rec = false, utf16 = false;

string infile = "", fmt = "csv";

auto cli = (

value("input file", infile),

option("-r", "--recursive").set(rec).doc("convert files recursively"),

option("-o") & value("output format", fmt),

option("-utf16").set(utf16).doc("use UTF-16 encoding")

);

if(!parse(argc, argv, cli)) cout << make_man_page(cli, argv[0]);

// ...

}

下载地址:https://github.com/muellan/clipp

4、gft4c(生成函数声明列表工具)

功能说明:

gft4c是一款为C语言开发者提供的小工具。用来为C语言程序生成函数声明列表。

比如,我们有c源码文件如下:

spx_private void do_something1(int varg1,int varg2){

//some code 

}

spx_private void do_something2(int varg1,int varg2){

//some code 

}

spx_private void do_something3(int varg1,int varg2){

//some code 

}

spx_private void do_something4(int varg1,int varg2){

//some code 

}

spx_public void do_something5(int varg1,int varg2){

//some code 

}

spx_public void do_something6(int varg1,int varg2){

//some code 

}

spx_public void do_something7(int varg1,int varg2){

//some code 

}

然后根据c语言函数的特性,必须先声明再使用。故一般我们都会在c文件的开头,最后一行#include的下面声明函数,如上面的代码,声明函数列表如下:

spx_private void do_something1(int varg1,int varg2);

spx_private void do_something2(int varg1,int varg2);

spx_private void do_something3(int varg1,int varg2);

spx_private void do_something4(int varg1,int varg2);

而在h文件中,声明公共的函数,如下:

spx_public void do_something5(int varg1,int varg2);

spx_public void do_something6(int varg1,int varg2);

spx_public void do_something7(int varg1,int varg2);

在实际开发中,一般函数声明需要我们一个一个的重新写或者是从写好的函数签名copy过去,再或者是到#include行下面写一行函数声明,再到文件下方写函数定义。不管使用哪种方法,都会显得哼繁琐。然后gft4c即为此而生。

gtf4c提供了开发者安心写函数定义,然后使用gft4c命令GenFuncTitle即可在c文件的最后一个#include行下面生成函数声明。

使用方法:

确保vim支持python,若不确定,请查看相关vim安装时的扩展。

使用任一一种vim插件包管理器,将此插件安装到本地,如使用vundle,在vimrc中请加入'Plugin 'xvhfeng/gft4c''。

在vim中运行明白BundleInstall,将自动安装此扩展。

安装完毕,重启vim。

打开任一c文件,执行命令:GenFuncTitle,即可看到在#include行下面已经生成的函数声明列表。

注意:私有函数列表和公有函数列表都会在c文件中生成,因为.h文件不一定和c文件在同一目录下,所以请开发者执行将公有函数列表copy到h文件中。

生成函数列表的时候不会区分已经存在的函数声明,故需要注意。

配置:

gft4c的配置只有2个,分别是g:spkx_private和g:spkx_public。这2个配置配置项如下:

g:spkx_private:配置函数为私有的起始标志位,默认为static或者是spx_private,不能为空。

g:spkx_public:配合函数为公有的起始标志位,默认为spx_public,不能为空,说明: spx_private和spx_public都是自定义的宏,定义分别如下:

#define spx_private static

#define spx_public

下载地址:https://github.com/xvhfeng/gft4c

注明

以上就是C/C++开发工具MazuCC、CIDLib、clipp、gft4c的介绍内容,这些C/C++开发工具都能使用在Linux操作系统中。

栏目相关文章