php 在编译时为啥是make test,而不是make?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 在编译时为啥是make test,而不是make?相关的知识,希望对你有一定的参考价值。
为什么make不能通过,但是make test能够通过?
make test通过以后 make clean然后你再make一下,正如楼上所说make test是为了保证你下载代码可以在你的环境下正确执行,多执行了测试这一步而已本问题已经过去很久,我回答的主要目的是希望,以后有人再有类似问题可以参考一下 参考技术A 是为了保证你下载代码可以在你的环境下正确执行,多执行了测试这一步而已。
为啥编译器不将此标记为错误而不是警告?
【中文标题】为啥编译器不将此标记为错误而不是警告?【英文标题】:Why is compiler not flagging this as an Error instead of warning?为什么编译器不将此标记为错误而不是警告? 【发布时间】:2012-07-08 21:06:48 【问题描述】:#include <iostream>
using namespace std;
class test
public:
test() cout<<"CTOR"<<endl;
~test() cout<<"DTOR"<<endl;
;
int main()
test testObj();
cout<<"HERE"<<endl;
输出:
HERE
编译器跳过“test testObj();”行并编译其余部分并发出警告,运行时将生成输出。警告是“在 VC++ 2008 中未调用原型函数(是否打算定义变量?)。为什么它不抛出错误?
【问题讨论】:
... 因为这不是错误。这是有效的代码。 那为什么那条线没有命中呢?可能我很困惑?上面的 sn-p 应该发生什么? @rocky:这是一个声明,不可执行。那么被“击中”是什么意思呢? @BenVoigt:好的。如何使用或初始化这个 testObj 变量? @rocky:在您的代码中,testObj
不是变量,而是函数。这就是警告告诉你的。
【参考方案1】:
因为这不是错误。
您的代码违反了most-vexing parse(总而言之,test testObj();
没有定义变量,它声明了一个函数)。
【讨论】:
这并不是您链接到的页面中描述的真正令人烦恼的解析。那将是test testObj(test());
。
对一个有:它应该告诉你什么?你的代码是 100% 正确的吗?另一方面:我很确定 Clang 在这种情况下会发出警告......(Clang >>> GCC)
@CharlesBailey:OP 只是一个更简单的例子,对吧?基本原则是它被解释为函数声明,而不是变量定义。
是的,它更简单,所以没有那么麻烦。 最令人烦恼的解析通常需要在初始化表达式周围使用额外的括号来消除歧义,这与此处所需的简单修复有点不同。
@CharlesBailey:我不知道,你的例子并不像我个人最喜欢的 std::vector<int> v(std::istream_iterator<int>(cin), std::istream_iterator<int>());
那样令人烦恼;-)【参考方案2】:
很简单,因为声明您声明的函数并不是错误。不过,警告应该足够有用。
【讨论】:
【参考方案3】:从 Main 中的构造函数调用中删除 ()
int main()
test testObj;
cout<<"HERE"<<endl;
【讨论】:
以上是关于php 在编译时为啥是make test,而不是make?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在直接初始化和赋值中传递 lambda 而不是复制初始化时会编译?
为啥 (false?A():B()).test() 只有 A 和 B 有子类关系时才能编译?
为啥我得到编译错误,“make_managed”不是“Gtk”的成员?