c декларация и инициализация - PullRequest
0 голосов
/ 22 июня 2010

Можно ли объявить глобальную переменную как auto?например

auto int i;
static int j;

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

Ответы [ 4 ]

2 голосов
/ 22 июня 2010

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

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

Поэтому я думаю, что ответ на ваш вопрос "нет, это не хорошо".

1 голос
/ 22 июня 2010

Значение '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;
}

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

То, с чем вы можете быть знакомы:

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.

0 голосов
/ 22 июня 2010

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

0 голосов
/ 22 июня 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...