Objective-C中的常量定义方法、C中static 对全局变量extern的限制

来源:互联网 发布:java 定时任务 编辑:程序博客网 时间:2024/04/30 22:21

     iOS中定义常量的系统做法是,一般都习惯在常量名字前加小写的k,是因为常量翻译成 匈牙利语 或 德语 都是 konstans:

#import <Foundation/Foundation.h>


CA_EXTERN NSString *kNetWorkWifi;

@interface Constant : NSObject

@end


CA_EXTERN在系统中是这样定义的。

#ifndef CA_EXTERN

# define CA_EXTERN extern

#endif

    然后在.m文件中赋值 声明的外部变量:

#import "Constant.h"

NSString *kNetWorkWifi = @"wifi";

@implementation Constant

@end


    外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。编译时将外部变量分配到静态存储区。

    有时,需要用extern来声明外部变量,以扩展外部变量的作用域。

    有时在程序设计中希望某些外部变量只限于本文件引用,而不能被其他文件引用。这时可以在定义外部变量时加一个static声明。


   file1.c                                   file2.c

   static int A;                           extern int A;

   void main(){                          void fun(int n){...;

   }                                            A = A*n;}

    在file1.c中定义了一个全局变量A,但它用static声明,因此只能用于本文件。

    这种加上static声明、只能用于本文件的外部变量成为静态外部变量。

    需要指出:不要误认为对外部变量加static声明后才是静态存储方式(存储在静态存储区中),而不加static的是动态存储(存放在动态存储区)。两种形式的外部变量都是静态存储方式(存储在静态存储区),只是作用范围不同而已,都是在编译时分配内存的。

0 0