小编Kus*_*nda的帖子

"#!/ bin/sh"行在UNIX shell脚本中的含义是什么?

我正在阅读一些shell脚本教程并找到以下示例程序:

#!/bin/sh
clear
echo "HELLO WORLD"
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我#!/bin/sh在评论中提及' ' 的意义是什么?

unix shell shebang sh

134
推荐指数
4
解决办法
18万
查看次数

获取shell命令输出的第一行

在尝试读取版本号时vim,我得到了许多额外的行,我需要忽略它们.我试着阅读手册head并尝试以下命令:

vim --version | head -n 1
Run Code Online (Sandbox Code Playgroud)

我想知道这是否是正确的方法?

linux bash shell

64
推荐指数
2
解决办法
6万
查看次数

37
推荐指数
3
解决办法
6万
查看次数

正则表达式忽略捕获的中间部分

我想要一个正则表达式,当应用于:"firstsecondthird"将匹配"第三个"(在单个组中,即在C#Match.Value中将等于"第三个").

那可能吗?我们可以忽略后缀或前缀,但是中间?

c# regex

10
推荐指数
2
解决办法
4933
查看次数

C中volatile表达式中的指针

说我有一个结构

typedef struct A{

int a1;
int *a2;

}A_t;
Run Code Online (Sandbox Code Playgroud)

现在如果我声明这个结构的实例是volatile的 -

volatile A_t trial;
Run Code Online (Sandbox Code Playgroud)

我使用volatile指针来访问这个volatile结构.

volatile A_t *ptrToTrial = &trial;
Run Code Online (Sandbox Code Playgroud)

如果我尝试这样做:

int *ptrToField = ptrToTrial->a2;
Run Code Online (Sandbox Code Playgroud)

应该ptrToField也是不稳定的吗?编译器prtToField是否会在没有明确提及的情况下知道它是volatile,因为它是通过ptrToTrialvolatile 访问的?

如果有功能 -

function trialFunction(A_t *trialptr)
{
     int *p = trialptr->a2;

}
Run Code Online (Sandbox Code Playgroud)

如果我们用上面声明的volatile ptr调用这个函数 -

trailFunction(ptrToTrial)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:volatile A_t* is incompatible with parameter of type A_t.

因此,如果我将函数定义更改为include volatile,我看不到错误.

function trialFunction(volatile A_t *trialptr)
{
     int *p = trialptr->a2;

}
Run Code Online (Sandbox Code Playgroud)

编译器是否也应该抱怨指针p- 因为ptrialptr->a2是非易失性的并且是易失性的?

c struct pointers

9
推荐指数
1
解决办法
633
查看次数

在Bash条件中感叹号是在括号内还是在括号内是否重要?

似乎你可以写一个否定的条件

if ! [[ ... ]]; then
Run Code Online (Sandbox Code Playgroud)

要么

if [[ ! ... ]]; then
Run Code Online (Sandbox Code Playgroud)

是否有理由选择一种或另一种方法,假设操作的语义相同?(即,显然,在第二个版本中,如果...是复合语句并且您不小心将表达式正确分组,那么您最终可能只会否定表达式的第一部分.)

bash shell

7
推荐指数
1
解决办法
603
查看次数

如何在 GDB 中将二进制值(1010)打印成十进制值(10)?

我想在 中打印 1010 的十进制值gdb,但它打印的结果是我最后给出的结果。

(gdb) 
(gdb) p/d 1010
$1 = 1010
(gdb)
Run Code Online (Sandbox Code Playgroud)

c unix linux gdb

6
推荐指数
1
解决办法
1390
查看次数

调用free()包装器:解除引用类型惩罚指针将破坏严格别名规则

我试图在这里阅读其他类似标题的问题,但是对于我来说,能够将解决方案(甚至解释)应用到我自己的问题上看起来有点过于复杂,这似乎是更简单的性质.

在我的例子中,我有一个包装器free(),NULL在释放它之后将指针设置为:

void myfree(void **ptr)
{
    free(*ptr);
    *ptr = NULL;
}
Run Code Online (Sandbox Code Playgroud)

在我正在研究的项目中,它被称为:

myfree((void **)&a);
Run Code Online (Sandbox Code Playgroud)

这使得gcc(OpenBSD上的4.2.1)发出警告"解除引用类型 - 惩罚指针将破坏严格别名规则",如果我将优化级别调高-O3并添加-Wall(否则).

调用myfree()以下方法不会使编译器发出该警告:

myfree((void *)&a);
Run Code Online (Sandbox Code Playgroud)

所以我想知道我们是否应该改变我们打电话的方式myfree().

我相信我用第一种调用方式调用未定义的行为myfree(),但我无法解决原因.此外,在我可以访问(clanggcc)所有系统(OpenBSD,Mac OS X和Linux)上的所有编译器上,这是唯一实际上给我警告的编译器和系统(我知道发出警告是一个不错的选项) ).

在调用之前,之内和之后打印指针的值myfree(),使用两种方式调用它,给我相同的结果(但如果它是未定义的行为,则可能没有任何意义):

#include <stdio.h>
#include <stdlib.h>

void myfree(void **ptr)
{
    printf("(in myfree) ptr = %p\n", *ptr);
    free(*ptr);
    *ptr = NULL;
}

int main(void)
{
    int *a, *b;

    a = malloc(100 * sizeof *a);
    b …
Run Code Online (Sandbox Code Playgroud)

c pointers strict-aliasing

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

intel内在函数的问题

大家好,我正在尝试使用像这样的英特尔内在函数

void test()
{
    uint16_t n1 = 5;
    uint16_t n2 = 2;
    __m64 vec1, vec2, res;

    vec1 = _mm_set_pi16(n1, n1, n1, n1);
    vec2 = _mm_set_pi16(n2, n2, n2, n2);

    res = _mm_add_pi16(vec1, vec2);

    printf("%u %u %u %u \n", vec1[0], vec1[1], vec1[2], vec1[3]);
    printf("%u %u %u %u \n", vec2[0], vec2[1], vec2[2], vec2[3]);
    printf("%u %u %u %u \n", res[0], res[1], res[2], res[3]);
}   
Run Code Online (Sandbox Code Playgroud)

但是我得到的结果很奇怪:

327685 327685 131074 131074 
131074 131074 458759 458759 
458759 458759 327685 327685 
Run Code Online (Sandbox Code Playgroud)

我正在使用eclipse Mars ......我包括mmintrin.h, xmmintrin.h, …

c intel intrinsics

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

如何在Makefile中编写“安装”目标

我是新手Makefile,喜欢installMakefile. 我的Makefile将被另一个人Makefile这样调用:

DESTDIR=$(DIR_A) BINDIR=/dir_b make -C $(CURDIR)/xxxx/yyy all
Run Code Online (Sandbox Code Playgroud)

where/xxxx/yyy是 myMakefile所在的位置。

Makefile将生成 2 个我喜欢安装的二进制文件,即通过安装,我的意思是将这两个二进制文件复制到特定目录 ( BINDIR) 并使它们可执行。

install如果我的 2 个二进制文件是在文件夹中生成的,那么在这种情况下我应该如何编写目标/aaaa/bbbb/bin

c makefile

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

标签 统计

c ×5

shell ×3

bash ×2

linux ×2

pointers ×2

regex ×2

unix ×2

c# ×1

gdb ×1

intel ×1

intrinsics ×1

makefile ×1

sed ×1

sh ×1

shebang ×1

strict-aliasing ×1

struct ×1