小编use*_*130的帖子

有没有人成功构建了Cygwin版本的GHC?

有没有人成功构建了Cygwin版本的GHC(因为Haskell从使用Cygwin切换到MinGW)?

来自haskell网站:

"GHC的目标是MinGW,而不是Cygwin.原则上可以构建GHC的版本,GHC-cygwin,而不是针对Cygwin.GHC-cygwin的最重要的一点是GHC-cygwin编译的Haskell程序可以导入( Haskell)Posix库.我们不支持GHC-cygwin;它超出了我们的资源." https://ghc.haskell.org/trac/ghc/wiki/Building/Platforms/Windows

我尝试使用Cygwin的configure/gcc构建,但未成功.这失败是因为我无法让Windows版本的GHC使用Cygwin的gcc.这似乎是因为Windows的GHC版本被"注册"并且无法输出c代码.此外,不再支持这种"取消注册和移植"方法.

如果有人完成了这个(因为Haskell从使用Cygwin切换到MinGW),我真的很想知道.关于如何做到这一点的说明将是伟大的,但如果有人已经完成了这一点,简单的"是"将是非常宝贵的.

我最近的尝试是MinGW/MSys的交叉编译标志 --target=i386-unknown-cygwin32.这是结果错误:

HSC2HS libraries/haskeline/dist-install/build/System/Console/Haskeline/Backend/Win32.hs
libraries\haskeline\System\Console\Haskeline\Backend\Win32.hsc:169 
directive let cannot be handled in cross-compilation mode
make[1]: *** [libraries/haskeline/dist-install/build/System/Console/Haskeline/Backend/Win32.hs] Error 1 make: *** 
[all] Error 2
Run Code Online (Sandbox Code Playgroud)

由于程序需要链接,cygwin1.dll我不认为将目标设置为Linux体系结构会很有用.

gcc cygwin haskell mingw ghc

11
推荐指数
0
解决办法
1128
查看次数

为什么Visual Studio 2010调试器不能看到静态const类成员?

这个问题与此后提出的问题密切相关.

Stroustrup 在这里描述了定义类内常量的方法.

当我按照Stroustrup的方法时,我看到了预期的结果.但是,在Visual Studio 2010中,调试器无法解析static const该类范围内的类成员.这就是我的意思:

#include <iostream>

class Foo {
   public:
    static const int A = 50;
    char arr[A];
    void showA();
};

void Foo::showA() {
    std::cout << "showA = " << A << "\n";
}

int main() {
    Foo f;
    f.showA();
}
Run Code Online (Sandbox Code Playgroud)

当调试器在showA()中时,"监视"窗口报告:

Error: Symbol "Foo::A" not found
Run Code Online (Sandbox Code Playgroud)

我想强调该程序的行为符合预期,即输出为:

showA = 50
Run Code Online (Sandbox Code Playgroud)

并且程序返回0.

其他人可以用Visual Studio 2010重现这个吗?这是调试器中的错误吗?

c++ compiler-construction gcc debuggervisualizer visual-studio

8
推荐指数
2
解决办法
4549
查看次数

是否有任何标准机制或约定来防止Bash环境变量名称冲突?

此站点http://www.tldp.org/LDP/abs/html/gotchas.html#PARCHILDPROBREF表示脚本无法更改其父项的环境变量.

因此,(除非脚本来源)脚本不能在其父环境中意外更改巧合命名的环境变量.

但是,如果程序依赖于它声明的环境变量,则可能发生命名空间冲突.

例如,假设我不知道vim使用环境变量名称"VIMRUNTIME".而且,巧合的是,我碰巧将这个环境变量名称用于我自己的,不相关的目的.然后vim会从VIMRUNTIME环境变量中获取垃圾.

是否有任何机制或标准的,众所周知的命名约定来避免这种类型的命名空间冲突?当然,我可以做一些事情,比如使用某种前缀命名我的所有环境变量.但我想知道是否有任何众所周知的正式标准.或者,在Bash中是否存在某种我没有找到的命名空间机制?鼓励在评论中提出有关其他相关问题的建议.

unix linux bash shell namespaces

5
推荐指数
1
解决办法
912
查看次数

为什么const lvalue References引用Mutable rvalue References?

在C++ 11中,可以使用可变的右值引用初始化const左值引用.然后,rvalue引用的值可以改变,从而产生可见的突变,即const lvalue指的是什么.这是一个例子:

int && rval = 3;
const int & lval = rval;

cout << "lval = " << lval << endl;
cout << "rval = " << rval << endl;

rval ++;

cout << "lval = " << lval << endl;
Run Code Online (Sandbox Code Playgroud)

输出(来自clang 3.2和gcc 4.8.2都使用-std = c ++ 11):

lval = 3
rval = 3
lval = 4
Run Code Online (Sandbox Code Playgroud)

我猜这个的原因是参考物不能通过左值参考修改,但可以通过右值参考修改.但是,我不明白为什么允许const左值引用可变对象.

有人可以解释这个的基本原理,并提供处理这种情况的最佳实践.还有其他类似的例子,其中constness可以被颠覆?

c++ gcc initialization clang c++11

5
推荐指数
1
解决办法
600
查看次数

Visual Studio 2010 C++是否完全支持类内const变量?

这个问题是密切相关的先前问了一个问题在这里.

为了使Visual Studio 2010 C++调试器能够解析类内初始化的const变量,必须提供变量的全局定义.


例如

这是类定义:

class B{
  public:
   static const int m_b=100;
};
Run Code Online (Sandbox Code Playgroud)

以下是该成员的全局范围定义:

const int B::m_b;
Run Code Online (Sandbox Code Playgroud)

没有全局定义代码可以工作,但调试器在B的方法中看不到m_b.

然而,这导致另一个问题.在非平凡的头文件包含安排(下面给出的完整代码)中,Visual Studio产生此链接错误:

error LNK2005: "public: static int const B::m_b" (?m_b@B@@2HB) already defined in a.obj
1>a.exe : fatal error LNK1169: one or more multiply defined symbols found
Run Code Online (Sandbox Code Playgroud)

但是,GCC成功编译,链接和运行代码.

这是有问题的代码:

文件a.cpp:

#include <iostream>
#include "a.h"

const int B::m_b;

int main()
{
    B b;
    std::cout << b.m_b;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

档案啊:

#pragma once

#include "b.h"
Run Code Online (Sandbox Code Playgroud)

文件b.cpp:

#include "b.h"
Run Code Online (Sandbox Code Playgroud)

文件bh: …

c++ gcc scope initialization visual-studio

3
推荐指数
1
解决办法
1182
查看次数