小编Sie*_*geX的帖子

在bash中,如何将功能键绑定到命令?

示例:我想将F12键绑定到命令,echo "foobar"这样每次我点击F12消息"foobar"都会打印到屏幕上.理想情况下,它可以是任意shell命令,而不仅仅是内置命令.怎么会这样呢?

bash shell binding

84
推荐指数
3
解决办法
7万
查看次数

链接时可以混用静态和共享对象库吗?

我有一个C项目,生成十个可执行文件,我想要静态链接所有这些可执行文件.我面临的问题是这些可执行文件中的一个使用第三方库,其中只有共享对象版本可用.

如果我将-static标志传递给gcc,ld将会错误地说它无法找到有问题的库(我认为它正在寻找.a版本)并且不会构建可执行文件.理想情况下,如果无法找到静态库,我希望能够尽可能地告诉'ld'静态链接并故障转移到共享对象库.

在interium中我尝试了类似gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe希望'ld'在lib1和lib2中静态链接,但只对lib3rdparty有运行时依赖.不幸的是,这不符合我的意图; 相反,-shared标志覆盖了-static标志,所有内容都被编译为共享对象.

是静态链接一个全有或全无的交易,还是有某种方式我可以混合和匹配?

c linker static gcc

53
推荐指数
1
解决办法
3万
查看次数

什么定义了C中的opaque类型,它们何时是必需的和/或有用的?

我已经看到了"不透明类型"的概念,但我真的没有找到一个简洁的答案,关于什么定义了C中的opaque类型,更重要的是它们允许我们用它们的存在解决的问题.谢谢

c types

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

我可以在哪里合法地声明C99中的变量?

当我第一次被介绍到CI被告知总是在函数的顶部声明我的变量.现在我对语言有了很强的把握,我将重点放在编码风格上,特别是限制了变量的范围.我已经阅读了限制范围的好处,我遇到了一个有趣的例子.显然,C99允许你这样做......

for (int i = 0; i < 10; i++)
{
   puts("hello");
}
Run Code Online (Sandbox Code Playgroud)

我原以为一个变量的作用域是由最内层的限制周围的花括号{ },但在上面的例子中int i出现通过的,即使是他们的之外声明for循环的花括号中范围有限.

我试图扩展上面的例子fgets()来做我认为类似的东西,但这两个都给了我一个语法错误.

fgets(char fpath[80], 80, stdin);*见说明**

fgets(char* fpath = malloc(80), 80, stdin);

那么,在C99中声明变量的确切位置是合法的吗?for循环示例是规则的例外吗?这适用于whiledo while循环吗?

*注意**:我甚至不确定这在语法上是否正确,即使我可以在那里声明char数组,因为fgets()它正在寻找指向char的指针而不是指向char 数组80的指针.这就是我尝试该malloc()版本的原因.

c variables declaration

34
推荐指数
2
解决办法
7611
查看次数

除以零:未定义的行为或实现在C和/或C++中定义?

关于除零,标准说:

C99 6.5.5p5 - /运算符的结果是第一个操作数除以第二个操作数的商; %运算符的结果是余数.在这两个操作中,如果第二个操作数的值为零,则行为未定义.

C++ 03 5.6.4 - 二进制/运算符产生商,二进制%运算符从第一个表达式除以第二个表达式得到余数.如果/或%的第二个操作数为零,则行为未定义.

如果我们将上述段落视为面值,答案显然是两种语言的未定义行为.但是,如果我们进一步了解C99标准,我们会看到以下段落似乎是矛盾的(1):

C99 7.12p4 - 宏INFINITY扩展为float类型的常量表达式,表示正无穷大或无符号无穷大(如果可用);

标准是否有某种黄金法则,其中未定义的行为不能被(可能)矛盾的陈述所取代?除此之外,我认为如果你的实现定义了INFINITY宏,那么将零除法定义为这样是不合理的.但是,如果您的实现没有定义这样的宏,则行为是Undefined.

我很好奇这两种语言在这个问题上的共识是什么(如果有的话).如果我们谈论整数除法int i = 1 / 0与浮点除法,答案会改变float i = 1.0 / 0.0吗?

注意(1) C++ 03标准讨论了<cmath>包含INFINITY宏的库.

