我目前正在使用GCC为QNX(x86)开发一个库,我想制作一些在库中专用的符号,对其他模块是不可见的,特别是对使用该库的代码.
这已经有了,但是,在研究如何实现它时,我在GCC的文档中找到了一个非常令人担忧的段落(参见http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Code-Gen -Options.html#Code-Gen-Options,flag -fvisibility的解释):
尽管有命名法,但默认总是意味着公开; 即,可以从共享对象外部链接.protected和internal在实际使用中相当无用,因此隐藏了唯一的其他常用选项.默认情况下if -fvisibility未指定为默认值,即将每个符号设为公共 - 这会导致与以前版本的GCC相同的行为.
我对"内部"在实际使用中的可见性非常感兴趣.从我从GCC文档的另一篇文章(http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Function-Attributes.html#Function-Attributes,可见性属性的解释)中了解到的,可见性"内部"甚至比"隐藏"的可见性更强(对我来说更有用):
内部可见性就像隐藏的可见性,但具有额外的处理器特定语义.除非psABI另有规定,否则GCC定义内部可见性意味着永远不会从另一个模块调用函数.将其与隐藏函数进行比较,隐藏函数虽然不能被其他模块直接引用,但可以通过函数指针间接引用.通过指示不能从模块外部调用函数,GCC可以例如省略PIC寄存器的加载,因为已知调用函数加载了正确的值.
任何人都可以深入解释一下吗?
我遇到了一个计算的函数atan(x)(源在这里).将它减少到我的问题的核心并稍微重新格式化,他们有类似的东西:
static const double one = 1.0,
huge = 1.0e300;
double atan(double x)
{
/* A lot of uninteresting stuff here */
if (ix < 0x3fdc0000) { /* |x| < 0.4375 */
if (ix < 0x3e200000) { /* |x| < 2^-29 */
if ((huge + x) > one) return x; /* raise inexact */
}
id = -1;
}
/* A lot of more uninteresting stuff */
}
Run Code Online (Sandbox Code Playgroud)
我对这条线if ((huge + x) ...应该做什么以及它是如何工作非常感兴趣.
根据评论,如果绝对值 …
我想知道在通过Javascript直接设置表单字段值时是否存在安全问题.我确信在任何情况下这样做都是安全的,但我绝对肯定而不是很确定.所以,我在征求你的意见.
我的意思是说:
假设我有一个HTML表单,其中包含一个id为"txt_Field"的文本输入字段,我正在执行以下操作:
...
myvalue = "<script>alert('I am evil');</script>";
document.getElementById("txt_Field").value = myvalue;
...
Run Code Online (Sandbox Code Playgroud)
即我将表单字段的值设置为一个字符串,该字符串保存在变量中而不以任何方式转义或过滤该字符串.当然,该字符串实际上将包含用户生成的输入与各种邪恶的东西.
不过,我认为这样做是安全的.有人知道一个证明相反的例子吗?
请注意,问题不在于,当表单数据发送到服务器时,未经过滤的表单字段值是否会在后端造成损害.
我只是想知道是否有人能够想到myvalue中的任何内容,当表单字段值以这种方式设置时,或者如果我一般误解了非常重要的东西时,它可以欺骗(现代)浏览器变成奇怪的行为.
非常感谢你!
当使用autoreconf与automake与libtool构建和安装我的申请,我总是警告" 的libtool:警告:xxx.la尚未安装在/用户/ local/lib目录 "和" libtool的:警告:请记住运行"的libtool --finish/usr/local/lib ".我已经尝试了很多方法,例如清理项目,并使用make clean重新配置,但仍然无法摆脱警告.这是我尝试过的:
./configure
make clean
make
make install prefix=~/Software/
Run Code Online (Sandbox Code Playgroud)
这里是我的一部分configure.ac,涉及到automake和libtool.
AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror])
LT_INIT([dlopen])
Run Code Online (Sandbox Code Playgroud)
为什么会发出这些警告,我该如何摆脱它们呢?
我目前正在开发一个具有复杂帮助系统的大型Web项目,因此需要深入了解何时同步或异步触发事件.
实际上,我正在使用我在很多地方使用的focus()方法,而且它似乎并不像所有地方都记录的那样工作.我已阅读(某些部分)W3C DOM规范和许多文章和教程,所有这些都说明了相同的内容.当我们调用element.focus()时,应该发生以下情况:
1)光标(插入符号)设置为相应的元素.
2)以同步(阻塞)方式调用处理相应元素的焦点事件的所有事件处理程序,即保证在elem.focus()返回之前调用所有这些处理程序.换句话说,它保证了没有,这些处理器将被称为后 elem.focus()返回.
在开发我的应用程序时,我依赖于这种行为,但现在似乎(至少)IE11和Chrome不遵守这些规则.如果有人能按照以下步骤回答我的最后一个问题,我想我能理解发生了什么.
首先,请考虑以下HTML文档:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
<title>Test</title>
</head>
<body>
<input type="button" value="click me" />
<input type="text" />
<script>
function ButtonHandler(e) {
alert('in onclick')
text.focus()
alert('out onclick')
}
function FieldHandler(e) {
alert('onfocus')
text.onfocus = null
}
var button = document.body.children[0]
var text = document.body.children[1]
button.onclick = ButtonHandler
text.onfocus = FieldHandler
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我从这里获得了部分代码:http …
我以为我已经了解 C# 中的异常处理是如何工作的。重新阅读文档以获得乐趣和自信,我遇到了问题:
该文档声称以下两个代码片段是等效的,甚至在编译时将第一个代码片段转换为后一个代码片段。
using (Font font1 = new Font("Arial", 10.0f)) {
byte charset = font1.GdiCharSet;
}
Run Code Online (Sandbox Code Playgroud)
和
{
Font font1 = new Font("Arial", 10.0f);
try {
byte charset = font1.GdiCharSet;
}
finally {
if (font1 != null)
((IDisposable)font1).Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
此外,它还声称:
using 语句确保 Dispose 被调用,即使在您调用对象的方法时发生异常。
相比之下,该文件指出:
在处理的异常中,
finally保证运行关联的块。但是,如果未处理异常,则finally块的执行 取决于触发异常展开操作的方式。
我不明白这一点。在第一个文档的代码示例中,异常显然是未处理的(因为没有 catch 块)。现在,如果第二个文档中的语句为真,finally则不能保证执行该块。这最终与第一个文件所说的(“using声明确保......”)(强调我的)相矛盾。
那么真相是什么呢?
编辑 1
我还是不明白。StevieB 的回答让我从 C# 语言规范中阅读了更多部分。在 16.3 节中,我们有:
[...] 这种搜索一直持续到找到可以处理当前异常的 catch 子句为止。 …
在 MySQL(尤其是 5.5)中,我们似乎有两种不同的方法来设置事务隔离级别。我只是想知道我的想法是否正确
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
Run Code Online (Sandbox Code Playgroud)
完全一样
SET tx_isolation = 'REPEATABLE-READ'
Run Code Online (Sandbox Code Playgroud)
并且对于其他可能的隔离级别也是如此。
编辑 1
我不够精确。鉴于我的问题,@danihp 的回答是正确的。但其实我是想问
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
Run Code Online (Sandbox Code Playgroud)
相对
SET SESSION tx_isolation = 'REPEATABLE-READ'
Run Code Online (Sandbox Code Playgroud)
(注意SET SESSION代替SET)。
它们完全一样吗?
免责声明:
我已经阅读了对于更便宜/更快的无写交易:COMMIT 还是 ROLLBACK?,这与我的问题类似,但与 MS SQL Server 相关,并且已经很老了。此外,答案不知何故让我感到惊讶,所以我想知道 MySQL 5.7 在 2018 年的情况如何。
说了这么多:
假设以下场景:
BEGIN一个交易。SELECT ... FOR UPDATE锁定表中的几行(在大多数情况下,一行)。现在我想完成交易。我可以用正常的方式来做到这一点,即通过发出 a COMMIT,在这种情况下只会删除锁,或者作为替代,通过发出 a ROLLBACK,在这种情况下也只会删除锁。
这两种方法的结果是一样的,但我的感觉是成本/性能可能会有很大差异。
如果被锁定的行的比例总是可以忽略不计(即像 1/1e6 这样的东西),有人可以告诉我推荐哪种方法,并且可能给出一些背景(或一些背景的链接)?
我今天好像很傻,或者我有一个非常奇怪的问题.请考虑以下代码:
#!/usr/bin/perl
use strict;
use warnings;
use warnings::unused;
use warnings FATAL => 'uninitialized';
my ($String, $Pattern);
$Pattern = "pattern";
$String = "pattern\n";
if (($String =~ m/^([^\ ]+).*$/s) &&
defined($1) &&
($1 =~ m/^.*$Pattern$/s)) {
print $1."\n";
}
Run Code Online (Sandbox Code Playgroud)
此代码生成以下警告(然后因为而停止use warnings FATAL => 'uninitialized';):
Use of uninitialized value $1 in concatenation (.) or string at [...]
Run Code Online (Sandbox Code Playgroud)
我真的不明白这个,因为我正在测试是否$1在使用之前定义(初始化).罪魁祸首似乎是最后的条件线(即($1 =~ m/^.*$Pattern$/s)).如果我把它留下,警告就会消失.
但为什么?根据我的理解,该行应该只测试 $1,但不能更改其值($Pattern并且该RegEx的其余部分不包含括号,因此$1不应重新分配可能的匹配).
嗯......一边想着它,它在我脑海中是Perl可能设置$1及其同事每情况下,当一个正则表达式是匹配,是否有在正则表达式的括号内.这可以解释这种行为.这是真的吗?
我想完成以下事项:
对于任意Perl字符串(无论它是否以UTF-8内部编码,以及是否设置了UTF-8标志),从左到右扫描字符串,对于每个字符,打印Unicode代码点以十六进制格式表示该字符.为了让自己绝对清楚:我不想打印UTF-8字节序列或其他东西; 我只想为字符串中的每个字符打印Unicode代码点.
首先,我提出了以下解决方案:
#!/usr/bin/perl -w
use warnings;
use utf8;
use feature 'unicode_strings';
binmode(STDOUT, ':encoding(UTF-8)');
binmode(STDIN, ':encoding(UTF-8)');
binmode(STDERR, ':encoding(UTF-8)');
$Text = "\x{3B1}\x{3C9}";
print $Text."\n";
printf "%vX\n", $Text;
# Prints the following to the console (the console is UTF8):
# ??
# 3B1.3C9
Run Code Online (Sandbox Code Playgroud)
然后我看到了一些例子,但没有合理的解释,这让我怀疑我的解决方案是正确的,现在我对自己的解决方案以及示例都有疑问.
1)Perl关于(...)printf中v标志的文档说:
"这个标志告诉Perl将提供的字符串解释为整数向量,字符串中的每个字符都有一个.[...]"
但它没有说明"整数向量"究竟意味着什么.在查看我的示例的输出时,似乎那些整数是Unicode代码点,但我希望确认这一点的人确认了这一点.
因此问题是:
1)我们可以确定从字符串中拉出的每个整数都是相应字符的Unicode代码点(而不是其他字节序列)吗?
其次,关于我找到的一个例子(略有修改;我不记得我从哪里得到它,也许来自Perl文档):
#!/usr/bin/perl -w
use warnings;
use utf8;
use feature 'unicode_strings';
binmode(STDOUT, ':encoding(UTF-8)');
binmode(STDIN, ':encoding(UTF-8)');
binmode(STDERR, ':encoding(UTF-8)');
$Text = "\x{3B1}\x{3C9}";
print $Text."\n";
printf "%vX\n", $Text for unpack('C0A*', $Text);
# …Run Code Online (Sandbox Code Playgroud) 请考虑以下 bash 脚本:
#!/bin/bash
touch ./temp
set -C
>./temp &>/dev/null # Visible error message output ("./test7: line 7: ./temp: cannot overwrite existing file")
{ >./temp; } &>/dev/null # No error message
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么由倒数第二行中的重定向导致的错误消息没有被尾随抑制&>/dev/null,而它在最后一行中按预期工作?
我研究了 bash 手册中有关重定向和复合命令的段落(特别是有关组命令的部分),但无法从中做出解释。毕竟,由于花括号中只有一个命令,离开花括号应该不会改变任何东西,不是吗?差异是否与 bash 解析行的顺序有关?
如果用户单击该文档中的某个表单字段,我想显示HTML文档中的某些内容,并且如果用户离开该表单字段(通过激活另一个表单或单击其他位置的其他字段),则希望隐藏该内容。这页纸)。
我尝试使用focus和blur事件实现该行为。这原则上可行,但是存在一个问题:不仅在用户在同一文档内移动焦点时,而且在另一个窗口(可能来自不同应用程序)被激活时,也会触发相应字段上的模糊事件。(获得焦点)。
我该如何避免呢?如果焦点转到其他应用程序(或其他浏览器窗口或标签),则我不想在页面上看到任何更改。
非常感谢你!
首先,请注意,我知道这个问题已经被问过好几次了。然而,到目前为止给出的已接受(和未接受)的解决方案在我的情况下不起作用,因此从那时起一定发生了一些实质性的变化,这希望有理由再次询问。
话虽如此:
我目前正在尝试将 Access 2010 .adp 应用程序升级到 Access 2019 .accdb。该应用程序包含大量的VBA代码,这些代码使用ADO对象来连接和操作Microsoft SQL Server(当前:2008 R2,但很快就会升级)。
我想保留大部分代码,这意味着坚持使用 ADO,所以要选择的方法是新的 OleDB SQL 服务器驱动程序(已弃用/2018 年新发布)。SQL 服务器在我的客户端应用程序之外的另一台计算机上运行。
我无法从 VBA 建立与 SQL Server 的连接。当执行以下代码片段时
Dim cnTemp As Connection
Set cnTemp = New Connection
cnTemp.CursorLocation = adUseServer
cntemp.Open "Provider=MSOLEDBSQL;Server=dbserver.example.com;Initial Catalog=MyDB;Authentication=SqlPassword;User ID=sa;Password=secret;DataTypeCompatibility=80;"
Run Code Online (Sandbox Code Playgroud)
执行最后一行时出现以下错误:
SSL 提供商:证书链由不受信任的机构颁发。
好的,没问题,毕竟我们发现了处理同一问题的所有其他问题,都提出了相同的解决方案:添加Trust Server Certificate=True;到连接字符串。
好吧,尝试过,但令我惊讶的是,情况仍然相同。然后我尝试了一些其他变体,例如TrustServerCertificate=True;或使用true而不是True,但无济于事。我还尝试添加Use Encryption for Data=True;这也没有帮助(这是可以预料的)。此外,我尝试了一些在研究问题时发现的片段,但 Microsoft 未记录这些片段在 ADO 连接字符串中有效(例如Encrypt=true或Trusted_Connection=true;);当然,这会使情况变得更糟,并引发其他错误消息。
我知道我可以通过将 SQL Server 证书放入客户端的受信任根证书存储中,或者让 SQL Server 使用由已知的受信任 CA(例如 …
javascript ×3
focus ×2
mysql ×2
perl ×2
asynchronous ×1
atan2 ×1
automake ×1
autotools ×1
bash ×1
blur ×1
c ×1
c# ×1
dom ×1
events ×1
exception ×1
export ×1
for-loop ×1
forms ×1
gcc ×1
html ×1
ieee-754 ×1
innodb ×1
libtool ×1
oledb ×1
pack ×1
printf ×1
regex ×1
regex-group ×1
sql-server ×1
ssl ×1
symbols ×1
synchronous ×1
transactions ×1
try-catch ×1
unpack ×1
using ×1
visibility ×1