我已经在C工作了很长时间以至于编译器通常在一个开头添加一个下划线这一事实extern只是被理解......然而,今天另一个SO问题让我想知道为什么添加下划线的真正原因.一篇维基百科文章称,原因是:
C编译器的常见做法是在所有外部作用域程序标识符之前加上前导下划线,以避免与运行时语言支持的贡献发生冲突
我认为这至少有一个真实的核心,但它似乎并没有真正回答这个问题,因为如果将下划线添加到所有外部,它对防止冲突没有多大帮助.
有没有人有关于领先下划线的理由的良好信息?
增加的下划线部分原因是Unix creat()系统调用不以'e'结尾?我听说某些平台上的早期链接器名称限制为6个字符.如果是这种情况,那么将下划线添加到外部名称似乎是一个彻头彻尾的疯狂想法(现在我只有5个字符可以玩......).
当它们与PHP中的破折号一起出现时如何替换空格和破折号?
例如下面是我的网址
http://kjd.case.150/1 BHK+Balcony- 700+ sqft. spacious apartmetn Bandra Wes
Run Code Online (Sandbox Code Playgroud)
在这里我想用PHP中的破折号替换所有特殊字符.在URL中,在"阳台"之后已经有一个破折号.如果我用特殊字符替换短划线,那么它会变成两个短划线,因为URL中已经有一个短划线,我只想要一个破折号.
抱歉,如果这个问题听起来很愚蠢,我就是在关注SO的专家并亲自尝试一些例子,这就是其中之一.我确实尝试了搜索选项,但没有找到这种答案.
class A
{
public:
A(){cout<<"A Contruction"<<endl;}
~A(){cout<<"A destruction"<<endl;}
};
int main()
{
vector<A> t;
t.push_back(A()); // After this line, when the scope of the object is lost.
}
Run Code Online (Sandbox Code Playgroud)
为什么类的析构函数被调用两次?
我以为我已经理解了这个问题,但这里有些错误.当用户(我,到目前为止)试图按键时,没有真正发生的事情,我很难理解我错过了什么.
在我提出一些代码以帮助澄清我的问题之前考虑一下:我使用Android的Lunar Lander示例来制作我的第一个"真正的"Android程序.当然,在那个例子中,存在一个类LunarView,并且类嵌套在LunarThread中.在我的代码中,这些类的等价物分别是Graphics和GraphicsThread.
另外,我可以在Android上制作2D精灵动画.我有一个Player类,让我们说GraphicsThread有一个玩家成员称为"玩家".该类有四个坐标 - x1,y1,x2和y2 - 它们定义了一个矩形,其中将绘制精灵.我已经解决了这个问题,所以我可以完美地处理它.每当调用doDraw(Canvas canvas)方法时,它只会查看这些坐标的值并相应地绘制sprite.
现在让我们说 - 这不是我正在尝试用程序做的事情 - 我正在尝试制作程序,其中所做的只是在屏幕的一个位置显示播放器精灵直到用户第一次按下Dpad的左键.然后,该位置将被更改为屏幕上的另一个设置位置,并且精灵将在该位置被绘制用于该程序的其余部分.
另请注意,Graphics中的GraphicsThread成员称为"thread",GraphicsThread中的SurfaceHolder成员称为"mSurfaceHolder".
所以在类Graphics中考虑这个方法:
@Override
public boolean onKeyDown(int keyCode, KeyEvent msg) {
return thread.keyDownHandler(keyCode, msg);
}
Run Code Online (Sandbox Code Playgroud)
另请在GraphicsThread类中考虑这个方法:
boolean keyDownHandler(int keyCode, KeyEvent msg) {
synchronized (mSurfaceHolder) {
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
player.x1 = 100;
player.y1 = 100;
player.x2 = 120;
player.y2 = 150;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
现在假设玩家的坐标开始为(200,200,220,250),当我按下Dpad时,他为什么不做任何不同的事情:左?
谢谢!
有一个这样的片段:
import yaml
class User(object):
def __init__(self, name, surname):
self.name= name
self.surname= surname
user = User('spam', 'eggs')
serialized_user = yaml.dump(user)
#Network
deserialized_user = yaml.load(serialized_user)
print "name: %s, sname: %s" % (deserialized_user.name, deserialized_user.surname)
Run Code Online (Sandbox Code Playgroud)
Yaml docs说,使用从不受信任的来源收到的任何数据调用yaml.load是不安全的; 那么,我应该修改我的snippet\class以使用safe_load方法?
可能吗?
我正在我的应用程序中使用标签栏控件,并希望在我的一个选项卡中使用默认搜索图标.我正在编程标签栏但我无法找到一个属性,我可以在其中指定我在Apple文档中找到的UITabBarSystemItemSearch项目.以下是我的标签栏代码
CouponsViewController *coupons = [[CouponsViewController alloc] init];
UINavigationController *couponsNavigationController = [[UINavigationController alloc] initWithRootViewController:coupons];
couponsNavigationController.tabBarItem.title = @"Coupons";
couponsNavigationController.navigationBar.tintColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.1];
[coupons release];
SettingsViewController *settings = [[SettingsViewController alloc] init];
UINavigationController *settingsNavigationController = [[UINavigationController alloc] initWithRootViewController:settings];
settingsNavigationController.tabBarItem.title = @"Settings";
settingsNavigationController.navigationBar.tintColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.1];
[settings release];
ProfileViewController *profile = [[ProfileViewController alloc] init];
UINavigationController *profileNavigationController = [[UINavigationController alloc] initWithRootViewController:profile];
profileNavigationController.tabBarItem.title = @"Profile";
profileNavigationController.tabBarItem.image = [UIImage imageNamed:@"profileImg.png"];
profileNavigationController.navigationBar.tintColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.1];
[profile release];
[tabBarController setViewControllers:[NSArray arrayWithObjects:loyaltyNavigationController,searchNavigationController,couponsNavigationController,settingsNavigationController,profileNavigationController,nil] …Run Code Online (Sandbox Code Playgroud) 第一个问题在这里大家好.
我正在处理的要求是一个小型测试应用程序,它通过串行端口与外部设备通信.通信可能需要很长时间,设备可以返回各种错误.
该设备在其自己的类中很好地抽象,GUI线程开始在其自己的线程中运行,并具有通常的打开/关闭/读取数据/写入数据基本功能.GUI也非常简单 - 选择COM端口,打开,关闭,显示数据读取或设备错误,允许修改和回写等.
问题是如何从设备类更新GUI?设备处理的数据有几种不同类型,因此我需要在GUI表单/线程类和工作设备类/线程之间建立一个相对通用的桥梁.在GUI到设备方向上,一切正常,在各种GUI生成的事件中,[Begin] Invoke调用打开/关闭/读/写等.
我在这里阅读了这个帖子(如何从C#中的另一个线程更新GUI),其中假设GUI和工作线程在同一个类中.Google搜索引发了如何创建委托或如何创建经典后台工作者,但这根本不是我需要的,尽管它们可能是解决方案的一部分.那么,是否有一个简单但通用的结构可以使用?
我的C#水平是温和的,我一直在编程我的所有工作生活,给出一个线索我会弄清楚(并回发)...提前感谢任何帮助.
我需要能够在oracle中的会话级别(在事务范围之外)使用自定义锁.
在MSSQL中我使用的是sp_getapplock,sp_releaseapplock.
如何在Oracle中实现相同的功能?
当我学习打印数组变量时,我发现在使用双引号时插入了空格.代码段如下.你能告诉我为什么吗?
#!/usr/bin/perl -w
use strict;
use warnings;
my @str_array = ("Perl","array","tutorial");
my @int_array = (5,7,9,10);
print @str_array;
print "\n";
# added the double quotes
print "@str_array";
print "\n";
print @int_array;
print "\n";
# added the double quotes
print "@int_array";
Run Code Online (Sandbox Code Playgroud)
输出:
Perlarraytutorial
Perl array tutorial
57910
5 7 9 10
Run Code Online (Sandbox Code Playgroud) 我有这种情况:
有一个带登录表单的登录页面(表单操作是$ _SERVER ['PHP_SELF']).用户登录时,将检查用户可以访问的应用程序,并在新选项卡中打开该用户可用的所有应用程序.如果用户可以访问应用程序(例如)"文档"和"网站",则会打开2个标签.
我使用打开新标签window.open('app1.html','_newhtml');,有人说它只适用于Firefox.没关系,对我来说没什么大不了的.
问题是,它只打开1个标签,虽然我写了2次
window.open('app1.html','_newhtml');
window.open('app2.html','_newhtml');
如何打开2个标签?服务器端或客户端编程有什么黑客攻击吗?