float myArray[myArraySize] = {1};
在上面的表达式中,只有第一个元素是init和1.如何使用复合文字(不是memset)初始化所有带元素的元素?
我在unix上使用GCC 4.2进行编译.
我有一个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.
我遵循文档中的建议(使用push和pop),但我无法使其工作.
我已经创建了一些简化的源代码来调查问题.我正在编译它们gcc -Wall -o pragma pragma.c(在哪里pragma.c).我的第一个版本pragma.c看起来像这样:
void foo(int i) { }
static void bar() { }
int main() { return 0; }
正如所料,我在编译时得到了这个:
pragma.c:3:13: warning: ‘bar’ defined but …我看过这些并且他们没有回答我的问题:
我正在尝试编写一些相当可移植的c代码:
int main () 
{
    const int foo=13;
    int bar[foo]={0};
    return 0;
}
使用以下任
一方法variable-sized object may not be initialized编译c代码时出错:
如果我c在VS2008中编译它,我得到一个略有不同error C2057: expected constant expression
我明白,在这里,c代码编译器并没有认识const int foo=13;到它是真正的常量; 例如我们可能有
void a(int fool) 
{    
    const int foo=fool;
    int bar[foo]={0};
}
我也意识到,与gcc编译器不同,VS2008编译器没有C99可变长度数组的概念.那个MS显然没有提到任何未来的支持.
然而,cpp使用gcc或MS编译器编译代码完全不同/更聪明?
而且我不明白 …
在编程:使用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";
}
鉴于上面的引用,我希望编译或运行该程序的过程在某种程度上失败.
令我惊讶的是,编译它(使用g ++(GCC)4.2.1)并运行它成功没有错误或警告,并产生以下非常好的输出:
Square root of n == 1.73205
因此我的问题是:如果sqrt()真的没有为a定义int,为什么上面的程序不能以某种方式失败?
我正在努力为多核处理器优化GCC.我尝试浏览源代码,很难遵循它,因为我需要在后端添加一些代码.任何人都可以建议一些好的资源,解释通过不同阶段的代码流.还提出了一些调试GCC的开发环境,主要是逐步完成代码.在Windows上有可能吗?
我试图将一些代码移植到Mac OS X上.
该程序使用"ttmath"库,一个标题big-num标头库.这个库在windows和linux上运行良好,但是当我尝试在Mac上编译并运行它时,会出现以下错误消息:
"can't find a register in class 'BREG' while reloading 'asm'".
我发现有些文件说这个问题是由旧版本的GCC编译器(build 5488)引起的,但是在我更新GCC之后这个消息仍然显示出来.
目前我的GCC版本是:
i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5490)
操作系统是:Mac OS X 10.5.8版
我找不到有关如何解决这个问题的任何有用信息,有没有人可以帮助我?非常感谢!
我有一个失败的动态演员。班级布局是这样的:
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();
};
现在我使用指针(因此不会发生切片)进行向下转换。
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
};
向下倾斜有效,向上倾斜有效,但侧倾并不总是有效。在 OSX 10.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
 * …我正在开发一个包含许多断言(应该如此)的项目。问题是,我无法让 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
GDB 接受并列出所有这些作为活动断点。无论如何,没有休息,只是一个很好的“断言失败......”消息并且程序停止......提前致谢,最好的问候,戴夫