小编Lon*_*ner的帖子

[:graph:]在正则表达式中等于\ S吗?

http://www.regular-expressions.info/posixbrackets.html上有一个表格,它总结了所有POSIX括号表达式,并提供了等效的简写.

我无法理解为什么这不\S作为简写[:graph:].他们不一样吗?如果是的话,那么请您举例解释我们的不同之处吗?

regex posix

4
推荐指数
1
解决办法
2621
查看次数

POSIX shell中是否需要`command -v`选项?豪华是否符合POSIX?

我正在使用豪华测试我的shell脚本,我想在任何POSIX兼容的shell上成功运行.在这样做时,我发现command -v豪华版不支持该选项.也不是type.

我理解type不支持,因为POSIX不要求它.这将在https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=397601#10中讨论.

"type"是X/Open扩展名; 请注意POSIX标准中的XSI标记.由于POSIX或debian政策不要求它,因此豪华没有实现它.

http://pubs.opengroup.org/onlinepubs/009695399/utilities/type.html确认了这一点.请参阅[XSI]概要中的保证金代码.

但我不明白为什么command -v豪华不支持选项.

有些人提到这command -vhttps://bugs.debian.org/cgi-bin/bugreport.cgi?bug=218530#131的可选项.

并且"命令-v"是一个可选功能,根据 http://www.opengroup.org/onlinepubs/009695399/utilities/ 提及它.

但我无法在http://pubs.opengroup.org/onlinepubs/009695399/utilities/command.html上确认这一点.你能在这里看到任何表明该-v选项是可选的command吗?

如果没有,是posh不符合POSIX?

shell posix

4
推荐指数
1
解决办法
509
查看次数

strncat 和 strncpy 编写安全字符串复制函数有什么区别吗?

我遇到过两种流行的方法来编写可移植且符合 C89 的安全复制函数。

示例1:

strncpy(dst, src, size);
dst[size - 1] = '\0';
Run Code Online (Sandbox Code Playgroud)

示例2:

dst[0] = '\0'
strncat(dst, src, size - 1);
Run Code Online (Sandbox Code Playgroud)

这些方法是否提供完全相同的结果,或者dst一个示例与另一个示例之间的内容是否存在差异?

c string c89

4
推荐指数
1
解决办法
3170
查看次数

为什么围绕一个整数需要括号来调用它上面的方法?

这不起作用.

>>> 10.__str__()
  File "<stdin>", line 1
    10.__str__()
             ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

但这很有效.

>>> (10).__str__()
'10'
Run Code Online (Sandbox Code Playgroud)

为什么围绕整数需要括号才能调用其方法?列表或其他数据类型似乎不需要它.

>>> [1, 2].__str__()
'[1, 2]'
>>> {'a': 'foo'}.__str__()
"{'a': 'foo'}"
Run Code Online (Sandbox Code Playgroud)

python syntax

4
推荐指数
1
解决办法
332
查看次数

如何避免 Makefile 目标中具有类似配方的重复?

我有一个 Makefile,其中有很多目标,并且每个目标的配方非常相似。

foo:
    gcc foo.c -o foo
    mv foo ~/bin

bar:
    gcc bar.c -o bar
    mv bar ~/bin

baz:
    gcc baz.c -o baz
    mv baz ~/bin
Run Code Online (Sandbox Code Playgroud)

我想避免所有这些重复。我想要像下面这样的东西(这不是有效的语法;这只表达了我的意图)。

TARGET_NAME:
    gcc $(TARGET_NAME).c -o $(TARGET_NAME)
    mv $(TARGET_NAME) ~/bin
Run Code Online (Sandbox Code Playgroud)

可以做这样的事情吗?如果没有,我能编写的最好的 Makefile 是什么,可以最大限度地减少食谱中的重复?

makefile dry

4
推荐指数
1
解决办法
1331
查看次数

更正 C 中自定义整数类型的格式说明符以确保可移植性

我想知道什么是正确的printf自定义整数类型,如格式说明time_tsocklen_t等等。

例如,

#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

int main()
{
    struct addrinfo *ai;

    if (getaddrinfo("localhost", "http", NULL, &ai) != 0) {
        printf("error\n");
        return EXIT_FAILURE;
    }

    printf("%d\n", ai->ai_addrlen);
}
Run Code Online (Sandbox Code Playgroud)

尽管该程序编译并运行良好,但我对使用定义为in类型的%dto 打印ai_addrlen并不满意socklen_tstruct addrinfo因为不能保证socklen_t是 type int

我们怎样才能正确地打印被定义为这样的整数socklen_ttime_t等等?我担心这里的便携性。当程序在具有不同定义的不同实现上编译时,我不应该修改格式说明符socklen_t

c portability cross-platform

4
推荐指数
1
解决办法
537
查看次数

在不调用semctl()的情况下调用semget()后跟semop()是否正确?

我正在通过Beej的Unix IPC指南中的信号量示例程序.

示例程序包含以下信号量初始化代码.我只发布一个与问题相关的片段.要查看完整代码,请访问我上面提供的链接.

/*
** initsem() -- more-than-inspired by W. Richard Stevens' UNIX Network
** Programming 2nd edition, volume 2, lockvsem.c, page 295.
*/
int initsem(key_t key, int nsems)  /* key from ftok() */
{
    int i;
    union semun arg;
    struct semid_ds buf;
    struct sembuf sb;
    int semid;

    semid = semget(key, nsems, IPC_CREAT | IPC_EXCL | 0666);

    if (semid >= 0) { /* we got it first */
        sb.sem_op = 1; sb.sem_flg = 0;
        arg.val = 1;

        printf("press …
Run Code Online (Sandbox Code Playgroud)

c semaphore ipc

4
推荐指数
1
解决办法
915
查看次数

如何将任何大小的bitset传递给函数?

以下程序编译正常.

#include <iostream>
#include <bitset>

void foo(std::bitset<10> n)
{
    std::cout << n.size() << "\n";
}

int main()
{
    std::bitset<10> n;
    foo(n);
}
Run Code Online (Sandbox Code Playgroud)
$ g++ -std=c++11 -Wall -Wextra -pedantic foo.cpp
$ ./a.out 
10
Run Code Online (Sandbox Code Playgroud)

如何修改foo()函数以使其可以接受bitset任何大小?

c++ templates

4
推荐指数
1
解决办法
684
查看次数

如何在不使用std的情况下使用int32_t?

这是我的代码:

#include <iostream>

int main()
{
    int32_t i = 5;
    std::cout << "i: " << i << '\n';
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

$ clang++ -std=c++11 -pedantic -Wall -Wextra foo.cpp && ./a.out 
i: 5
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

C++标准出现,以限定int32_tcstdint所述内std命名空间.

在我的代码中,我既没有包含cstdint也没有使用std命名空间.为什么编译器不抱怨呢?

c++ types namespaces header c++11

4
推荐指数
1
解决办法
545
查看次数

指定 glob 模式作为 Makefile 目标

make在 macOS High Sierra 版本 10.13.6 上的版本如下所示:

$ make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i386-apple-darwin11.3.0
Run Code Online (Sandbox Code Playgroud)

我当前的目录如下所示:

$ ls -1
Makefile
a.txt
b.txt
c.txt
Run Code Online (Sandbox Code Playgroud)

我的Makefile看起来像这样:

*.txt: FORCE
        echo Target $@ invoked

FORCE:
Run Code Online (Sandbox Code Playgroud)

我可以Makefile这样使用它:

$ make a.txt
echo Target a.txt invoked
Target …
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

4
推荐指数
1
解决办法
8901
查看次数