小编Gar*_*han的帖子

gcc的-Wconversion是否与使用短于int的整数类型的复合赋值(+ =等)不兼容?

gcc有一个有用的标志-Wconversion,当存在从较宽类型到较窄类型的隐式转换时会产生警告,可能会丢失信息.不幸的是,它有以下......无益......行为.


考虑这个程序:

int main(void) {
  short x = 1;
  x = x+x;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

用-Wconversion编译它会产生

nonsense.c: In function 'main':
nonsense.c:3:8: warning: conversion to 'short int' from 'int' may alter its value [-Wconversion]
Run Code Online (Sandbox Code Playgroud)

这是公平的; 在大多数平台上,如果发生这种情况,你会做一些你可能没想到的事情x==0x8000.(获得此警告的实际机制:操作数+受"通常的算术转换"的影响,将它们扩展为int;因此结果也是int类型;然后分配回来x是从更广泛的隐式转换到较窄的类型.)但是假设你确实期望并打算这种行为.(您正在模拟一个16位处理器,或一个16位移位寄存器;或者您知道x此代码中可能值的范围,它永远不会溢出.)您可以通过输入显式转换来告诉编译器:

int main(void) {
  short x = 1;
  x = (short)(x+x);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后它不会抱怨.


到现在为止还挺好.但是,如果这是造成麻烦的分配是一个复合赋值- ,,+= 等-那么,只要我可以看到有没有办法摆脱这种警告,因为没有代码中的任何点在哪你可以插入显式的演员表.*=<<=

这意味着,例如,你不能拥有所有

  • -Wconversion项目的顶级编译器标志,以捕获它的所有真正错误.
  • 复合赋值运算符代码中任何位置的任何实例都应用于短于的整数类型int.
  • 无警告构建.

这似乎很难过.


所以,问题:有一个解决这个 …

c c++ gcc warnings casting

11
推荐指数
1
解决办法
693
查看次数

如何实现这个FilteringIterator?

  1. IObjectTest是一个具有单个布尔测试(Object o)方法的接口

  2. FilteringIterator是迭代器的实现,其与另一个迭代器和一个IObjectTest实例初始化:新FilteringIterator(myIterator,MYTEST).然后,您的FilteringIterator将允许迭代'myIterator',但跳过任何未通过'myTest'测试的对象.

由于"hasNext"操作实际上涉及重复移动底层迭代器,直到到达下一个匹配项.问题是如何将it迭代器移回迭代器,因为hasNext不应该移动底层迭代器.

java iterator

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

诊断神秘的valgrind"无效写"

[这是冗长而充满细节的.我的具体问题由下面的粗体字问题引入.]

摘要

我们在valgrind下运行一些测试套件,遇到一个对我来说没什么意义的错误.我正在寻找有关更详细地弄清楚可能出错的建议.

  • Valgrind抱怨"写8号无效".
  • 从运行到运行,错误是一致的,但是应该是不相关的代码更改,不同的编译器/ stdlib版本等.
  • 写入的地址位于堆栈中,据我所知,这是我们编写代码的完全合理的地址.
  • 它的对齐与写入的大小一致.
  • 它发生的地方深入标准库内部.

所有这些都闻起来好像真正的问题在其他地方:某些东西正在变得腐败并导致后来的混乱.但这是valgrind报告的第一个问题,所以如果在其他地方有内存踩踏,那么valgrind就无法抓住它.我怀疑要么我错过了一些明显的东西,要么有一个微妙的问题,那些具有比我更有专业知识的人可能能够指出我.

一些细节

以下是一些细节和一些具体问题.

这是在x64硬件上运行Ubuntu 14.04的Linux机器上.

这是valgrind在一个相当典型的例子中的抱怨:

==14259== Invalid write of size 8
==14259==    at 0x662BBC9: __printf_fp (printf_fp.c:663)
==14259==    by 0x6629792: vfprintf (vfprintf.c:1660)
==14259==    by 0x664D578: vsnprintf (vsnprintf.c:119)
==14259==    by 0x52DCE0F: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==14259==    by 0x52E3263: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_float<double>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, char, double) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==14259==    by 0x52E354F: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, double) const …
Run Code Online (Sandbox Code Playgroud)

c++ stack-overflow valgrind memory-corruption eglibc

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

在javascript(jquery)中销毁一个函数

有谁知道如何破坏javascript(jquery)函数?我正在使用jquery"selectable",并且在可选择的"stop"事件上触发了函数调用"edit".

在这个"编辑"功能中,我有很多"点击"事件嵌套开关功能,每个"点击"事件中都有很多功能.我的问题是,每当我触发"可选"功能时,"edit"功能内的事件再次被触发,但之前的功能和事件仍然存在.我现在做的是取消绑定功能"编辑"中的每个事件在可选择的"开始"甚至.

