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做了些修改。首先揭开它的庐山真面目:

继续阅读




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee