Как сделать константы видимыми только для конкретного исходного файла, в C? - PullRequest
0 голосов
/ 30 сентября 2019

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

Зависит ли решение этой проблемы от компилятора и IDE?

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

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

Обычный способ сделать это - определить константы в файле .h, а затем только включить этот файл .h висходные файлы, которые нужно знать об этих константах. Например:

// constants.h
#define CONSTVAL1  1
#define CONSTVAL2  2
#define CONSTVAL3  3
#define CONSTVAL4  "a string"

и исходный файл:

// mysource.c
#include "constants.h"

Теперь вы можете вызывать fuction как

myfunc(CONSTVAL1);

(я не буду показывать расширенный примеркоторый включает в себя включить охранников. Поиск "включить охранников" на Google или стек обмена)

1 голос
/ 30 сентября 2019

РЕДАКТИРОВАТЬ для адресации ответа в комментариях под OP: Это может быть файл .h или .c, но он должен быть отделен от файла, в котором определены функции, использующие эти константы.

Тогда ответ становится простым. В C общий способ предоставления константных переменных для выделенного исходного файла .c из другого файла состоит в использовании файла заголовка (.h), который определяет постоянное значение и включается (#include)только в файл, для которого предназначены переменные. Пример

example.h

// examples of constant values for use in a header file in C

//using macros
#define intVal      10
#define floatVal    10.503
#define strVal      "string value"

//using integral types:
const int     = 10;
const double  = 10.503;
const char[]  = {"string value"};

(исходное содержание anser)
В общем ограничивающем объеме (видимость и продолжительность) переменных в C является прямым. По этой теме имеется множество учебных пособий, например : (следующие выдержки - лишь небольшая часть содержания.)

.. узнать о области действия и классах хранения данных в C. Основные темы, затронутые в этом уроке:

Block scope
Function scope
File scope
Program scope
The auto specifier
The static specifier
The register specifier
The extern specifier
The const modifier
The volatile modifier

То, что вы описываете, предполагает, что File Scope будет работать для вас,Выдержка из той же ссылки:

Область действия файла и иерархия областей действия

...

Большинство больших программ состоят из нескольких программных файлов.

В следующей части исходного кода показаны переменные с областью действия файла:

int x = 0;             /* program scope */ 
static int y = 0;      /* file scope */ 
static float z = 0.0;  /* file scope */ 
int main() {   
    int i;   /* block scope */    
    .    
    .    
    .    
    return 0; 
}

Чтобы сделать вышеуказанную область действия файла переменные константы используют модификатор const:

 static const int y = 0;      /* file scope constant */ 
 static const float z = 0.0;  /* file scope constant */

Другим обычно используемым методом является макрос C. См. Это обсуждение .

...