我知道如果C/C++代码中以这种方式省略了数据类型声明:unsigned test=5;,编译器会自动将此变量设为int(在本例中为unsigned int).我听说它是C标准,它适用于所有编译器.
但我也听说这样做被认为是一种不好的做法.
你怎么看?我真的应该键入unsigned int,而不是只unsigned?
有short,long而且long long还数据类型?
我习惯了C++中的and和or关键字.我总是使用它们,打字它们对我来说既快又舒服.一旦我听说这些别名是非标准的,可能不适用于所有编译器.但我不确定,我真的不知道这是不是真的.
我们假设我给某人代码,编译时会有问题吗?
可以吗,当我用and,or而不是&&,||?或者这些关键字真的不标准吗?
PSI使用MinGW编译器.
我有一个<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)">
但是没有一个工作,警报窗口显示"未定义".
我在谷歌寻找解决我的问题的方法,但没有找到任何可以帮我解决的问题.
我注意到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变量.
我有时会注意到包含<![CDATA[和]]>标签的CSS或JS代码.我找不到任何解释.CDATA做什么?为什么有些人使用它以及它需要什么?
我对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) 我想知道如果我在命令行中使用wget而未指定显式用户代理,则传递的默认用户代理是什么.
我有一些代码可以根据用户代理改变输出.
wget http://www.google.com -O test.html
Run Code Online (Sandbox Code Playgroud) 我在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 …
我正在使用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对象的原生代码之外,没有任何提议.
那么,这甚至可能吗?如果有人提供了解决方案,我将不胜感激.提前致谢!
不久前,我已经安装了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并不熟悉.
我正在尝试创建一个菜单,其中当前所选(单击)元素具有与其他元素不同的背景颜色(我正在尝试使用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)