我想在我的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)
你知道怎么做吗?
这两种风格:
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;而不是直接为您提供真实的结构定义.
在第二种方法中,您可以直接进入结构定义.
是否有人会使用第一种方法?
我正在处理的代码充满了这些......
维护者只是一个坏/好的习惯?
我想知道是否有一种很好的方法来监控我的应用程序内部,最好是以现有库的形式.
我的应用程序是多线程的,并使用消息传递系统在线程之间和外部世界之间进行通信.我的目标是监控发送的消息类型,频率等.
还可以以更一般的方式存在其他统计信息,例如每分钟生成多少线程,调用多少新/删除,或者应用程序的更具体方面; 你说出来的.
什么是令人敬畏的是像你的谷歌Chrome浏览器的"内部页面",如网络或chrome://跟踪,但以命令行方式.
如果有一个通用的库足以满足我的应用程序的特性,那就太好了.
否则我准备实施一个可以完成这项工作的小班,但我不知道从哪里开始.我认为最重要的是代码不应该过多干扰,因此性能不会受到影响.
你们对这件事有什么指示吗?
编辑:我的应用程序在Linux上运行,在嵌入式环境中,很遗憾Valgrind不支持:(
我有一组需要编辑的参数,其中一些是枚举.
截至今天,我在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元对象"可枚举".但是从那里开始,我不确定.
我正在尝试在IPC机制的管道和unix套接字之间进行选择.
两者都支持select()和epoll()伟大的功能.
现在,管道具有4kB(截至今天)"原子"写入,这由Linux内核保证.
在unix套接字的情况下是否存在这样的功能?我找不到任何明确说明这一点的文件.
假设我使用UNIX套接字,并从客户端写入x字节的数据.我确定当我的服务器崩溃时,这些x字节将写在套接字的服务器端select()吗?
在同一主题上,使用SOCK_DGRAM确保写入是原子的(如果可以保证),因为数据报应该是单个明确定义的消息?
那么使用SOCK_STREAM作为传输模式会有什么不同?
提前致谢.
我无法弄清楚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结构,是不是?
在我的工作中,我们有一个用于指定数学公式的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) 我有这个使用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) 我正在使用该[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) 我最近将我的VoIP应用程序迁移到了iOS7,还有一个仍然存在的漏洞我无法理解.
在VoIP呼叫中,在iOS6中,您可以按下物理音量按钮以降低音量,降至零.
现在,在iOS7中,我可以将声音降低到零之前的最后一步,这意味着音量无法静音.
我怀疑这是iOS7方面的东西,因为我在iOS6设备上没有相同的IPA问题.
有谁知道怎么了?
c++ ×4
makefile ×2
struct ×2
atomic ×1
attributes ×1
c ×1
c# ×1
combobox ×1
conditional ×1
constructor ×1
dependencies ×1
dllimport ×1
embedded ×1
gcc ×1
ios ×1
ios7 ×1
java ×1
java-8 ×1
lambda ×1
linux ×1
logic ×1
methodhandle ×1
mute ×1
performance ×1
qt ×1
runtime ×1
sockets ×1
statistics ×1
typedef ×1
unix ×1
verbose ×1