标签: g++

我可以安全地假设if(true)和if(false)将被优化吗?

在我的代码中,我有一个带bool value模板参数的函数.除了一行之外,在truefalse案例中函数的实现几乎完全相同.所以我想我会if(value)发表一个声明,以避免重写相同的函数两次.调用函数时,value在编译时确定,因此if语句缩减为a if(true)或a if(false).现在,我想知道:这是安全的假设,任何合理的编译器(比如说g++,clang++...)将优化这种说法?

是的,性能至关重要,是的,功能非常轻巧,因此即使是单一的if也会影响速度,是的,这个功能需要在许多人类赖以生存的实时设备上执行数万次.

c++ optimization g++ clang++

0
推荐指数
1
解决办法
387
查看次数

如何制作g ++需要一个标准的`main`?

特别是,如何使g ++拒绝这种无效的标准C++代码:

main(){}
Run Code Online (Sandbox Code Playgroud)

我正在使用MinGW g ++ 6.2.0,但我认为答案将适用于所有当前使用的g ++变体.


我试过的例子:

[C:\my\temp]
> g++ --version | find "++"
g++ (i686-win32-dwarf-rev1, Built by MinGW-W64 project) 6.2.0

[C:\my\temp]
> type foo.cpp
main() {}

[C:\my\temp]
> dir /b
foo.cpp

[C:\my\temp]
> g++ foo.cpp -Wall -Wextra -Wreturn-type -pedantic

[C:\my\temp]
> dir /b
a.exe
foo.cpp

[C:\my\temp]
> _

带有详细编译器输出的版本信息:

C:\my\temp]
> g++ -v --version
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=C:/Program\ Files\ (x86)/mingw-w64/i686-6.2.0-win32-dwarf-rt_v5-rev1/mingw32/bin/../libexec/gcc/i686-w64-mingw32/6.2.0/lto-wrapper.exe
g++ (i686-win32-dwarf-rev1, Built by MinGW-W64 project) 6.2.0
Copyright (C) 2016 Free Software Foundation, Inc.
This …

c++ mingw g++

0
推荐指数
1
解决办法
214
查看次数

无法编译x86的代码,但可以为arm

我有一个奇怪的问题.我可以编译我的代码,arm但不能x86使用gcc v 6.3(和其他也).这是一个导致问题的示例代码.

#include <stdint.h>
#include <cstdio>
#include <unistd.h>
#include <csignal>

volatile bool $run = true;

static void quitHandler(int __attribute__((unused)) signum)
{
    $run = false;
}

void setupQuitHandler()
{
    struct sigaction action;
    action.sa_handler = quitHandler;
    action.sa_flags = SA_RESETHAND;

    if (sigemptyset(&action.sa_mask) < 0) printf("[SetupQuit] sigemptyset");

    if (sigaction(SIGINT, &action, nullptr) < 0) printf("[SetupQuit] sigaction SIGINT");
    if (sigaction(SIGQUIT, &action, nullptr) < 0) printf("[SetupQuit] sigaction SIGQUIT");
    if (sigaction(SIGTERM, &action, nullptr) < 0) printf("[SetupQuit] sigaction SIGTERM");
    if (sigaction(SIGABRT, &action, nullptr) < …
Run Code Online (Sandbox Code Playgroud)

c++ gcc compiler-errors g++ cross-compiling

0
推荐指数
1
解决办法
102
查看次数

为什么g ++ 4.9.0默认有std :: isnan?

我的理解是该功能std::isnan仅从C++ 11开始提供.此外,除非特别说明,否则g++使用-std=gnu++98.

那为什么这会编译?

>> cat test.cpp
#include <cmath>
int main(int argc, char** argv)
{
    return std::isnan(0);
}

>> g++ test.cpp
Run Code Online (Sandbox Code Playgroud)

是否有一个标志来取出该功能<cmath>

c++ g++ c++11 g++4.9

0
推荐指数
1
解决办法
248
查看次数

为什么print&some_buf [0]和&some_buf给出不同的输出?

char buffer[4];
std::cout << &buffer << std::endl;
std::cout << &buffer[0] << std::endl;
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,第一行是缓冲区中第一个元素的十六进制地址.第二行是四个问号(除非我转换为空指针).

第二个陈述与第一个陈述有何不同(从语义上讲,它们是相同的?)?为什么第二行显示为问号而不是随机垃圾字符?

c++ g++

0
推荐指数
1
解决办法
60
查看次数

g ++包含头文件中的目录

我的.cpp和.h文件的路径: /home/quasiturbine/ServerProject/Network/NetworkIncludes/

在那里你可以找到TCP_Connexion.hTCP_Connexion.cpp

在.cpp文件中,我得到了#include "NetworkIncludes\TCP_Connexion.h"默认的构造函数/析构函数.而已.

G ++命令:

g++ -o program -I/home/quasiturbine/ServerProject/Network/ /home/quasiturbine/ServerProject/Network/NetworkIncludes/TCP_Connexion.cpp
Run Code Online (Sandbox Code Playgroud)

致命错误:/home/quasiturbine/ServerProject/Network/NetworkIncludes/TCP_Connexion.cpp:1:43:致命错误:NetworkIncludes\TCP_Connexion.h:没有这样的文件或文件夹#include"NetworkIncludes\TCP_Connexion.h"

有什么问题,我该如何解决?

c++ g++ include

0
推荐指数
1
解决办法
72
查看次数

如何在我的g ++编译器中满足C ++标准版本?

我知道C ++有标准而不是版本,因此,它们的发布由规范管理(例如C99,C ++ 11等)

C ++编译器具有版本,并且每个版本都可以支持多种c ++标准。

关于上述内容,我找到了我的g ++版本编译器,即7.2.0

? bgarcial [~] ? g++ --version
g++ (Ubuntu 7.2.0-8ubuntu3) 7.2.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

? bgarcial [~] ? 
Run Code Online (Sandbox Code Playgroud)

我的g ++编译器具有以下目录,我正在使用本机Makefile以C ++语言进行构建

? bgarcial [include/c++/7] ? pwd
/usr/include/c++/7

? bgarcial [include/c++/7] ?
Run Code Online (Sandbox Code Playgroud)

如何确定我的g ++编译器支持哪些C ++标准?

所述克++文档包括以下信息:

GCC支持1998年发布的原始ISO C ++标准以及2011和2014年的修订版。如果未提供C ++语言方言选项,则默认值为-std = gnu ++ …

c++ gcc g++ cmake

0
推荐指数
1
解决办法
1542
查看次数

Makefile找不到libs

我正在尝试为我的项目编写Makefile.这是文件结构:

在此输入图像描述

Makefile文件:

CXXFLAGS = -ISDL2/include -std=c++11
LXXFLAGS = -lSDL2/lib/x86 -lSDL2main -lSDL2 -lSDL2_image

main.exe: main.o BoardField.o ChessPiece.o Game.o
    g++ main.o BoardField.o ChessPiece.o Game.o -o main.exe $(LXXFLAGS) -std=c++11

main.o: main.cpp 
    g++ main.cpp -c $(CXXFLAGS)

BoardField.o: BoardField.cpp 
    g++ BoardField.cpp -c $(CXXFLAGS) 

ChessPiece.o: ChessPiece.cpp 
    g++ ChessPiece.cpp -c $(CXXFLAGS) 

Game.o: Game.cpp 
    g++ Game.cpp -c $(CXXFLAGS)  
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

g ++ main.o BoardField.o ChessPiece.o Game.o -o main.exe -lSDL2/lib/x86 -lSDL2main -lSDL2 -lSDL2_image -std = c ++ 11 c:/ mingw/bin /../ lib/gcc /mingw32/6.3.0/../../../../mingw32/bin/ld.exe:找不到-lSDL2/lib/x86 c:/ mingw/bin /../ lib/gcc/mingw32 /6.3.0/../../../../mingw32/bin/ld.exe:找不到-lSDL2main c:/ mingw/bin …

c++ gcc makefile g++ linker-errors

0
推荐指数
1
解决办法
111
查看次数

C++:对象已删除(使用new创建)但成员函数仍在工作(?)

只是为了好奇和实验,我写了下面的代码,现在我想了解删除后发生的事情...为什么猫对象还在喵喵?

我使用的编译器版本:

g++ (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Run Code Online (Sandbox Code Playgroud)

并编译代码:

g++ cat.cpp -pedantic -Wall -o cat
Run Code Online (Sandbox Code Playgroud)

在删除后调用meou()时,其他编译器可能会崩溃.

我想知道

  • 为什么不崩溃
  • 我应该采取哪些预防措施

代码:

#include <iostream>
using namespace std;


class Cat
{
    public:
        Cat()  { cout << "Cat construct" << endl; }
        ~Cat() { cout << "Cat destruct" << endl; }
        void meow(); 
};

void Cat::meow(void)
{
    cout << "meow..." << endl;
}    

int main()
{
    Cat * pCat = new Cat;    
    pCat->meow();    
    cout << "pCat = " << pCat << endl;    
    delete pCat;    
    pCat …
Run Code Online (Sandbox Code Playgroud)

c++ oop g++

0
推荐指数
1
解决办法
47
查看次数

如何避免由于内存不足导致的gcc崩溃

在尝试编译一个类时,我继续崩溃gcc(由于内存不足),该类使用在我的类的相应.h文件中定义的许多函数模板.当我开始编译该cpp文件时,我有6.4GB的可用内存:

$ free -mh
                  total        used        free      shared  buff/cache   available
    Mem:           9.7G        3.1G        6.5G        260K        212M        6.4G
    Swap:          947M        887M         59M
Run Code Online (Sandbox Code Playgroud)

这是gcc的详细信息:

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.3.0-16ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --with-as=/usr/bin/x86_64-linux-gnu-as --with-ld=/usr/bin/x86_64-linux-gnu-ld --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu …
Run Code Online (Sandbox Code Playgroud)

c++ gcc templates g++

0
推荐指数
1
解决办法
657
查看次数