王逗比666 发表于 2020-6-12 00:20:10

各位大佬,有没有办法能把c++的关键字禁用

如题,解释一下就是如果我宏定义了int成itn,然后我想只能用itn定义整型,用int会报错,请问这个能做到吗

人造人 发表于 2020-6-12 00:33:28

恐怕是不行,至少在我的所学范围内做不到

人造人 发表于 2020-6-12 00:38:24

这样算吗?
#include <iostream>

typedef int itn;

#define int int_delete

itn main() {
    //int val = 100;
    itn val = 100;
    std::cout << val << std::endl;
    return 0;
}

王逗比666 发表于 2020-6-12 01:39:15

人造人 发表于 2020-6-12 00:38
这样算吗?

emmmm,一看直接超纲,我试试吧

王逗比666 发表于 2020-6-12 01:43:23

人造人 发表于 2020-6-12 00:38
这样算吗?

可是这样int还是不可以被禁用,看来是不可以了,谢谢大佬

CodingCat_k 发表于 2020-6-12 08:40:09

int禁用顶多是让它无效,关键就是用同名宏欺骗编译器;让代码在预处理阶段就产生错误。
如果想增加移植性就把这个宏整理成头文件,每次编译自己加
但是语言的基本数据类型不可能删掉的,就比如汇编的BYTE WORD等等类型;删掉了软硬件交互那不就歇菜了。
可以看看用开关宏(一种冷门的宏操作),最佳答案楼原理也是同名宏;具体实现见下面的代码
//为了int仍可以使用,提前找好替代_32INT
typedef int_32INT;

//方案一:通过续行符\欺骗编译器,不然下面的开关功能不可操作
#define int /\
/int
//方案二:直接同名宏;后续什么也不加;宏展开阶段就会产生错误的代码,大概是int a = 0;展开成a = 0;
#define int

_32INT
main (void)
{
   int a = 66;//使用上述两种方案都必定报错a未定义
   _32INT b = 99;
       
       return b;
}

王逗比666 发表于 2020-6-12 11:50:44

CodingCat_k 发表于 2020-6-12 08:40
int禁用顶多是让它无效,关键就是用同名宏欺骗编译器;让代码在预处理阶段就产生错误。
如果想增加移植性 ...

用了这个方法后报错说c++不支持默认int

王逗比666 发表于 2020-6-12 11:53:22

CodingCat_k 发表于 2020-6-12 08:40
int禁用顶多是让它无效,关键就是用同名宏欺骗编译器;让代码在预处理阶段就产生错误。
如果想增加移植性 ...

刚刚把typedf放错地方了,现在可以运行成功了,谢谢大佬
页: [1]
查看完整版本: 各位大佬,有没有办法能把c++的关键字禁用