Как кодировать библиотеку с пользовательским параметром в C / C ++? - PullRequest
0 голосов
/ 05 июня 2019

Можно ли кодировать библиотеку с параметром, который будет определен пользователем во время компиляции без изменения библиотеки?

Библиотека:

test.h

#ifndef TEST_H
#define TEST_H

#define MAX_NB USER_DEF

void myFunc(); 

#endif

test.cpp

#include "test.h"

int arr[MAX_NB] = {0}; 

void myFunc() {

    for (int i = 0: i < MAX_NB; i++ ) {
        // DO SOMETHING
    }

}

И основной код:

#define USER_DEF 5
#include "test.h"

void main() {

    while (1) {
        myFunc(); 
    }

}

Я полагаю, что получаю ошибку (USER_DEF не объявлен в этой области), потому что USER_DEF не определено в модуле перевода, содержащем test.h и test.c, но я надеюсь, что есть способ сделать это, но яне могу найти это.

Моя цель - создать массив с заданным пользователем размером (измененный код).

Ответы [ 2 ]

3 голосов
/ 05 июня 2019

Ответ заключается в том, что нет смысла использовать массивы переменного размера для очень ограниченной 8-битной системы с очень ограниченным объемом оперативной памяти.

Вместо этого у вас должен быть массив фиксированного размера n байтов.Позвольте пользователю выбрать число, затем убедитесь, что оно меньше или равно n .Затем следите за используемым размером с помощью простой целочисленной переменной.Вы всегда должны резервировать память для худшего случая.

Массив должен иметь статическую продолжительность хранения, так как он будет слишком большим для размещения в стеке.

1 голос
/ 05 июня 2019

Обычно я бы пошел и предложил проверить шаблоны , хотя вы можете создавать пользовательские переменные, они называются параметрами функции. Пожалуйста, посмотрите Подводя итог, это не то, что вы называете пользовательской переменной, потому что это определяется программистом, а не пользователем программы.Это называется константой вообще.Если вы хотите создать определенную вами константу времени компиляции, вы можете взглянуть на constexpr .

Кроме того, позвольте мне объяснить вам, почему это не работает правильно.Вы правильно догадались, это потому, что он не определен в заголовочном файле, но почему?Потому что заголовки идут первыми, а потом идет основной файл.Заголовок ищет определенную константу и не может ее найти, и именно поэтому вы получаете USER_DEF not declared in this scope.

...