这是我的计划.
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello\n");
system("uname");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出.
$ gcc foo.c
$ ./a.out
Hello
Linux
Run Code Online (Sandbox Code Playgroud)
但是,如果我将程序的输出重定向到文件,我会看到输出的顺序是相反的,即Linux之前打印的顺序Hello.
$ ./a.out > out.txt
$ cat out.txt
Linux
Hello
Run Code Online (Sandbox Code Playgroud)
为什么涉及重定向时输出的顺序不同?
这是我的代码,用于遍历冒号分隔的值并对每个值执行某些操作。
f()
{
IFS=:
for arg in $1
do
echo arg: $arg
done
}
f foo:bar:baz
Run Code Online (Sandbox Code Playgroud)
这在大多数符合 POSIX 的 shell 中都可以正常工作。
$ dash foo.sh
arg: foo
arg: bar
arg: baz
$ bash foo.sh
arg: foo
arg: bar
arg: baz
$ ksh foo.sh
arg: foo
arg: bar
arg: baz
$ posh foo.sh
arg: foo
arg: bar
arg: baz
$ yash foo.sh
arg: foo
arg: bar
arg: baz
Run Code Online (Sandbox Code Playgroud)
但它在 zsh 中没有按预期工作。
$ zsh foo.sh
arg: foo:bar:baz
Run Code Online (Sandbox Code Playgroud)
zsh这里是否违反了POSIX?
我正在尝试各种std::vector即时创建并将其传递给另一个函数的方法:
#include <iostream>
#include <vector>
void print(std::vector<int> a)
{
std::cout << a.size() << '\n';
}
int main()
{
print({1, 2, 3, 4, 5});
print(std::vector<int>{1, 2, 3, 4, 5});
print(std::vector<int>({1, 2, 3, 4, 5}));
}
Run Code Online (Sandbox Code Playgroud)
这会产生所需的输出:
$ clang++ -std=c++11 foo.cpp && ./a.out
5
5
5
Run Code Online (Sandbox Code Playgroud)
我想知道这三个调用之间有什么区别:
print({1, 2, 3, 4, 5});
print(std::vector<int>{1, 2, 3, 4, 5});
print(std::vector<int>({1, 2, 3, 4, 5}));
Run Code Online (Sandbox Code Playgroud)
这是另一个例子:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> a = {1, 2, 3, 4, 5};
// std::cout …Run Code Online (Sandbox Code Playgroud) pre {
background: lightblue;
}Run Code Online (Sandbox Code Playgroud)
<pre>
<code>
foo
</code>
</pre>Run Code Online (Sandbox Code Playgroud)
上方和下方出现空白行foo。这是预期的,因为 PRE 元素中有换行符。
pre {
background: lightblue;
}Run Code Online (Sandbox Code Playgroud)
<pre><code>
foo
</code></pre>Run Code Online (Sandbox Code Playgroud)
上方出现空白行foo,但下方不出现。为什么?
pre {
background: lightblue;
}Run Code Online (Sandbox Code Playgroud)
<pre><code>foo</code></pre>Run Code Online (Sandbox Code Playgroud)
前后不再有空行,foo因为 HTML 代码中没有换行符。
pre {
background: lightblue;
}Run Code Online (Sandbox Code Playgroud)
<pre>
<code>foo</code>
</pre>Run Code Online (Sandbox Code Playgroud)
<pre>之后和之前都有换行符</pre>。foo所以我期待输出中前后有空行。为什么这个例子中没有空行?
我无法使用 JSDOM(版本 13.0.0)从具有相对路径的本地文件系统加载脚本。
我查看了以下问题,但它们没有回答我的问题:
runScripts和resources建议那里)。文件foo.js:
var jsdom = require('jsdom')
var html = `<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script src="bar.js"></script>
</head>
<body>
<div>Test</div>
</body>
</html>`
global.window = new jsdom.JSDOM(html, { runScripts: "dangerously", resources: "usable" }).window
console.log('foo')
Run Code Online (Sandbox Code Playgroud)
文件bar.js:
console.log('bar')
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
$ node foo.js
foo
Error: Could not load script: "bar.js"
at onErrorWrapped (/Users/lone/so/node_modules/jsdom/lib/jsdom/browser/resources/per-document-resource-loader.js:41:19)
at Object.check (/Users/lone/so/node_modules/jsdom/lib/jsdom/browser/resources/resource-queue.js:72:23)
at request.then.catch.err (/Users/lone/so/node_modules/jsdom/lib/jsdom/browser/resources/resource-queue.js:124:14)
at process._tickCallback (internal/process/next_tick.js:68:7)
at Function.Module.runMain (internal/modules/cjs/loader.js:746:11)
at startup (internal/bootstrap/node.js:240:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:564:3) Error: …Run Code Online (Sandbox Code Playgroud) 注意:这不是“ 是否可以在Makefile中创建多行字符串变量”和其他类似问题的副本。这个问题要求不依赖纯Bash或仅GNU Make的功能的POSIX兼容解决方案。关于堆栈溢出的另一个问题没有此要求。
sed在macOS High Sierra上使用BSD获取以下shell脚本:
printf 'foo\nbaz\n' | sed '/foo/a\
bar
'
Run Code Online (Sandbox Code Playgroud)
输出为:
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)
我怎样才能把同样的东西放进去Makefile?这是我尝试过的方法,但似乎不起作用:
all:
printf 'foo\nbaz\n' | sed '/foo/a\\
bar\
'
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
$ make
printf 'foo\nbaz\n' | sed '/foo/a\\
/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
我如何才能sed在Makefile中正确编写上述调用,以便在make执行all目标时将尾部斜杠和换行符正确地输入到shell中?
注意:我希望Makefile兼容POSIX,并且仅使用http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html中的功能。
我的问题:
有什么区别overflow-wrap: break-word和word-break: break-word?
非重复:
以下是一些现有的问题,乍一看似乎是重复的,但实际上并非如此。
word-break: break-all但我的问题是关于word-break: break-word)overflow-wrap和word-break属性,但我在这里的问题特别是关于break-word这个属性的值。此外,该问题被神秘地标记为上一个问题的重复,即使它不相关。)代码:
我写这似乎表明,无论此代码段overflow-wrap: break-word和word-break: break-word行为方式相同。但我不确定我是否已经考虑了所有情况。也许在某些情况下他们的行为有所不同?
.ow {
overflow-wrap: break-word;
background: lightgreen;
}
.wb {
word-break: break-word;
background: lightblue;
}
div {
width: 5em;
display: inline-block;
}Run Code Online (Sandbox Code Playgroud)
<div class="ow">
Honorificabilitudinitatibus califragilisticexpialidocious Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu
</div>
<div class="wb">
Honorificabilitudinitatibus califragilisticexpialidocious Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu
</div>
<div class="ow">
Most words are short and don't need to …Run Code Online (Sandbox Code Playgroud)代码:
from unittest.mock import MagicMock, call
mm = MagicMock()
mm().foo()['bar']
print(mm.mock_calls)
print()
mm.assert_has_calls([call(), call().foo(), call().foo().__getitem__('bar')])
Run Code Online (Sandbox Code Playgroud)
输出:
[call(), call().foo(), call().foo().__getitem__('bar')]
Traceback (most recent call last):
File "foo.py", line 9, in <module>
mm.assert_has_calls([call(), call().foo(), call().foo().__getitem__('bar')])
TypeError: tuple indices must be integers or slices, not str
Run Code Online (Sandbox Code Playgroud)
如何修复这个断言?
注意:这不是现有std::ios::sync_with_stdio(false)问题的重复。我已经经历了所有这些,但我无法cout像printf. 示例代码和证据如下所示。
我有三个源代码文件:
// ex1.cpp
#include <cstdio>
#include <chrono>
int main()
{
auto t1 = std::chrono::high_resolution_clock::now();
for (int i = 0; i < 10000000; i++) {
printf("%d\n", i);
}
auto t2 = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1);
fprintf(stderr, "%lld\n", duration.count());
}
Run Code Online (Sandbox Code Playgroud)
// ex2.cpp
#include <iostream>
#include <chrono>
int main()
{
auto t1 = std::chrono::high_resolution_clock::now();
for (int i = 0; i < 10000000; i++) {
std::cout << i << '\n';
}
auto t2 …Run Code Online (Sandbox Code Playgroud) 注意:建议的重复项处理的是unsigned intand signed int,而不是unsigned char和signed char。建议的重复问题涉及 C11。这个问题只与C89有关。这个问题可以重新讨论吗?
我的代码:
#include <stdio.h>
int main()
{
signed char c;
unsigned char d;
c = (signed char) -2;
d = (unsigned char) c;
printf("%d %d\n", c, d);
d = (unsigned char) 254;
c = (signed char) d;
printf("%d %d\n", c, d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ clang -Wall -Wextra -pedantic -std=c89 foo.c && ./a.out
-2 254
-2 254
Run Code Online (Sandbox Code Playgroud)
对于上面显示的两种转换,输出是否保证-2 254在符合标准的 C89 编译器中?或者输出取决于实施?
c ×2
c++ ×2
html ×2
newline ×2
posix ×2
assertion ×1
bash ×1
break ×1
c89 ×1
css ×1
cstdio ×1
escaping ×1
ifs ×1
iostream ×1
javascript ×1
jsdom ×1
linux ×1
literals ×1
makefile ×1
mocking ×1
node.js ×1
output ×1
python ×1
python-3.7 ×1
sed ×1
semantics ×1
shell ×1
vector ×1
w3c ×1
whitespace ×1
zsh ×1