【发布时间】:2014-09-27 13:29:12
【问题描述】:
在使用 G++ 时,可以这样编写程序:
main() {
// Something
}
而且它确实有效。当使用-Wall 选项时,它会产生一个警告:
$ g++ -Wall -o test test.cpp
test.cpp:1:6: warning: ISO C++ forbids declaration of ‘main’ with no type [-Wreturn-type]
main() {
^
但是,基本上,它是有效的。但它不适用于 Clang:
$ clang++ -o test test.cpp
test.cpp:1:1: error: C++ requires a type specifier for all declarations
main() {
^~~~
1 error generated.
这是我的问题:有什么方法可以强制 Clang 表现得像 G++,即允许 main() 没有返回类型?
另外,这里解释一下原因:在一些算法竞赛中,做 显然,将这些信息放在这里会提出一个问题“为什么 #define int long long 很方便——它只是将所有整数替换为长整数,所以整数溢出基本上没有问题(你不需要记住它 => 当你的时间有限时,你不会浪费时间来调试你的程序)。当然,你不能写long long main(),所以在使用GCC的时候你可以写main(),就可以了。我要问的是“如果你更喜欢 Clang 而不是 GCC”。#defines 不好,为什么参赛者是白痴”而不是“有没有办法强制 Clang 接受 main() 没有返回类型的函数声明...
【问题讨论】:
-
#define int long long- 这太残忍了;请不要那样做!这就是typedefs 的用途。 -
@Oli 编程参赛者通常会做这样可怕的事情来节省打字时间。
#define vpll std::vector<std::pair<long, long>>等等。 -
@Cicada:坦率地说,他们是白痴。
typedef不会少打字,而且会更安全! -
@m4tx:重新编辑。你有一个XY problem,因此是 cmets。您的实际问题是“我如何简洁地修改我的计算类型?”,而不是“我如何强制 Clang 忽略缺少的返回类型?”。
-
本着您的实践精神,
#define main int main怎么样? :)