http://www.regular-expressions.info/posixbrackets.html上有一个表格,它总结了所有POSIX括号表达式,并提供了等效的简写.
我无法理解为什么这不\S作为简写[:graph:].他们不一样吗?如果是的话,那么请您举例解释我们的不同之处吗?
我正在使用豪华测试我的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 -v是https://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?
我遇到过两种流行的方法来编写可移植且符合 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一个示例与另一个示例之间的内容是否存在差异?
这不起作用.
>>> 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) 我有一个 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 是什么,可以最大限度地减少食谱中的重复?
我想知道什么是正确的printf自定义整数类型,如格式说明time_t,socklen_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_t,struct addrinfo因为不能保证socklen_t是 type int。
我们怎样才能正确地打印被定义为这样的整数socklen_t,time_t等等?我担心这里的便携性。当程序在具有不同定义的不同实现上编译时,我不应该修改格式说明符socklen_t。
我正在通过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) 以下程序编译正常.
#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任何大小?
这是我的代码:
#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_t在cstdint所述内std命名空间.
在我的代码中,我既没有包含cstdint也没有使用std命名空间.为什么编译器不抱怨呢?
我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)