在C ++源代码中应进行哪些修改以生成显示功能和运算符名称的控制流程图?

问题描述

我有一个C ++程序可以将CFG演示文稿构建为png文件:

#include <iostream>
#include <array>
#include <string>
#include <cstring> 

int partitionFunc(std::string &str,int startInd,int endInd)
{   
    int primIndex = startInd;
    int pivotVal = str[endInd];
    for(int i = startInd; i < endInd; i++) {
         if(str[i] <= pivotVal) {             
             char tempIn = str[i];             
             str[i] = str[primIndex];             
             str[primIndex] = tempIn;             
             primIndex++; 
         }
    }

    char tempOut = str[primIndex];
    str[primIndex] = str[endInd]; 
    str[endInd] = tempOut;
    
    return primIndex;
}

void runQsort(std::string &str,int endIndex)
{
    if(startInd < endIndex) {        
        int primIndex = partitionFunc(str,startInd,endIndex);        
        runQsort(str,primIndex - 1);        
        runQsort(str,primIndex,endIndex);        
    }
}

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

       
    std::array<std::string,6> verbs = { "alternative","destination","airlines","turbulence","contribution","ultimate" };      
    
    std::string selected; 
    int option = 14;
    int endIndex;

    switch (option)
    {
        case 1:            
            selected = verbs[0];            
            break;
        case 2:
            selected = verbs[1];             
            break;
        case 3:
            selected = verbs[2];              
            break;
        case 4:
            selected = verbs[3]; 
            break;
        case 5:
            selected = verbs[4];            
            break;   
        default:
            selected = verbs[5];            
            break;            
    }  
      
    runQsort(selected,selected.length() - 1);

    int x = 0;

    while(x < selected.length()) {        
        std::cout << selected[x];         
        x++;
    }

    std::cout << std::endl;

    return 0;
}

要对此进行可视化,我将使用clang++llvm处理整个代码以将源解析为dot格式:

clang -emit-llvm main.cpp -c -o main.bc
opt --dot-cfg-only main.bc 

最后,将执行此命令以将图形视为流程图:

dot -Tpng .main.dot -o main.png

我苦苦挣扎的问题是,在缺少功能和运算符的情况下,输出文件中出现了百分比字符:

trash22

仅区分源块中存在的特定块还不够。我会消除那些令人尴尬的字符,因为它们会被放在cpp文件中的标识符中看到。为此必须添加哪些说明(或者可以建议使用哪些资源来对此主题有所了解)?如果适当地编辑了源代码之后,我可以继续使用clang++/llvm进行解析。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...