small points

1.   Turbo C 2.0 工程文件下各模块相互通信

(1) 同一个工程下的不同.c文件包含相同的头文件时,比如my.h,则在my.h中,不能定义变量,因为此处定义的变量具有全局作用域,导致编译时出现重定义错误。但可以定义常量,比如 #define PI 3.14  因为,该编译预处理只是在所在的.c文件中进行宏替换,不会引起命名上的冲突。

(2) 同一个工程下的不同.c文件可以通过共享变量或数组进行通信。变量不仅包括char, int, long等基本类型的变量,还可以是union, struct 这些自定义类型的变量。当共享自定义类型变量时,自定义类型的说明应包含在一个头文件中,然后在共享该自定义类型变量的.c文件中包含该头文件。 类似,共享数组的元素类型可以是基本类型或者自定义类型,而且共享自定义类型数组的.c文件要包含一个头文件,该头文件包含了自定义类型的说明。

   与基本类型变量相同,自定义类型变量和数组的引用性声明的存储类型为extern,而定义性声明可以在定义时进行初始化,或者不写存储类型extern

 

2. sizeof

MS-DOS中,sizeof的计算方法:

a为数组:sizeof(a)的结果为 数组长度*元素所占字节数

a为指针:sizeof(a) = 2 DOS中的偏移地址是16位,所以指针类型的大小为2个字节

aint  sizeof(a) = 2 or 4, 与具体机器相关

 

3. scanf() 输入时 单精度  双精度 的区别

下面是示例代码:

float fa, fb;
 printf("input two float : ");
 scanf("%f %lf", &fa, &fb);
 printf("/n%f %f/n", fa, fb); // 
打印出的 fa 为错误的值, fb = 0

 double da, db;

 printf("input two double : ");
 scanf("%f %lf", &da, &db);
 printf("/n%f %f/n", da, db); // 
打印出的 da = 0 db 为正确的值。

解释:
         scanf("%f %lf", &fa, &fb) 
中,%f 对应于单精度浮点数,scanf()  fa 解释为 float 类型, %lf 对应于 double 类型,所以,scanf()  fb 解释为 double 类型。scanf()  fb 的隐式的类型转换(从 float 转换为 double)扩展了存储单元的位数,可能会影响其他变量,从而导致 fa 的输出值错误。printf() 输出 fa fb 时按 float 类型进行解释,所以,fb 的输出值也错误。
         scanf("%f %lf", &da, &db) 
中,scanf()  da 隐式的类型转换没有扩展存储单元的位数,所以 不会影响 db ,所以 db 的输出值正确。同样道理,printf() 输出 da db 时按 double 类型进行解释,所以,da 的输出值错误。

 

4. C/C++ 中的目录字符串

char * dir1 = "C:sub1sub2some1.txt";
char * dir2 = "C:/sub1/sub2/some2.txt";
char * dir3 = "C:/sub1/sub2/some3.txt";

fopen(dir1, "w");
fopen(dir2, "w");
fopen(dir3, "w");

         在上面的例子中,dir1 是不合法的,因为 C/C++ 中的函数对路径字符串处理时,会按照格式字符串进行处理,dir1dir2中第一个''是转义字符。所以无法正确的解析 dir1 所表示的路径。dir2  dir3 均合法,能被正确的解析。dir3我原以为是 linux 下的写法,但实际上在 Windows 上也是正确的,而且比 dir3 更加简洁。
        
 windows 平台上编译安装一些源代码包时(这些源代码包程序多是起源于 linux),在运行配置、编译命令时,有时需要输入文件名/路径名,这时需要注意,文件名/路径名必须是 dir2 或者 dir3 的格式,直接在 windows 窗口的地址栏中拷贝的文件名/路径名dir1 格式)会导致编译或连接出错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值