标签: gcc4

使用复合文字初始化数组中的所有元素

float myArray[myArraySize] = {1};
Run Code Online (Sandbox Code Playgroud)

在上面的表达式中,只有第一个元素是init和1.如何使用复合文字(不是memset)初始化所有带元素的元素?

我在unix上使用GCC 4.2进行编译.

c arrays gcc c99 gcc4

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

GCC 4.6中奇怪的诊断实践行为

我有一个C程序,其中包含一些尚未使用的静态函数.我想禁用这些特定功能的警告.我不想禁用所有-Wunused-function警告.我正在使用GCC 4.6.特别:

ek@Apok:~/source$ gcc --version
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Copyright (C) 2011 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.
Run Code Online (Sandbox Code Playgroud)

我遵循文档中的建议(使用pushpop),但我无法使其工作.

我已经创建了一些简化的源代码来调查问题.我正在编译它们gcc -Wall -o pragma pragma.c(在哪里pragma.c).我的第一个版本pragma.c看起来像这样:

void foo(int i) { }
static void bar() { }
int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)

正如所料,我在编译时得到了这个:

pragma.c:3:13: warning: ‘bar’ defined but …
Run Code Online (Sandbox Code Playgroud)

c gcc warnings pragma gcc4

8
推荐指数
1
解决办法
3644
查看次数

gcc抱怨:可能无法初始化变量大小的对象

我看过这些并且他们没有回答我的问题:

可能无法初始化可变大小的对象

C编译错误:"可能无法初始化可变大小的对象"

错误:可能无法初始化可变大小的对象.但为什么?


我正在尝试编写一些相当可移植的c代码:

int main () 
{
    const int foo=13;
    int bar[foo]={0};
    return 0;
}
Run Code Online (Sandbox Code Playgroud)


使用以下任 一方法variable-sized object may not be initialized编译c代码时出错:

  • gcc 4.3.4
  • arm-linux-gnueabi-gcc 4.4.5

如果我cVS2008中编译它,我得到一个略有不同error C2057: expected constant expression


我明白,在这里,c代码编译器并没有认识const int foo=13;到它是真正的常量; 例如我们可能有

void a(int fool) 
{    
    const int foo=fool;
    int bar[foo]={0};
}
Run Code Online (Sandbox Code Playgroud)


我也意识到,与gcc编译器不同,VS2008编译器没有C99可变长度数组的概念.那个MS显然没有提到任何未来的支持.


然而,cpp使用gccMS编译器编译代码完全不同/更聪明?


而且我不明白 …

c gcc gcc4

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

如果没有为int定义,为什么sqrt()在int变量上工作正常?

编程:使用C++的原理和实践(第六次印刷)的第3章中,Stroustrup声明(第68页):"注意sqrt()没有为int".

这是一个基于该章的简单C++程序:

#include "std_lib_facilities.h"

int main()
{
    int n = 3;
    cout << "Square root of n == " << sqrt(n) << "\n";
}
Run Code Online (Sandbox Code Playgroud)

鉴于上面的引用,我希望编译或运行该程序的过程在某种程度上失败.

令我惊讶的是,编译它(使用g ++(GCC)4.2.1)并运行它成功没有错误或警告,并产生以下非常好的输出:

Square root of n == 1.73205
Run Code Online (Sandbox Code Playgroud)

因此我的问题是:如果sqrt()真的没有为a定义int,为什么上面的程序不能以某种方式失败?

c++ gcc g++ gcc4 gcc-4.2

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

一些指向理解GCC源代码的指针

我正在努力为多核处理器优化GCC.我尝试浏览源代码,很难遵循它,因为我需要在后端添加一些代码.任何人都可以建议一些好的资源,解释通过不同阶段的代码流.还提出了一些调试GCC的开发环境,主要是逐步完成代码.在Windows上有可能吗?

multicore compiler-optimization gcc4

6
推荐指数
1
解决办法
1574
查看次数

如何应用GCC补丁

我正在尝试将此补丁应用于MinGW上的GCC以使其编译GDC 2,但我不知道如何.(我仍然是GCC内部的新手,甚至是一般的*nix工具.)我知道有patch命令,但我无法弄清楚如何使用它,我甚至不知道我是否有足够的这方面的信息.

如何应用GCC补丁?

gcc patch gcc4

6
推荐指数
1
解决办法
5949
查看次数

Mac上的问题:"在重新加载asm时无法在类BREG中找到寄存器"

