|
Как определить констатнты/перем. в .h файле для C ?, Нужно определить размеры массивов в .h файле для С |
|
|
|
May 30 2007, 22:45
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Вопрос конечно чайниковский, сознаю, я пока к таким отношусь.. В коде С определены несколько массивов (ессно постоянного размера), например: Код 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() { . . Компилятор не берет ...
|
|
|
|
|
 |
Ответов
|
May 31 2007, 04:06
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(WHALE @ May 31 2007, 07:58)  Попробуйте .h file: #define A 5800 #define B 2900 .c file: int arr1[A],arr2[B],... Можно и по-другому: .h file: const int A=5800; const int B=2900; .c file: int arr1[A],arr2[B],...
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
May 31 2007, 06:49
|

Electrical Engineer
     
Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778

|
Цитата(makc @ May 31 2007, 08:06)  Можно и по-другому:
.h file: const int A=5800; const int B=2900; .c file: int arr1[A],arr2[B],... можно, да не нужно. в 1ом случае осуществляется простая макроподстановка на уровне препроцессора а во 2ом - съедается память под константы А и В (принципиально для ембеддед-программирования)
--------------------
|
|
|
|
|
May 31 2007, 07:11
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(Doka @ May 31 2007, 10:49)  можно, да не нужно. в 1ом случае осуществляется простая макроподстановка на уровне препроцессора а во 2ом - съедается память под константы А и В (принципиально для ембеддед-программирования) Спасибо всем. Воторой вариант (const) пробовал сам ранее - не работает. При компиляции ругается - требует консатнт в определении размера массивив (в С коде) - значит видимо все-таки через const в .h файле он их не видит глобально либо видит но не происходит процесса подстановки перед самой компиляцией. Сейчас попробую первыай вариант (define) - надеюсь сработает. Увы, не сработало :-( Код .h file:
#define PACKED_SIZE 5800
C file:
int bulk[PACKED_SIZE]; Компайлер ругается: error: expected a"]" - в строке определения массива (в С файле). Чушь какая-то
|
|
|
|
|
May 31 2007, 09:42
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(SM @ May 31 2007, 12:36)  Скорее всего в .h после дефайна по привычке ";" вкатили. Как всегда SM прав - завидую вашей интуиции..  - действительно влепил везде ; после defineов автоматом.... Сейчас убрал - все нормально. Учимся...учимся... Теперь такое дело - некоторые из этих defineов должны быть видны как переменные (точнее константы) для использования в ассемблерных рутинах (есть несколько asm файлов в проэкте). Ессно, define этого не дает (т.е. определенная defineом она не опознается в файле asm). В виду этого приходиться определять в теле кода C новую константу и присваивать ей значение соотв. defineа и в asm коде работать с этой новой константой. Вопрос такой: есть ли вариант однозначного определения в .h цонстанты так что она работала и как define и как физическая константа для asm файлов ? Цитата Компилятору надо знать размер массива и с #define препроцессор дает размер. В случае с const int на момент компиляции значение неизвестно. Вывод: В языке С размеры массивов принято определять через соответствующий #define . Да, именно это и понял из всего...получил полезный урок..
|
|
|
|
Сообщений в этой теме
Саша Z Как определить констатнты/перем. в .h файле для C ? May 30 2007, 22:45       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 Mokena Подскажите, почему такое происходит в Code Compose... Oct 2 2007, 20:16 Сергей Борщ Цитата(Mokena @ Oct 2 2007, 23:16) Про ма... Oct 3 2007, 08:30 mdmitry В глобальном списке имен появляются два одинаковых... Oct 2 2007, 21:09 PSP Если всетаки хочется определить переменную/массив ... Oct 2 2007, 21:23 Mokena Ого, все оказалось чуточку сложнее, чем я представ... Oct 3 2007, 16:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|