2012-04-20 3 views
0

Предположим, у меня есть файл * .c с глобальной переменной («глобальный» в том смысле, что у нее есть область файла) и функция. Может ли функция вернуть эту переменную в качестве значения, которое будет использоваться в других единицах перевода?C: может ли функция возвращать глобальную переменную?

Я предполагаю, что ответ «да». Если ничего другого, я полагаю, что в возврате C работает под семантикой «copy» --- возвращается возвращаемое выражение return. Но я не уверен.

ответ

5

Да. И вы правы: если вы вернете что-то вроде int, вы вернете копию своего текущего. Если вы вернете указатель, вы дадите им доступ к самой переменной.

1

Я предполагаю, что ответ «да». Если ничего другого, я полагаю, что в C return работает под семантикой «copy» --- возвращается значение возврата . Но я не уверен.

Вы верны.

Предположим, у меня есть * .c файл с глобальной переменной («глобальный» в смысле, что она имеет файл объем)

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

+0

Спасибо за напоминание. – user1071847

3

Ну, что-то вроде этого?

a.c

int foo = 3; 

int get_foo() { return foo; } 

main.c

#include <stdio.h>  
#include "a.c" 

int main(void) 
{ 
    printf("%d\n", get_foo()); 
    return 0; 
} 

выход:

3

1

Если бы я был педантичным, я бы сказал, нет. Он может возвращать значение глобальной переменной. Это значение будет мгновенной копией, а не ссылкой. То есть, когда глобальные изменения, значение не изменится.

Помимо этого for all sorts of reasons глобальную переменную следует избегать в первом случае.

+0

Да, мне бы хотелось избежать использования глобальной переменной, но я хочу использовать функцию nftw для файлового дерева, и я не вижу хорошего способа передавать информацию о состоянии и обратно с этой функцией. – user1071847

+0

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

+0

Хорошо, я отправил вопрос. Я не использовал код; Я думаю, что описания достаточно. – user1071847

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