这是内存泄漏问题吗?有没有办法在javascript中"破坏"功能?我试图在函数结束时将函数声明为null但这不起作用.其中的功能和事件仍然存在.

谁有线索?

演示页面 - > http://dreamerscorp.com/test/test01/javascript_destory_test.html

编辑2009/10/31 :)非常感谢您的帮助,您的评论对我非常有用,再次感谢!!!

javascript jquery memory-leaks selectable

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

使用 VirtuaWin 时,资源管理器窗口的 GetWindowRect 的值为非常负的值

我正在拼凑一些东西,列出我的 Windows 盒子上的每个窗口,并且似乎(仅)对于我的一个窗口 GetWindowRect 返回一个具有非常负的 y 坐标的矩形。

可能的复杂情况:(1) 我有多个显示器,但 (1a) y 坐标非常负,约为 -24000,并且 (1b) 两个显示器上的其他窗口不显示此效果;(2) 我正在使用 VirtuaWin 虚拟桌面工具,但 (2a) 其他窗口,在多个不同的虚拟桌面和两台显示器上,不显示此效果;(3) 我使用 pywin32 模块在 Python 中完成所有这些工作。

相关窗口是 Windows 资源管理器窗口。它的大小或位置并不异常(至少从肉眼看来)。当前活动虚拟桌面上的资源管理器窗口不会显示此行为,但是当我在其他虚拟桌面上创建资源管理器窗口时,它们会显示相同的意外效果。

我运行的是 Windows XP 和 VirtuaWin 4.3 版本。

发生什么了?

windows winapi virtual-desktop

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

python中的浮点给出了错误的答案

我计算了以下内容:

>>> float(10.0-9.2)
0.800000000000000*7*
Run Code Online (Sandbox Code Playgroud)

即使做10.0-9.2也给出了上述结果.为什么额外的7会出现在结果中?

我在python 3.2上.

python python-3.x

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

回文计划可以做出哪些改进?

我只是在Python中学习编程以获得乐趣.我正在写一个回文程序,我想到了如何进一步改进它.

我想到的第一件事是防止程序必须双向浏览整个单词,因为我们只是检查回文.然后我意识到只要第一个和最后一个字符不匹配就可以打破循环.

然后我在课堂上实现它们,这样我就可以调用一个单词并返回true或false.

这就是该计划截至目前的情况:

class my_str(str):
        def is_palindrome(self):
                a_string = self.lower()
                length = len(self)
                for i in range(length/2):
                        if a_string[i] != a_string[-(i+1)]:
                                return False
                return True

this = my_str(raw_input("Enter a string: "))
print this.is_palindrome()
Run Code Online (Sandbox Code Playgroud)

我是否可以进行其他任何改进以提高效率?

python palindrome

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

在Linux中,是否存在类似于_clearfp()和_statusfp()的函数?

最近,我正在做一个关于移植的工作.我遇到了这样一个问题:有些Windows API,如_clearfp(),_ statusfp()等,那么我在Linux中找不到相应的功能.

所以我来这里寻求帮助.

linux porting visual-c++

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

减少文本行之间的空白区域

我正在创建一个网页(第一次),我正在尽可能多地遵循CSS规则和标签.但是,我遇到了空白问题.我已经强调了第一行文字,但现在第二行似乎已经在下面漂移了.有没有办法让它更舒服一点,我希望第二行文字恰好在上面一行之下.

body,td,th {
    color: #000000;
}

body { 
 margin: 0; 
 padding: 0; 
 padding-top: 6px;
 text-align: center;
 background-color: #FFFFFF; 
} 
#centered
{ 
 width: 800px; /* set to desired width in px or percent */
 text-align: left; /* optionally you could use "justified" */
 border: 0px; /* Changing this value will add lines around the centered area */
 padding: 0;  
 margin: 0 auto; 
} 
.style3 {
    font-size: 32pt;
    color: #666666;
    margin-left: 0px;   
    border-bottom: 3px double;
}
.style5 {
    margin-left: 390px;
    font-size: 32pt; …
Run Code Online (Sandbox Code Playgroud)

html css

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

JTextArea中的不同文本颜色

在textarea中可以使用不同颜色的不同行吗?你有一个例子吗?

java swing

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

如果月份不是当月

我们有一个.NET Web服务,它返回JSON,包括字符串格式的日期,如下所示:2012-04-30T00:00:00 + 12:00.

在javascript中,我想要排除月份不是当前月份的日期.因此,在上述日期,月份为04(4月),当月为5月(无论如何都在新西兰).所以,我想忽略这个记录,例如,在伪代码中:

if(vMonth == CurrentMonth){
     dothis();
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

javascript

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