我遇到了第5行的错误,下面的代码有问题: 错误:无效转换从void*到char* 我使用g ++与codeblocks,我试图编译这个文件作为cpp文件。 有关系吗? #include <openssl/crypto.h> int main() { char *foo = malloc(1); if (!foo) { printf("malloc()"); exit(1); } OPENSSL_cleanse(foo, 1); printf("cleaned one byte\n"); OPENSSL_cleanse(foo, 0); printf("cleaned zero bytes\n"); }
有没有人看到任何数字/分析是否在gcc / g ++实际中使用C / C ++ restrict关键字在现实中(而不仅仅是在理论上)提供了显着的性能提升? 我读过各种推荐/贬低它的用法的文章,但我没有碰到任何真正的数字,实际上certificate双方的论点。 编辑 我知道restrict并不是C ++的正式组成部分,但是它受到了一些编译器的支持,我读过了Christer Ericson的一篇文章,强烈build议使用它。
从Clang到g ++的一些C ++ 11代码的端口 template<class T> using value_t = typename T::value_type; template<class> struct S { using value_type = int; static value_type const C = 0; }; template<class T> value_t<S<T>> // gcc error, typename S<T>::value_type does work const S<T>::C; int main() { static_assert(S<int>::C == 0, ""); } 为Clang(版本3.1至SVN中继)与任何g ++版本提供不同的行为。 对于后者,我得到这样的错误 prog.cc:13:13: error: conflicting declaration 'value_t<S<T> > […]
有没有办法从g ++中取回demangled的名字。 例如,我有demangled名称func(char*, int) ,我应该怎么做才能得到重名的名字, _Z4funcPci ? 我的问题是具体的g ++。
我正在运行Eclipse Helios,并且安装了g ++ – 4.6。 希望我没有错,g ++ 4.6实现了C ++ 11的function。 我创build了一个使用nullptr和auto关键字的C ++项目。 该版本提供了以下错误: ../{filename}.cpp:13:13: error: 'nullptr' was not declared in this scope ../{filename}.cpp:14:2: warning: 'auto' will change meaning in C++0x; please remove it [-Wc++0x-compat] 其实它昨天一直在修build。 今天我从这里得到这些东西。 请帮我解决这个问题。
g ++有时产生相当复杂的输出。 特别是在处理模板时。 有什么工具可以使g ++输出更具可读性吗? …至less有一些颜色? 在这里提出这个问题可能听起来很愚蠢,但是我一直无法通过我的方式来解决这个问题。
我只注意到在安装OS X 10.9之后,g ++编译器链接到了clang编译器。 有无论如何恢复到gcc / g ++?
我今天正在编写一些代码,并且出现了一个奇怪的编译错误,这个错误似乎是由于以不同的顺序初始化成员variables而导致的。 例: class Test { int a; int b; public: Test() : b(1), a(2) { } }; int main() { Test test; return 0; } 那么如果我用-Werror -Wall编译它: $ g++ -Werror -Wall test.cpp test.cpp: In constructor 'Test::Test()': test.cpp:3:9: error: 'Test::b' will be initialized after [-Werror=reorder] test.cpp:2:9: error: 'int Test::a' [-Werror=reorder] test.cpp:6:5: error: when initialized here [-Werror=reorder] […]
考虑以下情况: 共享库libA.so,没有依赖关系。 共享库libB.so,libA.so作为其依赖项。 我想编译一个与libB链接的二进制文件。 我应该只与libB或与libA二进制链接? 有没有什么办法只与直接依赖链接,让从运行时的依赖解决未解决的符号? 我担心库libB实现可能会在将来发生变化,引入其他依赖(例如,libC,libD,libE)。 我会遇到问题吗? 换一种说法: libA文件:a.cpp啊 libB文件:b.cpp bh 主程序文件:main.cpp 当然,b.cpp包括啊,main.cpp包含bh 编译命令: g++ -fPIC a.cpp -c g++ -shared -o libA.so ao g++ -fPIC b.cpp -c -I. g++ -shared -o libB.so bo -L. -lA 我应该使用哪个下面的选项? g++ main.cpp -o main -I. -L. -lB 要么 g++ main.cpp -o main -I. -L. -lB -lA 我不能使用第一个选项。 链接器抱怨库libA中未parsing的符号。 […]
在我最近回顾的一段代码中,用g++-4.6编译得很好,我遇到了一个奇怪的尝试,从std::unique_ptr创build一个std::shared_ptr : std::unique_ptr<Foo> foo… std::make_shared<Foo>(std::move(foo)); 这对我来说似乎很奇怪。 这应该是std::shared_ptr<Foo>(std::move(foo)); afaik,虽然我不完全熟悉的动作(我知道std::move只是一个演员,没有得到移动)。 使用此SSC上的不同编译器进行检查(NUC *)E #include <memory> int main() { std::unique_ptr<int> foo(new int); std::make_shared<int>(std::move(foo)); } 汇编结果: g ++ – 4.4.7给出编译错误 g ++ – 4.6.4编译没有任何错误 g ++ – 4.7.3给出了内部编译器错误 g ++ – 4.8.1给出了编译错误 铿锵声++ – 3.2.1编译没有任何错误 所以问题是:哪个编译器在标准方面是正确的? 标准是否要求这是一个无效的陈述,一个有效的陈述,或者这只是未定义的? 加成 我们已经同意,其中一些编译器(如clang ++和g ++ – 4.6.4)允许转换,而不应该转换。 然而,使用g ++ – 4.7.3(它在std::make_shared<Foo>(std::move(foo)); )上产生内部编译器错误,正确地拒绝了int bar(std::move(foo)); 由于这种巨大的行为差异,我将这个问题保持原样,尽pipe其中的一部分可以通过减lessint […]