2015-06-26 4 views
-2

Есть ли способ расширить один большой массив из файла заголовка в исходный файл и использовать его элементы в основной программе?Расширение массива в исходный файл из файла заголовка в C

массив как этот

BYTE codes[95][8] = {    
255, 255, 255, 255, 255, 255, 255, 255, 
255, 255, 134, 255, 255, 255, 255, 255, 
255, 143, 255, 143, 255, 255, 255, 255, 
235, 128, 235, 143, 235, 255, 255, 255, 
237, 213, 128, 213, 219, 255, 255, 255, 
157, 155, 247, 226, 220, 255, 255, 255, 
201, 112, 170, 221, 250, 255, 255, 255, 
255, 175, 129, 255, 255, 255, 255, 255, 
255, 227, 221, 190, 255, 255, 255, 255, 
255, 190, 221, 227, 255, 255, 255, 255, 
235, 247, 193, 247, 235, 255, 255, 255, 
247, 247, 193, 247, 247, 255, 255, 255, 
255, 250, 249, 255, 255, 255, 255, 255, 
247, 247, 247, 247, 247, 255, 255, 255, 
255, 252, 252, 255, 255, 255, 255, 255, 
253, 251, 247, 239, 223, 255, 255, 255, 
193, 186, 182, 174, 193, 255, 255, 255, 
255, 222, 128, 254, 255, 255, 255, 255, 
222, 188, 186, 182, 206, 255, 255, 255, 
189, 190, 174, 150, 185, 255, 255, 255, 
}; 
+0

просто включите этот файл заголовка в исходный файл, например #include "array_hearder.h" –

ответ

0

Что

"продлить .... из заголовка файла в исходный файл"?

Если я правильно понял, вы хотите получить доступ к массиву codes из исходного файла. Для этого вам нужно указать #include файл заголовка в исходный файл и использовать массив codes. Помните, что это будет глобальный scope (если это имеет значение).

Сказав, что, как metioned в other answer г-ном Lundin лучший подход к

  • Объявить переменную (ы) [которая должна использоваться в нескольких единиц перевода (исходные файлы) ] в файле заголовка.
  • Определить переменную (ы) в одном из файлов sopurce.
  • #include файл заголовка в все исходные файлы и использовать переменную.
0

Неплохо вставлять данные в файл заголовка.

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

Поместите его в исходный файл и используйте extern, если для нескольких единиц компиляции требуется codes.

2

Никогда не определяйте какие-либо переменные в файлах заголовков. Это создает проблемы с компоновщиками и плохой дизайн программы. Вместо этого этот массив должен быть объявлен как

const BYTE codes[95][8] = { ... 

и помещен в .c файл. Вы можете иметь соответствующий файл .h с

extern const BYTE codes[95][8]; 

Включите файл .h от вызывающего, и вы получите доступ к массиву.

0

Если я правильно понял, вы хотите определить часть списка инициализаторов массива в одном файле и оставить остаток списка инициализаторов в другом файле.

Это случай, когда, да, вы можете это сделать - но ИМО вы, вероятно, не хотите. Я думаю, что он хрупкий, склонный к неудаче, неудобно поддерживать, и для себя я не могу представить , почему это понадобится. Однако, если вы настаиваете, вот реализация того, как это можно сделать:

array_test.ч

unsigned char codes[95][8] = {    
    255, 255, 255, 255, 255, 255, 255, 255, 
    255, 255, 134, 255, 255, 255, 255, 255, 
    255, 143, 255, 143, 255, 255, 255, 255, 
    235, 128, 235, 143, 235, 255, 255, 255, 
    237, 213, 128, 213, 219, 255, 255, 255, 
    157, 155, 247, 226, 220, 255, 255, 255, 
    201, 112, 170, 221, 250, 255, 255, 255, 
    255, 175, 129, 255, 255, 255, 255, 255, 
    255, 227, 221, 190, 255, 255, 255, 255, 
    255, 190, 221, 227, 255, 255, 255, 255, 
    235, 247, 193, 247, 235, 255, 255, 255, 
    247, 247, 193, 247, 247, 255, 255, 255, 
    255, 250, 249, 255, 255, 255, 255, 255, 
    247, 247, 247, 247, 247, 255, 255, 255, 
    255, 252, 252, 255, 255, 255, 255, 255, 
    253, 251, 247, 239, 223, 255, 255, 255, 
    193, 186, 182, 174, 193, 255, 255, 255, 
    255, 222, 128, 254, 255, 255, 255, 255, 
    222, 188, 186, 182, 206, 255, 255, 255, 
    189, 190, 174, 150, 185, 255, 255, 255, 

array_test.c

#include <stdio.h> 

#include "array_test.h" 

    247, 247, 193, 247, 247, 255, 255, 255, 
    255, 250, 249, 255, 255, 255, 255, 255, 
    247, 247, 247, 247, 247, 255, 255, 255, 
    255, 252, 252, 255, 255, 255, 255, 255, 
    253, 251, 247, 239, 223, 255, 255, 255, 
    193, 186, 182, 174, 193, 255, 255, 255, 
    255, 222, 128, 254, 255, 255, 255, 255, 
    222, 188, 186, 182, 206, 255, 255, 255, 
    189, 190, 174, 150, 185, 255, 255, 255 
    }; 

int main(int argc, char **argv) 
    { 
    printf("whatever\n"); 
    } 

Обратите внимание, что список инициализатор codes не прекращается в array_test.h (другими словами, нет }; в конце списка initalizer для codes), так продолжение списка должно немедленно следовать за включением "array_test.h". Это также делает программу нечетной - при просмотре array_test.c продолжение списка инициализатора представляется синтаксически неправильным, и все же оно компилируется (используя cc array_test.c на HP-UX). Я не рекомендую это делать, но это интересный случай, о котором я раньше не думал.

Удачи.

+0

странный ... но инновационная идея. Просто молитесь, чтобы никто не вдохновлялся этим стилем кодирования. :П –

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