小编dim*_*mba的帖子

在使用不同目录中编译文件的绝对路径时,如何进行ccache缓存编译?

我使用CMake创建一个makefile.CMake创建包含绝对路径的GCC线.

为了加快编译速度,我使用ccache.

从不同位置构建相同的代码(例如,几个开发人员编译相同的代码,每个代码在其主目录下)导致ccache缓存未命中.

gcc cmake ccache

5
推荐指数
2
解决办法
3015
查看次数

Eclipse C++编译警告问题

这里有一个代码来演示一个恼人的问题:

class A {
public:
    A():
        m_b(1),
        m_a(2)
        {}
private:
    int m_a;
    int m_b;
};
Run Code Online (Sandbox Code Playgroud)

这是Console视图上的输出:

make all 
Building file: ../test.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"test.d" -MT"test.d" -o"test.o" "../test.cpp"
../test.cpp: In constructor 'A::A()':
../test.cpp:9: warning: 'A::m_b' will be initialized after
../test.cpp:8: warning:   'int A::m_a'
../test.cpp:3: warning:   when initialized here
Finished building: ../test.cpp
Run Code Online (Sandbox Code Playgroud)

问题是在Problems视图中我会看到3个单独的警告(输出中包含警告字的行),而输出中确实有4行描述了一个问题.

有什么我想念的吗?

补充问题.也许这是Eclipse精神,但有一种方法可以像大多数IDE一样使Console视图可点击(例如Visual Studio,emacs ......)

谢谢迪马

c++ eclipse compilation eclipse-cdt

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

svn客户端/服务器版本

如果我理解正确版本的subversion定义:

  • 服务器上的结构存储库
  • 客户端的工作副本结构
  • 客户端和服务器之间的API

一旦我们安装了svn服务器,我们就不会触摸/升级它.

在客户端,事情变得更加复杂.

在客户端(Windows),我们目前使用tortoisesvn.它的版本(如果我错了,请纠正我)对应于颠覆版本.

现在,我们将我们的应用程序移植到Linux,因此我们考虑使用其他svn客户端(svn命令行实用程序,Eclipse插件和一些GUI前端).

现在的问题是:

  1. 有几个不同的客户可以使用相同的结账代码吗?如果是,那么这意味着我需要刻意拿起要使用的客户端版本,因为每个客户端都希望在.svn目录中找到特定的格式/数据?

  2. 服务器版本和客户端之间有什么关系?例如,如果服务器端是1.4而客户端是1.6,那么这意味着某些1.6功能不起作用?

  3. 是不是版本的subversion客户端对应于subverions的版本,例如rapidvn而不是tortoisesvn

svn version-control

4
推荐指数
2
解决办法
9070
查看次数

Vector,Size_type和Encapsulation

我有一个类具有私有数据成员的类vector< A*>.

该类有两个实际使用的公共方法vector<A*>::size_type:

  1. 返回向量中元素数量的方法
  2. 方法通过索引返回向量中的元素

我可以在类的公共部分添加以下typedef:

typedef vector :: size_type SIZE_t;

但恕我直言,它暴露了太多关于类实现的细节.

另一种方法是使用size_t.

你怎么看?

c++ encapsulation stl

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

尽可能在本地声明变量

我是Linux内核开发的新手.

困扰我的一件事是声明和初始化变量的方式.

我的印象是代码使用C89/ANSI C的变量声明放置规则(变量在块的开头声明),而C99放宽了规则.

我的背景是C++,很多人建议"非常聪明的人"尽可能在本地声明变量 - 在同一条指令中更好地声明和初始化:

在Linux内核中初始化变量的可接受方法是什么?

c coding-style linux-kernel

4
推荐指数
2
解决办法
2010
查看次数

运行并行make时出错

考虑以下make:

all: a b

a:
        echo a
        exit 1


b:
        echo b start
        sleep 1
        echo b end
Run Code Online (Sandbox Code Playgroud)

make -j2我收到以下输出时运行它:

echo a
echo b start
a
exit 1
b start
sleep 1
make: *** [a] Error 1
make: *** Waiting for unfinished jobs....
echo b end
b end
Run Code Online (Sandbox Code Playgroud)

我们有一个很大的make文件,很容易错过错误,因为在执行结束时没有错误消息.

是否有一种方法可以在make执行结束时出现错误消息?

更新:

请参阅我的可能解决方案如何从make中检查make退出状态.

linux makefile compilation gnu-make

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

一种破坏"线程"类的方法

这是我的线程类的骨架:

class MyThread {
public:
   virutal ~MyThread();

   // will start thread with svc() as thread entry point
   void start() = 0;        

   // derive class will specialize what the thread should do
   virtual void svc() = 0;                
};
Run Code Online (Sandbox Code Playgroud)

在代码的某处我创建了一个实例,MyThread后来我想要销毁它.在这种情况下MyThread~MyThread()被称为.MyThread:svc()仍在运行并使用对象的数据成员.因此MyThread:svc(),在继续使用析构函数之前,我需要礼貌地告知停止旋转.

破坏线程对象的可接受方法是什么?

注意:我正在寻找平台无关的解决方案.

UPD:很明显问题的根源在于C++对象代表线程和OS线程之间没有关系.所以问题是:在对象去除的上下文中,是否有一种可接受的方法可以使线程对象像普通的C++对象一样运行,或者它应该被视为一个不寻常的对象(例如,我们应该在调用它之前调用join()吗?

c++ multithreading

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

将const指针定义为const字符串

乌尔里希·德雷珀(Ulrich Drepper)的醉酒,看到两个看似令人困惑的参赛作品.

第一个(全局空间中的字符串)中,Ulrich声明字符串应定义为:

const char _pcre_ucp_names[] = "blabla";
Run Code Online (Sandbox Code Playgroud)

虽然已经在第二个(函数中的字符串),他认为它应该声明为:

static const char _pcre_ucp_names[] = "blabla";
Run Code Online (Sandbox Code Playgroud)

你能解释什么是更好的名称来解析一个字符串?

UDP:

首先,我删除了C++标记 - 这个问题对C和C++都有效.所以我认为答案不能解释类/函数/文件范围中的静态意义是否相关.

在回答之前阅读文章.文章涉及内存使用 - 存储实际数据(在.rodata或.data部分),字符串应该重新定位(如果我们谈论unix/linux共享对象),是否可以更改字符串与否.

UDP2第一个中,它表示对于全局变量的形式:

(1) const char *a = "...";
Run Code Online (Sandbox Code Playgroud)

不太好

(2) const char a[] = "..."
Run Code Online (Sandbox Code Playgroud)

为什么?我一直认为(1)更好,因为(2)实际上复制了我们分配它的字符串,而(1)只指向我们分配的字符串.

c coding-style

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

抓住或不抓住

应用程序应该捕获SIGSEV,SIGBUS等"坏"信号吗?

c++ linux signals

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

C 宏赋值

我有一个以下形式的结构:

struct foo {
   bool has_value;
   int value;
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个宏,它可以用来赋值,如下所示:

ASSIGN(foo) = 0;
   or
ASSIGN(foo) += 5;
Run Code Online (Sandbox Code Playgroud)

当宏为:

#define ASSIGN(s) \
    s->has_value = true; s->value
Run Code Online (Sandbox Code Playgroud)

然而,宏并不安全。在下面的示例中,if将“吃掉”宏的第一部分ASSIGN

if (cond)
    ASSIGN(foo) += 5;
Run Code Online (Sandbox Code Playgroud)

关于如何确保安全有什么建议ASSIGN

c macros

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