C/C++ - graybull's Blog
C++跨平台开发 -- 影响跨平台的因素有哪些
跨平台是在应用程序开发当中时常遇到而又内涵丰富的话题。有幸拜读Syd Logan的《Cross-Platform Development in C++》,这里将随手写写读书心得和总结。
子话题 -- 影响跨平台的因素有哪些
- 语言 -language
- 编译器 - compiler
- 二进制数据 - binary data
- 标准库 - standard library
- 操作系统接口 - operation system interface
- 用户接口 - user interface
- 生成系统 - build system
- 配置管理 - configuration management
C语言声明的优先级规则--如何看懂复杂的声明语句
- C语言声明的优先级规则
- 解读一个复杂例子char* const *(*next)();
- 使用typedef
C语言复杂的声明语句,总是让人很头痛。这里,我摘录了《C专家编程》的一段内容,来简要地阐述以下如何看懂这些复杂的东东。
举例:char * const * (*next) (); //请问这是神马意思?
如果你对此还有疑问,请看下文。
printf与scanf在处理double时的不同
1. 在windows下,下面语句是正常执行的:
double var=0.618;
printf("%Lf\n",var);
然而,在Linux下该printf执行异常。故处理printf和scanf时避免使用 %Lf (大写L)。
2.
- scanf 读取float: scanf("%f",&var);
- scanf 读取double: scanf("%lf",&var);
3. printf 与scanf 的情况有些不同。
float var1=1.0;
double var2=1.0;
printf("%f", var1); //都是 %f
printf("%f",var2); //都是 %f
%f 在printf 看来是输出double变量(不是float);而float变量在传给printf时,编译器将它变成double类型。
至于%lf, printf也能正常输出。
建议统一在 printf 中使用 %f 。
参考:
printf 的%f说明符的确既可以输出float型又可以输出double型。根据“默认参数提升”规则(在printf这样的函数的可变参数列表中,不论作用域内 有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。
(严 格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。要确 保可移植性,就要坚持使用%f。)。对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向 double存储大不一样,因此,scanf区别%f和%lf。
Linux下C++的通用Makefile与解析
本文给出万能Makefile的具体实现,以及对其中的关键点进行解析。所谓C++万能Makefile,即可编译链接所有的C++程序,而只需作很少的修改。
号称万能Makefile,一统江湖。我对原版的Makefile做了些修改。首先揭开它的庐山真面目: