小编Jos*_*sey的帖子

Makefile中有什么区别:=和=?

对于Make中的变量赋值,我看到:=和=运算符.他们之间有什么区别?

makefile gnu-make colon-equals

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

HTML - 属性与属性

idHTML的属性或属性?

我应该怎么做$('#selector').attr('id');$('#selector').prop('id');

我读了很多文章,我仍然感到困惑.

有人可以向我解释一下HTML/JS中属性和属性之间的差异是非常简单的语言吗?

html javascript jquery

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

gcc,严格别名和恐怖故事

gcc-strict-aliasing-and-casting-through-a-union中,我问是否有人遇到过通过指针进行联合惩罚的问题.到目前为止,答案似乎是否定的.

这个问题是广泛的:你有任何关于gcc和严格走样恐怖故事?

背景:引用AndreyT在c99-strict-aliasing-rules-in-c-gcc中的答案:

"严格的别名规则植根于自[标准化]时代开始以来C和C++中存在的标准部分.禁止通过另一种类型的左值访问一种类型的对象的条款存在于C89/90中(6.3 )以及C++ 98(3.10/15)......并非所有编译器都希望(或敢于)强制执行或依赖它.

好吧,gcc现在敢于用它的-fstrict-aliasing开关来做到这一点.这引起了一些问题.例如,请参阅有关Mysql错误的优秀文章 http://davmac.wordpress.com/2009/10/,以及http://cellperformance.beyond3d.com/articles/2006/06/understanding中同样出色的讨论.-strict-aliasing.html.

其他一些不太相关的链接:

重复一遍,你有自己的恐怖故事吗?当然,没有表示的问题-Wstrict-aliasing是优选的.其他C编译器也很受欢迎.

6月2日补充:迈克尔伯尔的答案中的第一个链接,确实有资格作为恐怖故事,可能有点过时(从2003年开始).我做了一个快速测试,但问题显然已经消失了.

资源:

