Возможно, вы путаете «файл» и «единица перевода».
См здесь 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
идентификаторами связей в заголовочных файлах обычно приводит к проблемам.
Пожалуйста, добавьте минимальный код в свой вопрос и не ожидайте, что люди последуют за каждой ссылкой, чтобы ответить вам. –
@Gyapti Нет кода с моего конца, так как я пытаюсь понять концепцию из частичной реализации, поэтому я должен предоставить достаточную внешнюю ссылку для ввода моего запроса. Поэтому вам нужно пройти через ссылки, если вы хотите понять мой запрос. – nikhil
@iharob Когда я пытаюсь вызвать статическую переменную из другого компилятора файла, я могу сказать, что ошибка не может определить переменную. – nikhil