相关疑难解决方法(0)

尝试使用const初始化变量时,错误"初始化元素不是常量"

我在以下程序的第6行(初始化my_foo到foo_init)时收到错误,我不确定我理解为什么.

typedef struct foo_t {
    int a, b, c;
} foo_t;

const foo_t foo_init = { 1, 2, 3 };
foo_t my_foo = foo_init;

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请记住,这是我正在研究的大型多文件项目的简化版本.目标是在目标文件中有一个常量,多个文件可用于初始化状态结构.由于它是一个资源有限的嵌入式目标,并且结构不是那么小,我不想要源的多个副本.我不想使用:

#define foo_init { 1, 2, 3 }
Run Code Online (Sandbox Code Playgroud)

我也在尝试编写可移植代码,所以我需要一个有效的C89或C99解决方案.

这是否与目标文件中的ORG有关?初始化变量进入一个ORG并通过复制第二个ORG的内容进行初始化?

也许我只需要改变我的策略,并在启动时使用初始化功能完成所有副本.除非有其他想法吗?

c initialization

175
推荐指数
4
解决办法
22万
查看次数

main()真的是一个C++程序的开始吗?

C++标准中的$ 3.6.1/1节,

程序应包含一个名为main的全局函数,它是程序的指定开始.

现在考虑这段代码,

int square(int i) { return i*i; }
int user_main()
{ 
    for ( int i = 0 ; i < 10 ; ++i )
           std::cout << square(i) << endl;
    return 0;
}
int main_ret= user_main();
int main() 
{
        return main_ret;
}
Run Code Online (Sandbox Code Playgroud)

此示例代码执行我打算执行的操作,即进入main()应该是程序"开始" 的函数之前打印从0到9的整数平方.

我还用-pedantic选项GCC 4.5.0 编译它.它没有错误,甚至没有警告!

所以我的问题是,

这段代码真的符合标准吗?

如果它符合标准,那么它是否会使标准所说的无效?main()不是这个计划的开始!user_main()在执行之前执行main().

我知道要初始化全局变量main_ret,use_main()首先执行,但这是完全不同的事情; 关键是,它确实使标准中的引用语句$ 3.6.1/1无效,因为main() …

c++ program-entry-point standards-compliance entry-point

130
推荐指数
6
解决办法
2万
查看次数

如何忽略_CrtDumpMemoryLeaks的误报内存泄漏?

似乎只要有静态对象,_CrtDumpMemoryLeaks就会返回一个误报,声称它正在泄漏内存.我知道这是因为它们在main()(或WinMain)函数之后才会被销毁.但有没有办法避免这种情况?我用的是VS2008.

c++ memory static memory-leaks

11
推荐指数
2
解决办法
5369
查看次数