objective-c中的BOOL类型和变量的作用范围与c的比较

时间:2021-05-14 19:45:42
  
  
 
 
1 #import < Foundation / Foundation.h >
2
3   int a,b,c; // 静态变量
4
5 int main ( int argc, const char * argv[])
6 {
7
8 NSLog( @" BOOL type size:%d " , sizeof (BOOL)); // typedef signed char BOOL
9
10 if (FALSE == 0 ) // #define FALSE 0
11 {
12 NSLog( @" FALSE == 0 FALSE is %d " ,FALSE);
13 }
14 else
15 {
16 NSLog( @" FALSE != 0 " );
17 }
18
19 if (TRUE == 1 ) // #define TRUE 1
20 {
21 NSLog( @" TRUE == 1 TRUE is %d " ,TRUE);
22 }
23 else
24 {
25 NSLog( @" TRUE !== 1 " );
26 }
27
28 BOOL bool_var; // check BOOL is signed char or not?
29 char c = 128 ;
30 bool_var = c;
31 NSLog( @" %d " ,bool_var);
32
33 // 测试objc中是否也将0作为真非0作为假。测试结果跟c一样。所以objec中的BOOL类型应该只是定义来作为一个规范。
34 int is_bool = - 1 ;
35 if (is_bool)
36 {
37 NSLog( @" 非0直都是true " );
38 }
39
40 // 静态变量和自动变量(变量的存储类型)
41 int d,e; // 自动变量
42 NSLog( @" d=%d e=%d a=%d b=%d c=%d " ,d,e,a,b,c); // 输出结果显示,跟c一样,静态变量会自动初始化为0,自动变量的值是一个“随机”数
43
44 // 测试变量的作用域代码块作用域
45 if (TRUE)
46 {
47 int mm = 123 ;
48 }
49 NSLog( @" mm=%d " ,mm); // mm定义在子代码块内,外部不能访问。编译这段代码时将提示“mm”undeclared
50
51 return 0 ;
52 }
输出结果:
2011-05-21 14:18:52.474 console[1766:903] BOOL type size:1
2011-05-21 14:18:52.477 console[1766:903] FALSE == 0 FALSE is 0
2011-05-21 14:18:52.477 console[1766:903] TRUE == 1 TRUE is 1
2011-05-21 14:18:52.478 console[1766:903] -128
2011-05-21 14:18:52.478 console[1766:903] 非0直都是true
2011-05-21 14:18:52.479 console[1766:903] d=32767  e=1606416680 a=0 b=0 c=-128