小编rhi*_*ino的帖子

省略数据类型(例如"unsigned"而不是"unsigned int")

我知道如果C/C++代码中以这种方式省略了数据类型声明:unsigned test=5;,编译器会自动将此变量设为int(在本例中为unsigned int).我听说它是​​C标准,它适用于所有编译器.

我也听说这样做被认为是一种不好的做法.

你怎么看?我真的应该键入unsigned int,而不是只unsigned

short,long而且long long还数据类型?

c c++ types

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

是否可以使用"和","或"等而不是"&&","||"?

我习惯了C++中的andor关键字.我总是使用它们,打字它们对我来说既快又舒服.一旦我听说这些别名是非标准的,可能不适用于所有编译器.但我不确定,我真的不知道这是不是真的.
我们假设我给某人代码,编译时会有问题吗?
可以吗,当我用and,or而不是&&,||?或者这些关键字真的不标准吗?
PSI使用MinGW编译器.

c++ standards operators

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

在内联事件处理程序中传递事件数据

我有一个<input>它有一个onkeydown内嵌的事件处理程序.在这个处理程序中,我想调用一个函数并向它传递一个特殊参数 - 事件数据.

当我想处理整个文档的事件(例如onmousemove)时,我使用以下代码:

document.onmousemove=function(e) {
// here I can make a good use of the 'e' variable,
// for example extract the mouse coordinates from it
}
Run Code Online (Sandbox Code Playgroud)

它有效(虽然我不知道e变量 - 事件数据来自哪里).
但是这次我只想使用<input>上面提到的功能.
我需要将事件数据传递给函数,以便获取按下的键的代码.我想在内联事件处理程序中执行此操作.我创建了一个函数:

function myfunc (e) {
    var evt=window.event?event:e;
    var code=evt.keyCode;
    alert (code);
}
Run Code Online (Sandbox Code Playgroud)

并尝试了所有这些方法:

<input onkeydown="myfunc(this)">

<input onkeydown="myfunc(this.onkeydown)">

<input onkeydown="myfunc(onkeydown)">

但是没有一个工作,警报窗口显示"未定义".
我在谷歌寻找解决我的问题的方法,但没有找到任何可以帮我解决的问题.

javascript events event-handling

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

For循环变量范围混淆

我注意到for循环中变量的奇怪行为.这不是一个真正的问题,但它让我很烦恼.
实际上我用这种方式创建了两个循环:

for (var i:uint; i<19; i++) SomeFunction (i);
for (var i:uint; i<26; i++) SomeOtherFunction (i);
Run Code Online (Sandbox Code Playgroud)

我收到的是汇编警告:
Warning: Duplicate variable definition.

这个警告让我感到惊讶.在其他语言中没有发生过这种情况.
似乎i变量进入了层次结构中更高的范围,并且在循环块之外变得可用.我也尝试在花括号中包含循环块,但它没有改变任何东西.
为什么会这样?这是正常的吗?有可能避免它吗?现在我只为这两个变量设置了不同的名称,但我认为这不是一个真正的解决方案.我真的很想i在我的大多数for循环中使用-named变量.

scope for-loop actionscript-3

12
推荐指数
2
解决办法
2620
查看次数

究竟什么是CDATA,它做了什么?

我有时会注意到包含<![CDATA[]]>标签的CSS或JS代码.我找不到任何解释.CDATA做什么?为什么有些人使用它以及它需要什么?

javascript css cdata

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

QTimer :: singleShot()在给定对象的父类中查找指定的槽,而不是对象本身

我对Qt相当新.我对现有的Qt应用程序做了一些简单的修改,但我还没有从头创建任何.
我对C++的某些方面(类继承等)也没有太多经验.

我创建了一个新的Code :: Blocks基于Qt4的项目,并对模板进行了一些修改.我添加了两个文件.
现在该项目包含三个文件:main.cpp,app.h和app.cpp.
这是main.cpp的内容:

#include <QTimer>

#include "app.h"

