小编ldo*_*dog的帖子

g ++编译器:优化标志添加警告消息

我注意到g ++编译器的这个有趣的行为,如果我向编译器添加-O3标志,我得到

otsu.cpp:220: warning: ‘x’ may be used uninitialized in this function
Run Code Online (Sandbox Code Playgroud)

但是,当我不使用优化而是使用调试标志-g时,我根本没有任何警告.现在,当-g标志打开时,我更信任编译器; 但是,我想知道这是否是应该预期的明确定义的行为?

为清楚起见,导致这种情况的代码是这样的:

int x; //uninitialized


getAValueForX( &x ); // function makes use of x,
                     // but x is unitialized
Run Code Online (Sandbox Code Playgroud)

哪里

 void getAValueForX( int *x )
 {
     *x = 4;
 }
Run Code Online (Sandbox Code Playgroud)

或者沿着这些方向的东西,显然更复杂.

c++ optimization warnings g++

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

for循环中一个始终为false的布尔条件是否会被优化掉?

我有以下情况

bool user_set_flag;

getFlagFromUser(&user_set_flag);

while(1){

    if(user_set_flag){
        //do some computation and output

    }


    //do other computation
}
Run Code Online (Sandbox Code Playgroud)

该变量user_set_flag仅在代码中设置一次且仅一次,在开始时,其本质上是用户选择他想对程序执行的操作.假设用户选择user_set_flag = false然后编译器将以这样的方式编译代码,使得该if(user_set_flag)语句仅被检查一次,或者将始终被检查.我可以给编译器提示如将bool设置为const吗?

我问这个的原因是因为我的应用程序是时间关键的,它尽可能快地处理帧.一个总是错误的分支应该能够在运行时以某种方式确定?

c++ optimization loops

5
推荐指数
3
解决办法
1520
查看次数

使用%时,Vim找到不正确的匹配括号

我正在尝试学习VIM,买我注意到当我尝试使用%命令转到匹配的括号时,VIM有时会找到正确的匹配括号,有时会关闭.有没有人遇到过这个解决方案?

vim

5
推荐指数
2
解决办法
2541
查看次数

在Prolog中实现DPLL算法

我正在尝试在Prolog中应用简化算法,但我不是Prolog大师.我需要它没有任何错误,所以我认为你们可能能够提供帮助.

Prolog中DPLL算法的实现是什么?

algorithm implementation prolog

5
推荐指数
0
解决办法
1482
查看次数

Python适用于专注于科学计算的算法吗?

我对编程的兴趣主要在于算法,最近我看到许多有信誉的研究人员在python中编写了很多代码.python对科学计算有多简单方便?它有一个与matlab相比较的算法库吗?Python是脚本语言还是编译?它是一种用于原型算法算法的好语言吗?如果我对C井和OO编程有所了解,我需要多长时间才能学到足够的效率?是否以OO为基础?

对于浓缩的问题格式感到抱歉,但我很好奇,希望有经验的程序员可以帮助我.

python

5
推荐指数
4
解决办法
1025
查看次数

pthreads只能共享全球资源吗?

我正在尝试在两个不是全局变量的线程之间共享一个结构.变量本身在main函数的堆栈上实例化,然后在两个线程启动时将其指针作为参数传递给两个线程.

什么我发现是,当我改变这种结构改变的成员的值没有反映在其他并行线程.有没有办法在两个线程之间共享一个非全局变量(例如一个整数),这样在一个线程中对该变量进行的更改会出现在另一个线程中?

这都是因为我想避免为代码可维护性添加全局变量.

multithreading pthreads

4
推荐指数
1
解决办法
4184
查看次数

C范围问题

以下代码是否有效

int main(){
int * a = 0;
if ( !a ) {
    int b[500];
    a = b;
}

//do something with a, 
//has the array a is 
//pointing too gone out
//of scope and garbage
//or is it still fine?
}
Run Code Online (Sandbox Code Playgroud)

c scope

4
推荐指数
1
解决办法
166
查看次数

将C++仅用于STL容器是不好的做法?

首先是一点背景......

在下文中,我使用C,C++和Java进行编码(通用)算法,而不是使用接口的gui和花哨程序,而是使用简单的命令行算法和库.

我开始学习Java编程.我对Java非常了解,并且我学会了很多地使用Java容器,因为它们倾向于降低簿记的复杂性,同时保证良好的性能.我间歇性地使用了C++,但我肯定不像Java那样好,而且感觉很麻烦.我不知道C++是否足以在不需要查找每个函数的情况下工作,因此我很快就恢复了对Java的支持.

然后我突然过渡到汇编语言中的破解和黑客攻击,因为我觉得我过于关注过于高级别的语言而且我需要更多关于CPU如何与内存交互的经验以及什么是1的真实情况0和0.我不得不承认这是我迄今为止用过的最具教育性和趣味性的计算机之一.

出于显而易见的原因,我无法每天使用汇编语言进行编码,它主要用于娱乐转移.通过这次经历了解了有关计算机的更多信息后,我意识到C++与Java的"1级和0级"相比更接近,但我仍然觉得它非常钝,就像瑞士军刀太多了小玩意做任何优雅的任务.我决定试试普通香草C,我很快就爱上了.在简单性和足够的"微管理者"之间,这是一个快乐的媒介,不能抽象出真正发生的事情.但是,我确实错过了关于Java的一件事:容器.特别是,一个动态扩展的简单容器(如stl向量)非常有用,但每次都必须在C中实现,这非常痛苦.因此,我的代码目前看起来几乎完全是C,其中包含C++中的容器,这是我在C++中使用的唯一功能.

我想知道它在实践中是否考虑使用C++的一个特性,并忽略其余的支持C类型代码?

c c++ containers

4
推荐指数
2
解决办法
687
查看次数

优化浮点除法和转换操​​作

我有以下公式

float mean = (r+b+g)/3/255.0f;
Run Code Online (Sandbox Code Playgroud)

我想加快速度.有以下先决条件

0<= mean <= 1  and 0 <= r,g,b <= 255 and r, g, b are unsigned chars
Run Code Online (Sandbox Code Playgroud)

因此,如果我尝试使用>> 8就像除以256的事实,我会使用类似的东西

float mean = (float)(((r+b+g)/3) >> 8);
Run Code Online (Sandbox Code Playgroud)

这将始终返回0.有没有办法跳过昂贵的浮动分区,最终仍然是0到1之间的平均值?

c c++ algorithm floating-point

3
推荐指数
3
解决办法
3113
查看次数

无关的图书馆链接

我有一个问题可能有点傻,因为我很确定我可能已经知道了答案.

假设你有静态库A,动态共享对象库B和Linux下的程序C. 假设库A调用库B中的函数,并且程序从库A调用函数.现在假设C中调用的所有函数都不使用B中的函数.

要编译C,仅仅链接A和省略B就可以了,而且你的程序C可以在没有安装库B的系统上运行吗?

linux linker shared-libraries static-libraries

3
推荐指数
1
解决办法
615
查看次数