2010-06-22 2 views
0

Можно ли объявить глобальную переменную как авто. , напримерc Объявление и инициализация

auto int i; 
static int j; 

int main() 
{ 
    ... 
    return 0; 
} 
+2

Вы пытаетесь сработать, если это имеет смысл, или если это разрешено? –

ответ

0

На основе этого объяснения авто:

http://msdn.microsoft.com/en-us/library/6k3ybftz%28VS.80%29.aspx

Он говорит, что авто переменной сфера, ограниченно, а их адрес не является постоянным. Поскольку глобальные переменные не имеют ни одного из этих свойств, для глобального не имеет смысла быть авто.

+2

Это ссылка на C++, которая знает, что делают эти ребята с бедной старой 'auto' :-) –

1

Значение «auto» в C - это просто переменная, являющаяся локальной переменной. Так что совершенно противоречиво сказать, что вы хотите объявить глобальную переменную как локальную переменную.

Я думаю, вы говорите о наличии локализованного глобального. Если вы хотите объявить переменную, которая является локальной для файла .c, в котором вы работаете, и вы не хотите, чтобы он был доступен вне файла c, но вы хотите, чтобы он был доступен для всех функций в этом файл, вы должны объявить его как статическую переменную, как это было сделано для переменной j.

Таким образом, вы бы что-то вроде следующего в example.c:

static int i; //localised global within the file example.c 
static int j; //not accessible outside the .c file, but accessible by all functions within this file 


int main() 
{ 
     //do something with i or j here. 
     i = 0 ; 
     j = 1 ; 
} 

void checkFunction() 
{ 
     //you can also access j here. 
     j = j+ 5; 
} 

Я думаю, я должен добавить, что существует несколько способов, чтобы использовать ключевое слово статический для переменной.

Тот, который вы можете быть знакомы с является:

1) Declaring a variable static within a function - this ensures the variable retains its value between 
    function invocations. 

    The second one ... 
2) Declaring a variable as static within a module (or a .c file) - this is what I have described  
    above. This ensures a variable is localised within that module or .c file, but it is global so that 
    it can be used by any of the functions defined in that particular file. Hence the name localised 
    global. 

Однако, он не будет доступен за пределами этого .c файла.

2

Почему вы не пытались скомпилировать фрагмент кода в своем вопросе? Если бы у вас было, вы бы уже знали, что он дает ошибку компилятора. В gcc:

foo.c:3: error: file-scope declaration of 'x' specifies 'auto' 

Так что, я думаю, ответ на ваш вопрос «нет, это не нормально».

0

Нет, это невозможно. Причина в том, что глобальные переменные находятся в определенном сегменте данных (вместе со статическими переменными, объявленными внутри функций), инициализированными нулем все сразу до вызова main().

Смежные вопросы