Change all the int type to another type using #define for large program
我想在程序中更改我的所有int类型,以支持任意位置整数。我选择使用GMP。
我正在考虑是否有可能做一个#define来取代所有int到mpz_class。
我从一个小程序开始
1 2 3 4 5 6 7
| #include <iostream>
#define int long long int
using namespace std;
int main(){
// .... code
} |
编译器已经开始抱怨main必须返回int类型。
是否可以向#define添加例外?或者这真是个坏主意?
- 听起来很危险。
- 不要这样做。使用typedef并将ints更改为使用它。否则所有的事情(头文件等,链接器问题)都会失败。
- 这是不明确的行为。我认为有关这一点的措辞"不正确"。嗯,你猜不到,但是翻译单位不应该定义或取消定义与关键字在词汇上相同的名称,以达到相同的目的?表3中列出的ER,或7.6中描述的属性标记。
- 您不一定要将所有"int"都更改为gmp"大整数"。你绝对不能用全局定义"alias"int。您最好的选择是手动搜索和替换(imho)。附加的好处:您可能会想出重构代码以本地化使用"大整数"的想法……
- 你想用这句话做什么define int long long int
- @克里斯:有些东西不能既不规则又不明确。
- @是的,这不是我的专业想法。
- 重新定义这样的基本类型将破坏使用该类型的任何API,包括您发现的main的API。别这样。编辑器通常具有全局查找/替换功能,您可以返回并修复引入的错误。
- 所以最好是手动操作,一个接一个地改变它们?如果我这样做的话,恐怕我会想念他们中的一些人
- @蒂莫泰昂:你一直坚持这样做,因为你没有提前考虑,也没有用typedef设计!
- 因此,正确的方法是使用typedef和type来表示一个通用词?所以下次我可以简单地更改typedef吗?
- @丁满琼-是的。也更能描述返回/参数类型
- @丁满琼:是的,我的意思是,不要用它或任何东西来超越最高点,但这似乎是一个相当不错的候选人。
- 下一个你将是所有的埃多克斯(6),它将是狗和猫生活在一起,集体歇斯底里!
- C++数据类型与C语言数据类型的可能副本
你是被禁止的,当且仅当A redefining关键字包括任何标准头文件。在这里,你是如此的程序包括III型。
否则,随便你!等等,不,不,这是愚蠢的,因为我很安静。
而不是使用一些代码,重构新型my_integer(所谓的,说,但一个多更好的名字):
然后,当你想更改到mpz_classint,你只是改变my_integer定义:
1
| typedef mpz_class my_integer; |
使用主没有这样的:int
1 2 3 4 5 6 7
| #include <iostream>
#define int long long int
using namespace std;
main(){
// .... code
} |
简单的回答:你不可能在技术上没有任何的#define保留标识符。