реклама на сайте
подробности

 
 
> Как определить констатнты/перем. в .h файле для C ?, Нужно определить размеры массивов в .h файле для С
Саша Z
сообщение May 30 2007, 22:45
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Вопрос конечно чайниковский, сознаю, я пока к таким отношусь.. wink.gif
В коде С определены несколько массивов (ессно постоянного размера), например:
Код
int arr1[A], arr2[B],...

.
.
.

void main()
{
.
.


A,B - постоянные константы для всего проэкта, посему хочу дать их определение в .h файле где буду определять все константы и глобальные переменные. Сей .h файл includиться в С.
Как правильно определить A,B (и инициализировать) в .h файле что-бы их символьно использовать в С коде (в определении размеров массивов) ?

Пробовал:
Код
.h file:

extern int A = 5800;
extern int B = 2900;


Затем в С:
Код
int arr1[A], arr2[B];

void main()
{
.
.


Компилятор не берет ...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Mokena
сообщение Oct 2 2007, 20:16
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 4-06-07
Пользователь №: 28 174



Подскажите, почему такое происходит в Code Composer Studio:

В .h файле есть такое определение массива:
Код
#ifndef SSD_API_H
#define SSD_API_H

#ifndef SSD_REGS
#define SSD_REGS

// Значения регистров после POR
const Uint16 SSDRegsPOR[0x50] = {
  0x0000, 0x0000 .............
}

#endif // SSD_REGS

#endif // SSD_API_H
Этот файл включается в два .c файла. И в этом случае компилятор сообщает, что константа SSDRegsPOR определа несколько раз. Может быть дело в настройках компилятора/препроцессора?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 3 2007, 08:30
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Mokena @ Oct 2 2007, 23:16) *
Про массивы уже сказали. Компилятор должен знать, где этот массив размещать. Когда вы включаете в заголовочный файл определение а не объявление массива - компилятор вынужден создать по копии массива в каждом из файлов. Если вас это не смущает - добавьте static перед определением массива. Тогда каждая копия массива будет видна только внутри этого .c файла. Но это некрасивое решение. Правильнее объявить массив в .h как extern, а определить его в одном из .с:
Код
array.h:
extern uint8_t array[size];

file1.c:
#include "array.h"
uint8_t array[size] =
{
    .....
    .....
};
file2.c:
#include "array.h"
А вот для обычных констант как раз наоборот - можно определять их в .h как static uint8_t const Const1 = 123;, тогда компилятор вполне может не выделять под нее память и скомпилировать в опкод сразу значение константы, вместо ее чтения. Но при таком подходе нельзя брать адрес этой константы - иначе компилятор будет вынужден выделить под нее память.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Саша Z   Как определить констатнты/перем. в .h файле для C ?   May 30 2007, 22:45
- - WHALE   Попробуйте .h file: #define A 5800 #define B ...   May 31 2007, 03:58
|- - makc   Цитата(WHALE @ May 31 2007, 07:58) Попроб...   May 31 2007, 04:06
|- - Doka   Цитата(makc @ May 31 2007, 08:06) Можно и...   May 31 2007, 06:49
|- - Саша Z   Цитата(Doka @ May 31 2007, 10:49) можно, ...   May 31 2007, 07:11
|- - SM   Цитата(Саша Z @ May 31 2007, 11:11) Компа...   May 31 2007, 08:36
|- - Саша Z   Цитата(SM @ May 31 2007, 12:36) Скорее вс...   May 31 2007, 09:42
|- - SM   Цитата(Саша Z @ May 31 2007, 13:42) Вопро...   May 31 2007, 10:01
|- - zltigo   Цитата(SM @ May 31 2007, 13:01) Держите д...   May 31 2007, 20:37
- - BratherLU   в *.с в верху #include "*.h" //Забыли на...   May 31 2007, 08:28
|- - Саша Z   Цитата(BratherLU @ May 31 2007, 12:28) в ...   May 31 2007, 08:31
- - jorikdima   это все примитивные вещи. У вас путь к h файлу в ...   May 31 2007, 08:40
- - mdmitry   >.h file: >const int A=5800; >const int B...   May 31 2007, 09:40
|- - makc   Цитата(mdmitry @ May 31 2007, 13:40) ...   Jun 1 2007, 02:51
- - Саша Z   Большое спасибо всем, помошь в понимании была весь...   May 31 2007, 20:48
- - mdmitry   В глобальном списке имен появляются два одинаковых...   Oct 2 2007, 21:09
- - PSP   Если всетаки хочется определить переменную/массив ...   Oct 2 2007, 21:23
- - Mokena   Ого, все оказалось чуточку сложнее, чем я представ...   Oct 3 2007, 16:08


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01389 секунд с 7
ELECTRONIX ©2004-2016