c c++ divide-by-zero undefined-behavior

24
推荐指数
3
解决办法
2万
查看次数

对"C"项目架构指南的建议?

现在,我把头脑缠绕在'C'语言上,以至于我觉得自己足够精通编写干净的代码,我想把注意力集中在项目架构指南上.我正在寻找一个包含以下主题的好资源:

  1. 如何创建一个促进代码可维护性的界面,并且可以扩展以用于将来的升级.
  2. 图书馆创建指南.例如,我应该何时考虑使用静态库和动态库.如何正确设计ABI以应对任何一个.
  3. 头文件:分区和何时分区.何时使用1:1 vs 1:许多.h到.c的示例
  4. 任何你觉得我错过的东西,但在尝试构建一个新的C项目时很重要.

理想情况下,我希望看到一些示例项目,从小到大,看看架构如何根据项目大小,功能或客户而变化.

您会为这些主题推荐哪些资源?

c architecture coding-style

19
推荐指数
2
解决办法
2157
查看次数

我提交后如何在源代码中存储新的SVN修订号?(TortoiseSVN的)

是否有可能通过TortoiseSVN知道您将在提交之前获得的SVN转数,以便我可以将rev#放入源代码注释部分?

也许有一个特殊的键名/变量我可以放入我的文件中,TortoiseSVN将自动替换为它即将提交的rev#?

这背后的动机是我可以通过查看源代码来获取最新版本,并查看它包含的SVN版本.它还给管理层带来了温暖的模糊.

svn tortoisesvn revision

14
推荐指数
2
解决办法
3万
查看次数

用awk解析字段中包含commans的csv文件

我必须使用awk在csv文件中打印出4个不同的列.问题是字符串是$ x,xxx.xx格式.当我运行常规awk命令时.

awk -F, {print $1} testfile.csv 
Run Code Online (Sandbox Code Playgroud)

我的输出结果看起来像

307.00
$132.34
30.23
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么.

"$141,818.88","$52,831,578.53","$52,788,069.53" 这大致是输入.我必须解析的文件是90,000行和大约40列这是输入的布局方式,或者至少是我必须处理的部分.对不起,如果我让你认为这不是我所说的.

如果输入为"$ 307.00","$ 132.34","$ 30.23",我希望输出为

$307.00
$132.34
$30.23
Run Code Online (Sandbox Code Playgroud)

csv awk

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

布尔表达式成语中的这个字符串文字是什么?

我的一位同事正在查看我们继承的代码库之一,并找到以下行:

ATLASSERT( rtaddress == m_lRTAddress && "Creation settings should match FIFO" );

我们不明白字符串文字的目的是什么; 这不仅仅是评论吗?我看到它的方式,如果rtaddress不相等m_lRTAddress那么由于短路将永远不会评估字符串.如果rtaddressDOES等于,m_lRTAddress则将对字符串文字进行求值,但是对于布尔表达式求值的字符串文字将始终返回true; 那有什么意义呢?

c c++

12
推荐指数
1
解决办法
248
查看次数

什么工具可以捕获C中的缓冲区溢出?

所以我有这段简单的代码,演示了一个简单的缓冲区溢出:

#include <stdio.h>

int main(void)
{
    char c[4] = { 'A', 'B', 'C', 'D' };
    char d[4] = { 'W', 'X', 'Y', 'Z' };

    printf("c[0] is '%c'\n", c[0]);

    d[4] = 'Z'; /* Overflow that overwrites c[0] */

    printf("c[0] is '%c'\n", c[0]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ ./a.out
c[0] is 'A'
c[0] is 'Z'
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下gcc选项编译此代码,并使用飞行颜色传递:

gcc -Wall -Wextra -Wformat=2 -Wswitch-default -Wcast-align -Wpointer-arith \
    -Wbad-function-cast -Wstrict-prototypes -Winline -Wundef -Wnested-externs \
    -Wcast-qual -Wshadow -Wwrite-strings -Wconversion -Wunreachable-code \
    -Wstrict-aliasing=2 -ffloat-store -fno-common -fstrict-aliasing \
    -Wstack-protector …
Run Code Online (Sandbox Code Playgroud)

c debugging stack

8
推荐指数
1
解决办法
5306
查看次数