标签: compilation

gcc -Wshadow太严格了?

在以下示例中:

class A
{
  public:
    int len();
    void setLen(int len) { len_ = len; } // warning at this line
  private:
    int len_;
};
Run Code Online (Sandbox Code Playgroud)

gcc with -Wshadow发出警告:

main.cpp:4: warning: declaration of `len' shadows a member of `this'
Run Code Online (Sandbox Code Playgroud)

函数len和整数len是不同类型的.为什么警告?

更新

我看到"阴影"的含义是广泛的.从形式上看,编译器也完全符合它的含义.

不过恕我直言,这面旗帜并不实用.例如常用的setter/getter成语:

class A {
   void prop(int prop);  // setter
   int prop() const;     // getter

   int prop;
};
Run Code Online (Sandbox Code Playgroud)

如果有一个警告标志不会在这种情况下发出警告会很好,但会在"int a"隐藏"int a"的情况下发出警告.

添加-Wshadow对我的遗留代码发出大量警告,同时我不时发现由"阴影"问题引起的错误.

我不介意它会被称为"-Wmuch_more_practical_and_interesting_shadow"或"-Wfoooooo".

那么,是否有其他 gcc警告标志符合我的描述?

更新2

不仅我认为-Wshadow不知何故没有用的链接文本.我并不孤单:)不太严格的检查可能会更有用.

c++ gcc compilation

16
推荐指数
5
解决办法
2万
查看次数

零分配与xor,第二个真的更快?

有人在几年前向我展示了以下命令将变量归零.

xor i,i
Run Code Online (Sandbox Code Playgroud)

他告诉我,这比为它分配零要快.这是真的吗?编译器是否进行优化以使代码执行此类操作?

assembly compilation

16
推荐指数
2
解决办法
4702
查看次数

在Windows x64上编译Python模块

我正在开始一些文字处理项目,我需要NumPy和NLTK.这是我第一次了解easy_install以及如何将新的python模块编译到系统中.

我有Python 2.7 x64加VS 11和VS 12.还有Cygwin(我猜的最新版本).我可以在使用VS编译的文件中看到它使用与编译python代码的版本相同的版本查找VS env,为什么?当我硬编码11.0这是我的版本时,numpy无法建立几个奇怪的错误vcvarsall(它发现vcvarsall,可能误用了它).

我不能在Windows上构建python二进制文件吗?如果没有,我可以在Linux for Windows上交叉编译吗?(使用与Google相同的Android SDK方法)

python compilation visual-studio windows-7-x64 python-2.7

16
推荐指数
2
解决办法
2万
查看次数

Javac"找不到符号"

我有这样的根目录:

??? classes
??? src
    ??? vehicles
        ??? Bicycle.java
        ??? BicycleMain.java
Run Code Online (Sandbox Code Playgroud)

Bicycle.java

package vehicles;

public class Bicycle {

  public int cadence;
  public int gear;
  public int speed;

  public Bicycle(int startCadence, int startSpeed, int startGear) {
    gear = startGear;
    cadence = startCadence;
    speed = startSpeed;
  }

