标签: c

如何在C中模拟命名空间?

在C++中,可以使用命名空间来保持独立组在同一代码库中工作,从而无意中创建具有相同名称的函数,从而产生冲突.我的问题是,在命名空间的概念出来之前,如何在C中模拟命名空间.

c c++

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

为什么gcc会将符号添加到非调试版本中?

当我使用gcc进行发布构建时(即我没有指定-g),我似乎仍然在二进制文件中使用符号,并且必须使用strip它们来删除它们.事实上,我仍然可以断点函数并在gdb中获得回溯(尽管没有行号).

这让我感到惊讶 - 任何人都能解释为什么会这样吗

例如

#include <stdio.h>

static void blah(void)
{
    printf("hello world\n");
}
int main(int argc, char *argv[])
{
    blah();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc -o foo foo.c

nm foo | grep blah:

08048374 t blah

c gcc debug-symbols

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

有没有LAME c ++ wraper\simplifier(在Linux Mac上工作,从纯代码中获胜)?

所以我想创建简单的pcm到mp3 C++项目.我希望它使用LAME.我喜欢LAME,但它真的是biiig.所以我需要某种OpenSource,使用纯粹的代码和纯粹的蹩脚代码工作流简化器.所以说我用PCM和DEST文件给它文件.打电话给像

LameSimple.ToMP3(file with PCM, File with MP3 , 44100, 16, MP3, VBR);

矿石这样的东西在4-5行(应该存在的例子)和我有我需要的vhat应该是轻,简单,powerfool,opensource,crossplatform.

有这样的事吗?!?

c c++ cross-platform wrapper lame

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

是否有gSOAP的轻量级替代品?

我已经尝试使用gSOAP访问Web服务(例如,使用提供的WSDL生成C存根,然后在应用程序中使用它们).但是,我发现生成的.c和目标文件非常大(几兆字节),这是我工作的嵌入式环境中的一个问题.

您是否知道任何更简单的SOAP库,或者我是否必须回归到通用XML生成器和解析器(如ezXML)?

c soap gsoap soap-client

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

posix管道是轻量级的吗?

在Linux应用程序中,我使用管道在线程之间传递信息.

使用管道的想法是我可以使用poll(2)一次等待多个管道.这在实践中运作良好,我的线程大多数时间都在睡觉.如果有事可做,他们只会醒来.

在用户空间中,管道看起来就像两个文件句柄.现在我想知道这些管道在OS端使用了多少资源.

顺便说一句:在我的应用程序中,我只是偶尔发送单个字节.把我的管道想象成简单的消息队列,它允许我唤醒接收线程,告诉他们发送一些状态数据或终止.

c linux posix pipe

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

为什么嵌入式系统上的寄存器需要读 - 修改 - 写?

我正在阅读http://embeddedgurus.com/embedded-bridge/2010/03/different-bit-types-in-different-registers/,其中说:

通过读/写位,固件可在需要时设置和清除位.它通常首先读取寄存器,修改所需的位,然后将修改后的值写回

我已经遇到了这个问题,同时保留了一些由老盐嵌入式人员编写的生产代码.我不明白为什么这是必要的.

当我想设置/清除一点时,我总是只是或者使用位掩码.在我看来,这解决了任何线程安全问题,因为我假设设置(通过赋值或使用掩码进行设置)寄存器只需要一个周期.另一方面,如果您首先读取寄存器,然后修改,然后写入,读取和写入之间发生的中断可能导致向寄存器写入旧值.

那么为什么读 - 修改 - 写?还有必要吗?

c embedded

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

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

这个递归函数困惑我,发生了什么?

我正在玩递归并完成这个简单的功能.我假设它会打印9-0到stdout,但是,它打印0-9.我看不出这是怎么回事.

int main()
{
        rec(10);
        return 0;
}

int rec(int n){
        if(n > 0)
                printf("%d\n", rec(n -1));
        return n;
}
Run Code Online (Sandbox Code Playgroud)

c recursion

12
推荐指数
4
解决办法
1161
查看次数

如何初始化unsigned long long类型?

我正在尝试初始化一个unsigned long long int类型.但编译器抛出错误

"error: integer constant is too large for "long" type ".

初始化如下所示:

unsigned long long temp = 1298307964911120440;
Run Code Online (Sandbox Code Playgroud)

任何人都可以让我知道问题是什么,并提出相同的解决方案.

c c++ types

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

原子引用计数共享不可变数据是否需要内存屏障?

我有一些不可变的数据结构,我想使用引用计数来管理,在SMP系统上的线程之间共享它们.

这是发布代码的样子:

void avocado_release(struct avocado *p)
{
    if (atomic_dec(p->refcount) == 0) {
        free(p->pit);
        free(p->juicy_innards);
        free(p);
    }
}
Run Code Online (Sandbox Code Playgroud)

是否atomic_dec需要在它的内存屏障?如果是这样,什么样的记忆障碍?

附加说明:应用程序必须在PowerPC和x86上运行,因此欢迎任何特定于处理器的信息.我已经知道GCC原子内置.至于不变性,refcount是唯一在对象持续时间内发生变化的字段.

c multithreading atomic refcounting memory-barriers

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