我知道cmake . && make all install.这有效,但安装到/usr/local.
我需要安装到不同的前缀(例如,to /usr).
什么是cmake和make命令行安装,以/usr代替/usr/local?
谷歌的C++风格指南说"我们不使用例外".关于异常的使用,风格没有提到STL.由于STL分配器可能会失败,它们如何处理容器抛出的异常?
push_back()map或map operator[]这样的STL方法不会返回任何状态代码.零数组的双精度数(使用memset(,0,))或含有双精度数的结构是否合法?
这个问题意味着两件事:
(1)从C标准的角度来看,这个UB不是吗?(在一个固定的平台上,这个UB怎么样......它只是浮动表示所有......)
(2)从实际角度来看:在intel平台上可以吗?(无论标准是什么).
在Windows中,它是"%I64d".在Linux和Solaris中,它是"%lld".
如果我想编写跨平台printfs打印long long值:这样做的好方法是什么?
long long ll;
printf(???, ll);
Run Code Online (Sandbox Code Playgroud) 这可以使用模板吗?
有两个字符串常量.它们来自不同模块中的定义.它们必须相等,否则如果它们不相等,我将引发编译时错误.我可以使用模板吗?
#define MY_STRING "foo"
CompileAssertIfStringsNotEqual(MY_STRING, HIS_STRING);
Run Code Online (Sandbox Code Playgroud)
PS我被假设"abc"[0]是常量表达式而被欺骗.它不是.在语言中奇怪的遗漏.如果"abc"[0]是constand表达式,那将是可能的.
我正在生成用于导入Excel的csv文件.Excel没有以前的格式.
a)是否有任何标记可以在csv中为单元格添加颜色定义?
如果在csv中不可能,那么我可以在哪些Excel导入格式中执行(a)和(b)
格式,这些格式最好是基于ascii的,并且易于生成?
b)我可以将列宽定义添加到csv列吗?
假设我使用参数定义宏,然后按如下方式调用它:
#define MIN(x,y) ((x)<(y)?(x):(y))
int x=1,y=2,z;
z=MIN(y,x);
Run Code Online (Sandbox Code Playgroud)
鉴于(a)宏作为文本替换,(b)这里的实际args就像正式args,只交换, - 这个特定的z = MIN(y,x)是否按预期工作?如果会的话,为什么?我的意思是,预处理器如何管理不混淆实际和正式的args?
这个问题是关于C编译器的技术问题.这不是c ++问题.
这个问题不建议任何人使用宏.
这个问题与编程风格无关.
是否可以从Windows文件描述符或FILE*中提取文件HANDLE?
例如,FILE*在文件描述符之上实现,而文件描述符又在HANDLEs之上实现(在Windows上).可以使用文档化的fileno()函数从FILE*中提取FD.从FD中提取HANDLE可能更具攻击性或更具记录性......
假设我需要编写C宏来返回存储无符号32位整数所需的位数(1..32).(结果等于上限(log2(n)).
我需要它作为编译时计算宏,而不是函数.
我可以
#define NBITS(n) ((n)&(1<<31)?32:(n)&(1<<30)?31:...
Run Code Online (Sandbox Code Playgroud)
它有效,但相当长.(速度与此无关,计算在编译时).
有没有更短的方法来编写这个宏?最短的?
可能重复:
C预处理器:在#define中使用#if?
是否有任何技巧可以在定义的rhs内部使用预处理程序指令?问题是,预处理器将所有rhs折叠成一条长行.但也许有一招?
在rhs中我想要的例子是
#define MY_CHECK \
#ifndef MY_DEF \
# error MY_DEF not defined \
#endif
Run Code Online (Sandbox Code Playgroud)
?
目的是简短:使用1行快捷方式而不是多行检查序列.