int main(int argc, char* argv[]) {
    TestApp app(argc, argv);

    QTimer::singleShot(1000, &app, SLOT(timeout()));

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

这就是app.h的样子:

#ifndef APP_H_INCLUDED
#define APP_H_INCLUDED

#include <QApplication>

class TestApp: public QApplication {
    public:
    TestApp(int &argc, char **argv);
    public slots:
    void timeout();
};

#endif
Run Code Online (Sandbox Code Playgroud)

这是app.cpp:

#include "app.h"

#include <QDebug>

TestApp::TestApp(int &argc, char **argv): QApplication(argc, argv) {
}

void TestApp::timeout() {
    qDebug() << "timeout called";
}
Run Code Online (Sandbox Code Playgroud)

我希望程序在启动后一秒打印"超时调用".不幸的是,这不起作用.当QTimer::singleShot()被调用时,控制台说:

Object::connect: …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance qt connect signals-slots

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

Wget中的默认用户代理

我想知道如果我在命令行中使用wget而未指定显式用户代理,则传递的默认用户代理是什么.

我有一些代码可以根据用户代理改变输出.

wget http://www.google.com -O test.html
Run Code Online (Sandbox Code Playgroud)

user-agent wget

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

fscanf()在不同编译器中的行为不一致(消耗尾随空字符)

我在C99中编写了一个完整的应用程序,并在两个基于GNU/Linux的系统上进行了彻底的测试.当尝试使用Windows上的Visual Studio编译它导致应用程序行为不端时,我感到很惊讶.起初我无法断言出了什么问题,但我尝试使用VC调试器,然后我发现了与fscanf()声明的函数有关的差异stdio.h.

以下代码足以证明问题:

#include <stdio.h>

int main() {
    unsigned num1, num2, num3;

    FILE *file = fopen("file.bin", "rb");
    fscanf(file, "%u", &num1);
    fgetc(file); // consume and discard \0
    fscanf(file, "%u", &num2);
    fgetc(file); // ditto
    fscanf(file, "%u", &num3);
    fgetc(file); // ditto
    fclose(file);

    printf("%d, %d, %d\n", num1, num2, num3);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

假设file.bin包含512\0256\0128\0:

$ hexdump -C file.bin
00000000  35 31 32 00 32 35 36 00  31 32 38 00              |512.256.128.|
Run Code Online (Sandbox Code Playgroud)

现在,当在Ubuntu机器上的GCC 4.8.4下编译时,生成的程序按预期读取数字并打印512, 256, 128 …

c scanf stdio null-character

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

强制NetBeans为假定特定类型的JavaScript变量提供代码完成

我正在使用NetBeans,特别是HTML5和PHP包.目前我正在开发一款利用HTML5 canvas元素的游戏.我有一个全局变量叫context:

var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
Run Code Online (Sandbox Code Playgroud)

显然,IDE不知道什么类型context,因为它无法找到第一个类型,canvas并且它不可能知道getContext()在调用时将返回什么canvas.我希望NetBeans提供代码完成功能,以context假设它代表一个特定的类型(即CanvasRenderingContext2D).做了一些研究后我发现了这个:https://blogs.oracle.com/netbeansphp/entry/defining_variable_type_in_a.该站点指出,通过提供如下所示的PHPDoc注释,可以在PHP中使用此类功能:/* @var $variable type */.我知道它涉及PHP,但我决定尝试使用JavaScript:

/* @var context CanvasRenderingContext2D */
Run Code Online (Sandbox Code Playgroud)

不幸的是,上述方法无效.我认为,由于某些原因,NetBeans可能不知道该类型并尝试了更简单的方法:

/* @var test HTMLImageElement */
Run Code Online (Sandbox Code Playgroud)

同样,test除了所有JavaScript对象的原生代码之外,没有任何提议.

那么,这甚至可能吗?如果有人提供了解决方案,我将不胜感激.提前致谢!

javascript ide netbeans code-completion

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

在32位Debian Squeeze下编译的AC程序会在我朋友的64位上导致段错误

不久前,我已经安装了Debian,并在朋友的帮助下对其进行了配置.
昨天我已经下载了GCC 4.4,我创建了一个简单的程序来测试它.
这是代码:

#include <stdio.h>

int main () {
    int result;
    printf ("Hello Wor... Linux! This is my %dst program compiled in Debian.\nHow many is 2+2?\n", 1);
    scanf ("%d", &result);
    while (result!=4) {
        printf ("Oh no! You're not going anywhere until you type the correct result! 2+2 is?\n");
        scanf ("%d", &result);
    }
    printf ("Congrats!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我通过键入gcc-4.4 myfile.cbash 编译它.然后我试图运行生成的二进制文件,它就像我想要的那样工作.然后我将二进制文件发送给我的朋友,以便在他的PC上进行测试.当他试图运行它时,他收到了一个分段错误消息,该程序无效.
他还使用Debian,他的内核版本与mine(2.6.32-5-686)非常相似.唯一的区别是他的内核是amd-64(他拥有64位处理器,而我的是32位).
为什么会这样?这是否意味着64位Linux用户将无法运行我的32位程序?如果是这样,我可以用一种让他们运行它的方式编译它吗?
请注意,我对Linux并不熟悉.

c linux debian gcc segmentation-fault

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

使用JavaScript设置背景颜色会破坏CSS悬停行为

我正在尝试创建一个菜单,其中当前所选(单击)元素具有与其他元素不同的背景颜色(我正在尝试使用JavaScript实现此目的).我还使用CSS :hover伪类通过突出显示悬停元素.但是,我遇到了一个奇怪的问题:当我使用JavaScript设置任何元素的背景颜色时,其CSS悬停行为不再有效.也就是说,我不能再通过悬停来突出显示该元素.我已经在Firefox和Chromium中检查过了.这是jQuery和纯JavaScript的情况.

代码如下.我已经简化了很多来缩小问题的范围.首先尝试悬停任何菜单项,然后单击"设置背景颜色"链接并再次悬停其中一个菜单元素.无论是否单击"设置背景颜色"按钮,我期望悬停时元素变红(#f00).对于jsfiddle链接,请转到底部.

香草JavaScript:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <style>
            p#links a {
                display: inline-block;
                width: 80px;
                height: 22px;
                line-height: 22px;
                background-color: #00f;
                color: #fff;
                text-decoration: none;
                text-align: center;
                font-family: sans-serif;
            }

            p#links a:hover {
                background-color: #f00;
            }       
        </style>
        <title>Background color</title> 
    </head>
    <body>
        <p id="links">
            <a href="#">Link 1</a>
            <a href="#">Link 2</a>
            <a href="#">Link 3</a>
            <a href="#">Link 4</a>
        </p>
        <a href="#" id="setbgcolor">Set background color</a>

        <script>
            document.getElementById('setbgcolor').onclick = function() {
                var p = document.getElementById('links');
                var elements = p.getElementsByTagName('a');
                for …
Run Code Online (Sandbox Code Playgroud)

javascript css jquery hover

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