小编Gui*_*i13的帖子

makefile中的条件OR

我想在我的makefile中启用详细编译,但我无法弄清楚如何创建一个条件OR.

让我解释一下:我希望能够通过设置指定一个详细的编译.我想保持可用,因为我们有一些使用它的脚本(并且使用其他makefile只知道)V=1 VERBOSE=1VERBOSE=1VERBOSE

所以结果必须是这两个命令是相同的:

make all VERBOSE=1 # pain to write
make all V=1
Run Code Online (Sandbox Code Playgroud)

现在,我的makefile今天看起来像这样:

ifdef VERBOSE
[issue compilation commands with verbose mode]
endif
Run Code Online (Sandbox Code Playgroud)

我想要实现的是接近C中的预处理器:

if defined(VERBOSE) || defined(V)
[issue compilation commands with verbose mode]
endif
Run Code Online (Sandbox Code Playgroud)

你知道怎么做吗?

logic conditional makefile verbose

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

为什么在*struct定义之后使用typedef*?

这两种风格:

struct _something
{
   ...
};
typedef struct _something someting;
Run Code Online (Sandbox Code Playgroud)

那种风​​格:

typedef struct _something
{
  ...
} something;
Run Code Online (Sandbox Code Playgroud)

是C中正确的typedef声明.
请注意,文件中存在结构声明是故意的:我需要访问其他地方的结构的内部组件.

第一个声明的一个缺点是,当您使用任何IDE时,自动"跳转到声明"通常会将您引导到typedef struct _something someting;而不是直接为您提供真实的结构定义.

在第二种方法中,您可以直接进入结构定义.

是否有人会使用第一种方法?
我正在处理的代码充满了这些......
维护者只是一个坏/好的习惯?

c struct typedef

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

如何实现高效的C++运行时统计信息

我想知道是否有一种很好的方法来监控我的应用程序内部,最好是以现有库的形式.

我的应用程序是多线程的,并使用消息传递系统在线程之间和外部世界之间进行通信.我的目标是监控发送的消息类型,频率等.

还可以以更一般的方式存在其他统计信息,例如每分钟生成多少线程,调用多少新/删除,或者应用程序的更具体方面; 你说出来的.

什么是令人敬畏的是像你的谷歌Chrome浏览器的"内部页面",如网络或chrome://跟踪,但以命令行方式.

如果有一个通用的库足以满足我的应用程序的特性,那就太好了.
否则我准备实施一个可以完成这项工作的小班,但我不知道从哪里开始.我认为最重要的是代码不应该过多干扰,因此性能不会受到影响.

你们对这件事有什么指示吗?

