小编Lon*_*ner的帖子

当stdout被重定向到文件时,为什么C程序的输出顺序不同?

这是我的计划.

#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)

为什么涉及重定向时输出的顺序不同?

c linux io-redirection output

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

zsh 在参数扩展后没有被 IFS 拆分

这是我的代码,用于遍历冒号分隔的值并对每个值执行某些操作。

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

bash shell posix zsh ifs

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

动态创建 std::vector 并将其传递给另一个函数的各种方法

我正在尝试各种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)

c++ vector parameter-passing literals semantics

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

为什么带有换行符的 PRE 元素不会在输出中产生空行?

实施例1

pre {
  background: lightblue;
}
Run Code Online (Sandbox Code Playgroud)
<pre>
<code>
foo
</code>
</pre>
Run Code Online (Sandbox Code Playgroud)

上方和下方出现空白行foo。这是预期的,因为 PRE 元素中有换行符。

实施例2

pre {
  background: lightblue;
}
Run Code Online (Sandbox Code Playgroud)
<pre><code>
foo
</code></pre>
Run Code Online (Sandbox Code Playgroud)

上方出现空白行foo,但下方不出现。为什么?

实施例3

pre {
  background: lightblue;
}
Run Code Online (Sandbox Code Playgroud)
<pre><code>foo</code></pre>
Run Code Online (Sandbox Code Playgroud)

前后不再有空行,foo因为 HTML 代码中没有换行符。

实施例4

pre {
  background: lightblue;
}
Run Code Online (Sandbox Code Playgroud)
<pre>
<code>foo</code>
</pre>
Run Code Online (Sandbox Code Playgroud)

<pre>之后和之前都有换行符</pre>foo所以我期待输出中前后有空行。为什么这个例子中没有空行?

问题

  1. 为什么示例2中只出现一个空行?
  2. 为什么示例 4 的输出中没有空行?

html whitespace w3c newline

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

如何使用 JSDOM 加载本地 JavaScript 文件?

我无法使用 JSDOM(版本 13.0.0)从具有相对路径的本地文件系统加载脚本。

我查看了以下问题,但它们没有回答我的问题:

文件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)

javascript node.js jsdom

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

如何在Makefile(POSIX)中使用的sed命令中保持换行符完整?

注意:这不是“ 是否可以在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中的功能。

posix newline makefile escaping sed

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

`overflow-wrap: break-word` 和 `word-break: break-word` 的行为是否不同?

我的问题:

有什么区别overflow-wrap: break-wordword-break: break-word

非重复:

以下是一些现有的问题,乍一看似乎是重复的,但实际上并非如此。

代码:

我写这似乎表明,无论此代码段overflow-wrap: break-wordword-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)

html css break

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

如何为 __getitem__() 调用执行 assert_has_calls?

代码:

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)

如何修复这个断言?

python mocking assertion python-unittest python-3.7

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

是否可以使 C++ iostream std::cout 与 cstdio printf() 一样高效?

注意:这不是现有std::ios::sync_with_stdio(false)问题的重复。我已经经历了所有这些,但我无法coutprintf. 示例代码和证据如下所示。

我有三个源代码文件:

// 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)

c++ synchronization iostream cstdio

5
推荐指数
0
解决办法
48
查看次数

C89 中从无符号字符到有符号字符的转换(反之亦然)是否定义良好?

注意:建议的重复项处理的是unsigned intand signed int,而不是unsigned charsigned 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 c89 undefined-behavior

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