  public void setCadence(int newValue) {
      cadence = newValue;
  }
  public void setGear(int newValue) {
    gear = newValue;
  }
  public void setSpeed(int newValue) {
    speed = newValue;
  }
  public int getGear() {
    return gear;
  }
  public …
Run Code Online (Sandbox Code Playgroud)

java compilation javac command-line-interface

16
推荐指数
2
解决办法
6万
查看次数

如何使用clang ++与-std = c ++ 11 -Weverything -Werror

我想编译以下文件(temp.cpp):

#include <iostream> 

class Foo {
public:
  Foo() = default;
};

int main(){
  std::cout << "Works!" << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用以下命令: clang++ temp.cpp -o temp -std=c++11 -Weverything -Werror

有一个错误:

temp.cpp:5:11:错误:默认函数定义与C++ 98不兼容[-Werror,-Wc ++ 98-compat]

我知道有一个类似c ++ 98-compat的警告,它是一切的一部分.如何启用除c ++ 98-compat之外的所有警告?-Weverything是否有c ++ 11兼容标志?

c++ compilation clang compiler-warnings c++11

16
推荐指数
1
解决办法
6157
查看次数

SBT在编译后应用任务

我能够在编译之前自动执行任务:

compile in Compile <<= (compile in Compile).dependsOn(myTask)
Run Code Online (Sandbox Code Playgroud)

如何编译做同样的事情?

我知道我能做到:

compile in Compile <<= (compile in Compile) map{x=>
  // post-compile work
  doFoo()
  x
}
Run Code Online (Sandbox Code Playgroud)

执行任意Scala代码,但我需要在编译事件发生时自动执行目标任务

做类似的事情:

val foo = TaskKey[Unit]("foo", "...")
val fooTask = foo <<= scalaInstance map {si =>
...
} dependsOn(compile in Compile)
Run Code Online (Sandbox Code Playgroud)

如果我从sbt>提示符输入"foo",则可以正常工作; 即任务在编译后执行,但目标是挂钩到编译任务本身,因此无论何时编译发生,foo任务在编译完成后自动调用.

这是可能的,还是我以错误的方式处理内置编译任务?

scala compilation task sbt

16
推荐指数
1
解决办法
3838
查看次数

libtool错误在Ubuntu 13.04上构建thrift 0.9.1

在Ubuntu 13.04上构建thrift 0.9.1(支持C,C++,java,C#,perl,python)我收到此错误.

./configure运行没有任何选项,运行没有任何选项...

Making all in test
make[2]: Entering directory `/home/dvb/sw/thrift-0.9.1/test'
Making all in nodejs
make[3]: Entering directory `/home/dvb/sw/thrift-0.9.1/test/nodejs'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/dvb/sw/thrift-0.9.1/test/nodejs'
Making all in cpp
make[3]: Entering directory `/home/dvb/sw/thrift-0.9.1/test/cpp'
Makefile:832: warning: overriding commands for target `gen-cpp/ThriftTest.cpp'
Makefile:829: warning: ignoring old commands for target `gen-cpp/ThriftTest.cpp'
/bin/bash ../../libtool --tag=CXX   --mode=link g++ -Wall -g -O2 -L/usr/lib   -o libtestgencpp.la  ThriftTest_constants.lo ThriftTest_types.lo ../../lib/cpp/libthrift.la -lssl -lcrypto -lrt -lpthread 
libtool: link: ar cru .libs/libtestgencpp.a .libs/ThriftTest_constants.o .libs/ThriftTest_types.o 
ar: …
Run Code Online (Sandbox Code Playgroud)

c++ compilation thrift

16
推荐指数
3
解决办法
8537
查看次数

如果条件失败,表达式太复杂

我有条件声明声称'表达太复杂,无法在合理的时间内解决.如果我的条件中包含大约5个包含语句,则它将失败并显示该错误.这似乎不应该在编译时发生,因为声明并不是那么复杂.这是其他人遇到过的错误吗?除了分裂我的条件之外,还有其他解决方案吗?

else if(
                contains(JSONDict.keys.array, "id") &&
                contains(JSONDict.keys.array, "part_number") &&
                contains(JSONDict.keys.array, "sales_part_number") &&
                contains(JSONDict.keys.array, "include_in_search") &&
                contains(JSONDict.keys.array, "description") &&
                contains(JSONDict.keys.array, "brand") &&
                contains(JSONDict.keys.array, "product_group") &&
                contains(JSONDict.keys.array, "product_design") &&
                contains(JSONDict.keys.array, "material") &&
                contains(JSONDict.keys.array, "line") &&
                contains(JSONDict.keys.array, "unit_of_mass") &&
                contains(JSONDict.keys.array, "coating") &&
                contains(JSONDict.keys.array, "pcs_converstion") &&
                contains(JSONDict.keys.array, "appRim") &&
                contains(JSONDict.keys.array, "appSegment") &&
                contains(JSONDict.keys.array, "series") &&
                contains(JSONDict.keys.array, "product_application")
                ){

            }
Run Code Online (Sandbox Code Playgroud)

xcode if-statement compilation swift

16
推荐指数
1
解决办法
1万
查看次数

在构建Go程序以便发布时,使用"go build"是标准做法吗?

在构建Go程序以供发布时,标准做法是在go build没有任何其他选项的情况下使用吗?我问,因为go build默认情况下包含使用所有调试信息的构建.要删除它,您可以将选项传递给链接器,因此:

go build -ldflags "-w" prog.go
Run Code Online (Sandbox Code Playgroud)

这省略了所有调试符号.在构建发布程序时,您是删除此信息还是保留原样?

编辑:为了清楚起见,我想知道人们如何编译Go程序以部署到实时环境.在其他编译语言中,您有一组不同的编译器命令行选项用于调试和发布版本,发布版本通常会优化可执行文件并删除调试信息.

release compilation go

16
推荐指数
1
解决办法
2274
查看次数

不应该decltype触发器编译其参数?

所以我很困惑这是如何工作的.鉴于:

template <typename T>
int foo(T t) { t.foo(); }
Run Code Online (Sandbox Code Playgroud)

似乎这个调用应该失败:

decltype(foo(int{ 13 })) fail = 42;

cout << fail << endl;
Run Code Online (Sandbox Code Playgroud)

相反它只是打印:

42

它以我可访问的所有编译器的方式工作.这是正确的行为吗?我请求C++标准的引用.

c++ templates compilation decltype language-lawyer

16
推荐指数
2
解决办法
531
查看次数