编辑:我的应用程序在Linux上运行,在嵌入式环境中,很遗憾Valgrind不支持:(

c++ linux embedded statistics runtime

11
推荐指数
1
解决办法
2503
查看次数

Qt:在QComboBox中使用枚举

我有一组需要编辑的参数,其中一些是枚举.

截至今天,我在QSpinBox中使用枚举的原始值,这根本不友好.你必须自己记住这些值并设置好的值:

我的参数编辑器

例如,E_Range可以使用以下代码呈现组合框:

typedef enum {
    ERANGE_2_5  = 0, /*!< +/- 2.5 V */
    ERANGE_5    = 1, /*!< +/- 5 V */
    ERANGE_10   = 2, /*!< +/- 10 V */
    ERANGE_AUTO = 3  /*!< Auto range */
} TVoltageRange_e;
Run Code Online (Sandbox Code Playgroud)

我没有找到任何关于在QComboBox中使用枚举的信息.可能吗?
如果是,步骤是什么?

我的意思是,我想我必须通过Qt声明枚举,以便它与Qt元对象"可枚举".但是从那里开始,我不确定.

c++ qt combobox

11
推荐指数
2
解决办法
6082
查看次数

在unix套接字上写入原子?

我正在尝试在IPC机制的管道unix套接字之间进行选择.
两者都支持select()epoll()伟大的功能.

现在,管道具有4kB(截至今天)"原子"写入,这由Linux内核保证.
在unix套接字的情况下是否存在这样的功能?我找不到任何明确说明这一点的文件.

假设我使用UNIX套接字,并从客户端写入x字节的数据.我确定当我的服务器崩溃时,这些x字节将写在套接字的服务器端select()吗?

在同一主题上,使用SOCK_DGRAM确保写入是原子的(如果可以保证),因为数据报应该单个明确定义的消息?
那么使用SOCK_STREAM作为传输模式会有什么不同?

提前致谢.

unix sockets atomic

10
推荐指数
1
解决办法
6890
查看次数

C++:使用memset还是结构构造函数?什么是最快的?

我无法弄清楚C++中哪个更好:

我使用结构来管理消息队列中的客户端,结构如下所示:

typedef struct _MsgClient {
  int handle;
  int message_class;
  void *callback;
  void *private_data;
  int priority;
} MsgClient;
Run Code Online (Sandbox Code Playgroud)

所有这些都是POD实体.

现在,我有一些这些结构的数组,我存储我的客户端(我使用数组作为内存约束,我必须限制碎片).所以在我的课上我有这样的事情:

class Foo
{
private:
  MsgClient _clients[32]; 

public:
  Foo()
  {
     memset(_clients, 0x0, sizeof(_clients));
  }

}
Run Code Online (Sandbox Code Playgroud)

现在,我在这里和那里读到,使用memset在C++中很糟糕,而且我宁愿在我的结构中使用构造函数.我想到这样的事情:

typedef struct _MsgClient {
  int handle;
  int message_class;
  void *callback;
  void *private_data;
  int priority;
  // struct constructor
  _MsgClient(): handle(0), message_class(0), callback(NULL), private_data(NULL), priority(0) {};
} MsgClient;
Run Code Online (Sandbox Code Playgroud)

...将消除对的需要memset.但我担心的是,当初始化foo时,结构构造函数将被调用32次,而不是将其优化为数组占用的内存中的简单零.

你对此有何看法?
我刚刚发现:成员结构是否可以从构造函数初始化列表中归零,而无需调用memset?,在我的情况下是否合适(这是不同的:我有一个数组,而不是结构的单个实例)?
另外,根据这篇文章,在我的结构中添加构造函数会自动将其转换为非POD结构,是不是?

c++ performance constructor struct initialization

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

MethodHandles还是LambdaMetafactory?

在我的工作中,我们有一个用于指定数学公式的DSL,我们后来应用于很多点(数百万).

截至今天,我们构建公式的AST,并访问每个节点以产生我们称之为"评估者"的东西.然后,我们向该求值程序传递公式的参数,并为每个点进行计算.

例如,我们有这个公式: x * (3 + y)

           ??????
     ???????mult???????
     ?     ??????     ?
     ?                ?
  ???v???          ???v???
  ?  x  ?      ????? add ????
  ???????      ?   ???????  ?
               ?            ?
            ???v???      ???v???
            ?  3  ?      ?  y  ?
            ???????      ???????
Run Code Online (Sandbox Code Playgroud)

我们的评估员将为每个步骤发出"评估"对象.

这种方法易于编程,但效率不高.

所以我开始研究方法句柄来构建一个"组合"的方法句柄,以加快最近的速度.

这样的事情:我有我的"算术"课:

public class Arithmetics {

  public static double add(double a, double b){
      return a+b;
  }

  public static double mult(double a, double b){
      return a*b;
  }

}
Run Code Online (Sandbox Code Playgroud)

在构建我的AST时,我使用MethodHandles.lookup()来直接获取它们的句柄并组合它们.沿着这些方向的东西,但在一棵树上:

Method add = ArithmeticOperator.class.getDeclaredMethod("add", double.class, double.class);
Method mult = ArithmeticOperator.class.getDeclaredMethod("mult", double.class, …
Run Code Online (Sandbox Code Playgroud)

java lambda invokedynamic java-8 methodhandle

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

make/gcc神秘错误2:如何获取更多信息?

我有这个使用Makefile编译的C++项目,有时当(我的猜测)有一些缺失的包含时,我得到一个神秘的"错误2"消息并且make过程停止.
我怀疑丢失包括因为这是我第三次包含一个不存在的头文件.

它看起来像这样:

---- Build tmp/foo.o ----
---- Build tmp/bar.o ----
---- Build tmp/toto.o ----
---- Build tmp/tata.o ----
make: *** [build_Project] Error 2
Run Code Online (Sandbox Code Playgroud)

这让我疯狂,因为即使使用详细命令(显示每个g ++调用),我也看不到任何东西.
我希望那个人抛出一些错误的信息,比如" 找不到标题X "或" 未定义引用Y ",但没有什么.

我的gcc编译选项是-O0 -Wall -Werror -Wno-write-strings -fno-rtti -fno-exceptions,如果这有帮助的话.

啊,我们使用包含依赖项的Makefile技巧:

ifneq ($(strip $(DEPENDS)),)
ifneq ($(MAKECMDGOALS),clean)
-include $(DEPENDS)
endif
endif
Run Code Online (Sandbox Code Playgroud)

(有关更多信息,请参见此处此处)

虽然这是记录的内容,但我怀疑我的问题与此依赖项包含有关.

如果你已经偶然发现了这个问题,请随时评论这个......

提前致谢.

编辑: 好的,经过一段时间的播放后,抑制-前面的内容-include $(DEPENDS)会给我一些更多信息(makefile 在丢失的包含文件停止).

make[1]: *** No rule to make target « foo.h », …
Run Code Online (Sandbox Code Playgroud)

c++ dependencies gcc makefile

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

C#:一个用于多个声明的属性(DLLImport)

我正在使用该[DLLImport]属性访问.NET代码中的一堆C ++函数。现在,我通过以下方式拥有所有功能:

const string DLL_Path = "path\\to\\my\\dll.dll";

[DllImport(DLL_Path, 
    CallingConvention = CallingConvention.StdCall, 
    CharSet = CharSet.Ansi)] 
public static extern int MyFunction1();

[DllImport(DLL_Path, 
    CallingConvention = CallingConvention.StdCall, 
    CharSet = CharSet.Ansi)]
public static extern ErrorCode MyFunction2(int id);

[DllImport(DLL_Path, 
    CallingConvention = CallingConvention.StdCall, 
    CharSet = CharSet.Ansi)]
public static extern ErrorCode MyFunction3(string server, byte timeout, 
    ref int connection_id, ref DeviceInfo pInfos);

[DllImport(DLL_Path, 
    CallingConvention = CallingConvention.StdCall,
    CharSet = CharSet.Ansi)]
public static extern ErrorCode MyFunction4([MarshalAs(UnmanagedType.LPArray)] byte[] pVersion, 
    ref int psize);

[DllImport(DLL_Path, 
    CallingConvention = CallingConvention.StdCall, 
    CharSet = CharSet.Ansi)]
public …
Run Code Online (Sandbox Code Playgroud)

c# attributes dllimport

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

在iOS7上无法使用音量按钮静音

我最近将我的VoIP应用程序迁移到了iOS7,还有一个仍然存在的漏洞我无法理解.

在VoIP呼叫中,在iOS6中,您可以按下物理音量按钮以降低音量,降至零.

现在,在iOS7中,我可以将声音降低到零之前的最后一步,这意味着音量无法静音.

我怀疑这是iOS7方面的东西,因为我在iOS6设备上没有相同的IPA问题.

有谁知道怎么了?

mute ios ios7

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