#include <string.h>
struct iw_event {               /* dummy! */
    int len;
};
char *iwe_stream_add_event(
    char *stream,               /* Stream of events */
    char *ends,                 /* End of stream */
    struct iw_event *iwe,       /* Payload */
    int event_len)              /* Real size of payload …
Run Code Online (Sandbox Code Playgroud)

c gcc strict-aliasing

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

我应该担心指针投射过程中的对齐吗?

在我的项目中,我们有一段这样的代码:

// raw data consists of 4 ints
unsigned char data[16];
int i1, i2, i3, i4;
i1 = *((int*)data);
i2 = *((int*)(data + 4));
i3 = *((int*)(data + 8));
i4 = *((int*)(data + 12));
Run Code Online (Sandbox Code Playgroud)

我和我的技术负责人谈到这个代码可能不便携,因为它试图将a unsigned char*转换为int*通常具有更严格的对齐要求的代码.但是技术主管说没关系,大多数编译器在转换后仍保持相同的指针值,我可以像这样编写代码.

坦率地说,我并不是真的相信.经过研究,我发现有些人反对使用上面的指针铸件,例如,这里这里.

所以这是我的问题:

  1. 在真实项目中投射后取消引用指针真的很安全吗?
  2. C型铸造和reinterpret_cast?之间有什么区别吗?
  3. C和C++之间有什么区别吗?

c c++ casting alignment

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

使用-source 7或更高版本

在尝试使用intelliJ Ultimate 12构建项目时,我遇到了这些错误

use -source or higher to enable diamond operator
use -source 7 or higher to enable multi-catch statement
Run Code Online (Sandbox Code Playgroud)

我在其他系统上使用了相同的代码和相同的intelliJ Ultimate 12,并且它在那里工作得很好.我想知道我需要在IDE中设置哪些配置来修复这些构建问题?

java intellij-idea

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

gcc,严格别名,并通过联合进行转换

你有任何恐怖故事要讲吗?GCC手册最近添加了一个关于-fstrict-aliasing的警告并通过联合转换指针:

[...]获取地址,强制生成指针并取消引用结果具有未定义的行为 [强调添加],即使转换使用了联合类型,例如:

    union a_union {
        int i;
        double d;
    };

    int f() {
        double d = 3.0;
        return ((union a_union *)&d)->i;
    }
Run Code Online (Sandbox Code Playgroud)

有没有人有一个例子来说明这种未定义的行为?

请注意,这个问题不是关于C99标准所说或不说的.它是关于gcc和其他现有编译器的实际功能.

我只是猜测,但一个潜在的问题可能在于设置d为3.0.因为d是永远不会直接读取的临时变量,并且永远不会通过"稍微兼容"的指针读取,所以编译器可能不会费心去设置它.然后f()将从堆栈中返回一些垃圾.

我的简单,天真,尝试失败了.例如:

#include <stdio.h>

union a_union {
    int i;
    double d;
};

int f1(void) {
    union a_union t;
    t.d = 3333333.0;
    return t.i; // gcc manual: 'type-punning is allowed, provided...' (C90 6.3.2.3)
}

int f2(void) {
    double d = 3333333.0;
    return ((union a_union *)&d)->i; // gcc …
Run Code Online (Sandbox Code Playgroud)

c gcc type-conversion strict-aliasing unions

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

如何确定QTableWidget的正确大小?

没有办法设置QTableWidget的"正确"大小?(我是新手)这个测试代码只有25行,在两个文件中,文件Test.h:

#include <QtGui>
class Test : public QMainWindow {
   Q_OBJECT
public:
   Test();
};
Run Code Online (Sandbox Code Playgroud)

和Test.cpp文件:

#include "Test.h"
Test::Test() : QMainWindow() {
   QVBoxLayout *vbox = new QVBoxLayout;
   QPushButton  *btn = new QPushButton("Hello World etc etc etc etc etc");
   QTableWidget *tbl = new QTableWidget(2, 2);
   vbox->addWidget(btn);
   vbox->addWidget(tbl);
   QWidget *w = new QWidget;
   setCentralWidget(w);
   w->setLayout(vbox);
   resize(1, 1);
}

int main(int argc, char *argv[]) {
   QApplication app(argc, argv);
   Test test;
   test.show();
   app.exec();
}
Run Code Online (Sandbox Code Playgroud)

然后命令:

   qmake -project && qmake && make && ./Test
Run Code Online (Sandbox Code Playgroud)

给出窗口: …

c++ qt

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

setup.py:限制python解释器的允许版本

我有一个python库.不幸的是我还没有更新它以使用python 3.

在我的setup.py中,我补充道

install_requires=['python<3'],
Run Code Online (Sandbox Code Playgroud)

我的意图是不允许在python 3下安装/使用这个包,因为我知道它还没有(还)工作.我不认为这是正确的方法,因为pip然后尝试下载并安装python 2.7.3(已经是已安装的版本!).

我应该如何在特定范围的python解释器版本上指定我的库依赖?我应该添加Programming Language :: Python :: 2 :: Only标签吗?这实际上会阻止在python 3下安装吗?如果我还想将最低版本限制为python 2.6怎么办?

我更喜欢一种可以在任何地方使用的解决方案,但是只能使用一种解决方案pip(并且希望不会导致easy_install阻塞).

python pip easy-install setup.py

28
推荐指数
2
解决办法
5796
查看次数

减去2 size_t的类型是什么?

C中应该使用哪种类型来表示两个对象大小之间的差异?

size_t未签名的那样

size_t diff = sizeof (small_struct) - sizeof (big_struct);
Run Code Online (Sandbox Code Playgroud)

显然不正确,在我看来,没有真正的签名等价物.

ptrdiff_t 听起来很诱人,但是

  1. 就像它的名字所说它是用于减去指针.
  2. 我已经读过,例如像DOS这样的分段平台的最大对象大小为64k,可以用16位表示.然而,远指针由16位段值和16位偏移值组成.ptrdiff_t这样的32位平台也不会这样吗?如果是这样,两个对象的大小之间的差异只需要16位,但使用ptrdiff_t会得到一个32位宽的变量,使其不是最佳的.

那么,什么是适合这种价值的便携式?

Edit: 我知道ssize_t,但它是

  1. 不属于标准C.
  2. 实际上并非打算用于此类用途,而是用于返回大小或(负)错误值.

c size-t

21
推荐指数
2
解决办法
4509
查看次数

如何增加堆栈/堆上分配的最大内存

  • 如何在C++中增加程序堆栈/堆上分配的最大内存?

  • 增加计算机的RAM会自动增加计算机程序的堆栈/堆内存吗?

c++ memory

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