我试图将一些代码移植到Mac OS X上.

该程序使用"ttmath"库,一个标题big-num标头库.这个库在windows和linux上运行良好,但是当我尝试在Mac上编译并运行它时,会出现以下错误消息:

"can't find a register in class 'BREG' while reloading 'asm'".
Run Code Online (Sandbox Code Playgroud)

我发现有些文件说这个问题是由旧版本的GCC编译器(build 5488)引起的,但是在我更新GCC之后这个消息仍然显示出来.

目前我的GCC版本是:

i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5490)
Run Code Online (Sandbox Code Playgroud)

操作系统是:Mac OS X 10.5.8版

我找不到有关如何解决这个问题的任何有用信息,有没有人可以帮助我?非常感谢!

c++ macos shared-libraries gcc4

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

dynamic_cast 失败 - 取决于操作系统版本

我有一个失败的动态演员。班级布局是这样的:

class A1
{
    public:
virtual int foo1()=0;
};

class A2
{
    public:
    virtual int foo2();
};

class A3
{
public:
   virtual int foo3();
};

class B : public A1, public A2, public A3 
{
   int bar();
};
Run Code Online (Sandbox Code Playgroud)

现在我使用指针(因此不会发生切片)进行向下转换。

main()
{
   B b;

   A1* a1 = dynamic_cast<A1*> (&b); // ok
   B*  b1 = dynamic_cast<B*>  (a1); // ok

   A2* a2_1 = dynamic_cast<A2*> (a1); // OSX 10.7 ok, OSX 10.9 fail
   A2* a1_2 = dynamic_cast<A2*> (b1); // ok

};
Run Code Online (Sandbox Code Playgroud)

向下倾斜有效,向上倾斜有效,但侧倾并不总是有效。在 OSX 10.7 …

c++ macos gcc4

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

`pragma pack(push, 1)` 在 GCC 4.4.7 中崩溃。可能的编译器错误?

我遇到了一个让我困惑的错误。我已将其范围缩小到 GCC(特别是 RHEL Linux、GCC v.4.4.7)中命令的问题pragma pack,该问题可以在下面所示的小示例案例中重新创建。在这种情况下,GCC 似乎正在计算错误的偏移量,这将表现为循环内的崩溃。删除 pragma pack 也可以消除故障 - 但在实际应用程序中,这将导致许多额外的 GB 内存使用,这是不可取的。

在下面的示例中,您需要在启用优化 (O3) 的情况下进行编译才能遇到失败。我还在结构中提供了一个可以删除的示例项目(cMagic),这将改变结构对齐并防止错误触发。

我查看了生成的程序集,认为这可能是编译器错误。我还缺少其他东西吗?任何人都可以确认这个错误或提供任何见解吗?

崩溃.cpp:

/*  Platform Version Info:
 *     gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16)
 *     uname: 2.6.32-504.16.2.el6.x86_64 #1 SMP Tue Mar 10 17:01:00 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
 *
 *  Compiling:
 *     Must use -O3 for compiling and linking
 *     CXX= g++ -g -O3 -fPIC -rdynamic -Wall -Wno-deprecated -DDEBUG
 *     CPP= g++ -g -O3 -fPIC -rdynamic -Wall -Wno-deprecated -DDEBUG
 * …
Run Code Online (Sandbox Code Playgroud)

c++ gcc pragma gcc4

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

如何让 GDB 在断言失败时停止?

我正在开发一个包含许多断言(应该如此)的项目。问题是,我无法让 GDB 在断言失败时中断;它只是打印一个很好的断言失败消息并中止程序。根据我之前添加的帖子,但无济于事,以下断点:

break g_log if log_level == G_LOG_LEVEL_CRITICAL
break g_log if log_level == G_LOG_LEVEL_WARNING
break __assert
break _assert
break abort
break exit
break __assert_fail
Run Code Online (Sandbox Code Playgroud)

GDB 接受并列出所有这些作为活动断点。无论如何,没有休息,只是一个很好的“断言失败......”消息并且程序停止......提前致谢,最好的问候,戴夫

gdb gcc4

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

标签 统计

gcc4 ×10

gcc ×6

c++ ×4

c ×3

macos ×2

pragma ×2

arrays ×1

c99 ×1

compiler-optimization ×1

g++ ×1

gcc-4.2 ×1

gdb ×1

multicore ×1

patch ×1

shared-libraries ×1

warnings ×1