2015-01-22 3 views
0

Я смотрю ArduCopter код. Я вижу, что в переменной ArcuCopter.pde имеется несколько переменных, объявленных как статические. Однако эти переменные вызываются в других файлах .pde. Например, объект g определяется как here как статический и используется в другом файле Attitude.pde много раз, например, this.C++: Может ли статическая переменная вызываться в нескольких файлах?

Как известно, статический memeber имеет область действия, ограниченную файлом и не может быть вызвана в другом файле. Итак, мой вопрос: как это можно сделать? Есть ли способ доступа к статическому члену, определенному в другом файле, как есть?

+0

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

+0

@Gyapti Нет кода с моего конца, так как я пытаюсь понять концепцию из частичной реализации, поэтому я должен предоставить достаточную внешнюю ссылку для ввода моего запроса. Поэтому вам нужно пройти через ссылки, если вы хотите понять мой запрос. – nikhil

+0

@iharob Когда я пытаюсь вызвать статическую переменную из другого компилятора файла, я могу сказать, что ошибка не может определить переменную. – nikhil

ответ

0

Возможно, вы путаете «файл» и «единица перевода».

См здесь http://port70.net/~nsz/c/c99/n1256.html#6.2.2

Вы можете использовать идентификаторы для статических объектов, объявленных в других файлах, пока они являются частью одного и того же блок перевода (и соответствующим образом задекларирован в точке использования ...) , Модуль перевода представляет собой (обычно условный) файл, состоящий из исходного файла (.c или .cpp, вероятно) со всеми его #include директивами «расширен».

Вы можете использовать данные, объявленные статическими в другой единицы перевода. Но не идентификатор. Как?

daft.h:

static int x=0; 

int nextX(void); 

daft.c

#include "daft.h" 

int nextX(void){ 
    return ++x; 
} 

my.c

#include <stdlib.h> 
#include <stdio.h> 
#include "daft.h" 

int main(void){ 

    printf("%d\n", nextX());//outputs 1. 
    printf("%d\n", x);//prints 0. 

    return EXIT_SUCCESS; 
} 

Где мы предполагаем, что daft.c и my.c являются исходными файлами. Обе их единицы перевода имеют идентификатор x для связанного с внутренней связью int. Два идентификатора и хранилище для объектов не связаны! Звонок nextX() обращается к хранилищу для идентификатора x, внутренне связанного в daft.c. Прямой доступ x обращается к идентификатору, внутренне связанному в my.c.

Если идентификаторы не объявлены const с static идентификаторами связей в заголовочных файлах обычно приводит к проблемам.

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