问题标题: 《 魔 改 版 C + + 》

2
2
已解决
薛乘志
薛乘志
初级启示者
初级启示者

我用define对c++做了一些魔改,它现在变成了这样:

#include <bits/stdc++.h>

#define using(ns) using namespace ns;
using(std);
#define begin(code) main(){code;return 0;}
#define var(type,names...) type names
#define array(type,name,number) type name[number]
#define function(type,name,code,args...) type name(args){code;}
#define for(type,name,ed) for(type name=0;name<ed;name++)
#define input(data) std::cin>>data;
#define inputf(format,data) std::scanf(format,data)
#define print(data) std::cout<<data;
#define printf(format,data) std::printf(format,data)

function(int, jia,
    return a + b,
var(int, a), var(int, b))

begin(
    var(int, n, sum = 0);
    input(n);
    array(int, a, 1000);
    for(int, i, n){
        input(a[i]);
        sum += a[i];
    }
    print(jia(n, sum));
)

而且编译能成功就很离谱 


0
已采纳
王牌工作室官方
王牌工作室官方
新手光能
新手光能
#define begin

那个地方是不是要加一个int,不是main(),是int main()

0
0
0
0
王牌工作室官方
王牌工作室官方
新手光能
新手光能

吓得我反手就是一个收藏

0
王牌工作室官方
王牌工作室官方
新手光能
新手光能

第9行是不是无限递归......

王牌工作室官方在2022-02-25 12:43:12追加了内容

function多了个分号,并且只能写一条语句,还不如Lambda

王牌工作室官方在2022-02-25 12:44:29追加了内容
#define function(type,name,code,args...) auto name=[](args)->type{code}

请自行写分号

0
吴庞茂旭
吴庞茂旭
资深光能
资深光能
/*
NAME:Cc++ (Chinese C++)
NODE/TIPS:NONE
*/
//std
#include <bits/stdc++.h>
#include <windows.h>
#define int long long 
using namespace std;
string code;
map<string,string> ctoe;//翻译连接
map<string,string> ini;//变量连接
vector<string> box;//存储已有的可替换串 
string itos(int n){
    string s="";
    while(n){
        s=char(n%10+'0')+s;
        n/=10;
    }
    return s;
}
string getname();//给变量取名 
void inte();//处理Cc++中的变量、函数问题 
void build(); 
void repet();
void nice();//去掉行首的空格 
void fh();//添加分号 
signed main(){
    build();
    string c;
    while(getline(cin,c)){
        if(c=="END")break;
        code+=" "+c+"\n";
    }
    inte();
    repet();
    fh();
    cout<<code;
    return 0;
}
string getname(){
    static int n=1;
    return "v"+itos(n++);
}
void inte(){
    int p1=code.find("#");
    int p2=code.find("#",p1+1);
    while(p1!=-1&&p2!=-1){
        //中间一定就是变量了
        string s=code.substr(p1+1,p2-p1-1);
        if(!ini.count(s))ini[s]=getname();//取名 
        code.replace(p1,p2-p1+1,ini[s]);
        p1=code.find("#",p2+1);
        p2=code.find("#",p1+1);
    }
} 
void build(){
    //存储
    box.push_back(" 导入"); 
    box.push_back(" 标准库"); 
    box.push_back(" 扩展库"); 
    box.push_back(" 微软库"); 
    box.push_back(" 命名空间为"); 
    box.push_back(" 标准空间"); 
    box.push_back(" 宏定义"); 
    box.push_back(" 替换为");  
    //头文件集成
    ctoe[" 导入"]="#include";
    ctoe[" 标准库"]="<bits/stdc++.h>"; 
    ctoe[" 扩展库"]="<conio.h>"; 
    ctoe[" 微软库"]="<windows.h>"; 
    ctoe[" 命名空间为"]="using namespace ";
    ctoe[" 标准空间"]="std";
    ctoe[" 宏定义"]="#define";
    ctoe[" 替换为"]=""; 
}
void repet(){
    for(int i=0;i<box.size();i++){
        string c=box[i];
        int p=code.find(c);
        while(p!=-1){
            code.replace(p,c.size(),ctoe[c]);
            p=code.find(c,p+ctoe[c].size());
        }
    }
}
void nice(){
    int p1=0;
    while(p1!=-1){
        if(code[p1])
    }
} 
void fh(){
    /* TODO (#1#): 在句末添加分号 */
    int p1=0,p2=code.find("\n");
    while(p2!=-1){
        if(code[p1]!='#'&&code[p1]!='/'&&code[p2-1]!='{'){//这类情况是不需要添加分号的
            code.insert(p2,";"); 
        }
        cout<<code<<endl;
        p1=p2+2,p2=code.find("\n",p2+1);
    }
}
//Cc++演示
导入 标准库
导入 微软库
导入 扩展库
宏定义 #Cc++# 替换为 good
命名空间为 标准空间

END

使用下面的样例试试?

0
刘英杰
刘英杰
新手天翼
新手天翼

朕思来想去,一切就在这六个字母

———

|pascal|

———

我要回答