LINUX.ORG.RU

А возможно на С статически выполнить инициализацию елементов массива в порядке отличном от порядка следования в массиве??


0

0

тоесть я хочу чтобы запись о инициализации второго елемента массива предшествовала записи о инициализации первого елемента массива????

★★★★★

Если я правильно понял вопрос то очевидно можно...
int i = 100;
int arr[100];
int someval;
for(;i>0; i--) {
someval = 123; // Rand.. ?
arr[i-1]=someval;
}

если не понял вопроса - прошу прощения.

godexsoft
()
Ответ на: комментарий от godexsoft

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

мне оно совершенно ненужно.

мне нужно сделать етоже но статически, во время компиляции а не в рантайме.

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

_статически_ нельзя. вопрос в том -- зачем это нужно? чем просто не устраивает инициализировать так:

int a[] = { 1, 2, 3, 4, 5 };

anonymous
()
Ответ на: комментарий от anonymous

мне нужна статическая взаимосвязь между макро-именем индекса елемента массива и самим елементом.

>_статически_ нельзя.

На С89 - согласен, а С99 - ??? а может GCC-????

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

> мне нужна статическая взаимосвязь между макро-именем индекса елемента массива и самим елементом.

А ты ничего не путаешь?

У тебя что, неэргодическая система? :-)

Чисто теоретически -- как порядок статической (_compile_time_) инициализации вообще может влиять на семантику?

Die-Hard ★★★★★
()
Ответ на: комментарий от cvv

> мне нужна статическая взаимосвязь между макро-именем индекса елемента 
массива и самим елементом.

Смысла не уловил =) Попроще, на примерчике ...

Вот такая хрень доступна в С99. 

int a[]={ [0]=1,[2]=2,[1]=3 };

main()
{
	printf("a[0]=%i a[1]=%i a[2]=%i\n",a[0],a[1],a[2]);
}

ukez
()
Ответ на: комментарий от ukez

Благодарю, то что нужно.

cvv ★★★★★
() автор топика
Ответ на: комментарий от Die-Hard

Я тоже так подумал сначала, но потом догнал, что он пытается сделать  примерно такую штуку с макросами:

DEFINE_INT_ARRAY(a)
{
   ELEMENT_1(1)
   ELEMENT_2(2)
   ELEMENT_4(4)
   ELEMENT_3(3)
};

а в итоге это должно развернуться в а[] = {1,2,3,4}

ukez
()
Ответ на: комментарий от anonymous

>gcc позволяет делать так : int a[4]={2:1, 0:2};

cпасибо тоже пригодится

cvv ★★★★★
() автор топика
Ответ на: комментарий от ukez

ukez :

> ...но потом догнал, что он пытается сделать  примерно такую штуку...

Хоть убей, не пойму.

Чем это отличается от:

#define a_1 1
#define a_2 2
#define a_4 4
#define a_3 3

. . .

int a[]={a_1,a_2,a_3,a_4};

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

образом мышления ;-)

enum {el1=0,el2,el3,el4,el_num};
char* elements[el_num]={
    [el1]="el1",
    [el2]="el2",
    [el3]="el3",
    [el4]="el4"
}

int main(){
    printf("el1=%s",elements[el1]);
}

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

Конечно, дело вкуса...

Замечу в скобках, что IMHO такого типа паскалеподобные конструкции чужды Це, загромождают код и лишь увеличивают вероятность ошибки.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

>загромождают код и лишь увеличивают вероятность ошибки.

если ето так то почему ету фичу внесли в стандарт а не зарубали на корне

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

> если ето так то почему ету фичу внесли в стандарт а не зарубали на корне

0. Я же сказал, "Дело вкуса". Это мое мнение, основанное на моем опыте кодирования. Я вполне допускаю, что твой опыт принципиально отличен от моего.

1. Я -- не про саму фичу, а про то, как ты ее применяешь.

2. Стандарт пошел в сторону ЦеПП, который, из-за систематического злоупотребления подобными вкусностями, требует на порядок более строгой проверки типов.

В смысле читабельности, основная сила Це заключена в его лаконичности, что делает запись алгоритма легкообозримой (на экран влезает:-)). Паскаль, например, этим свойством не обладает (там есть свои преимущества). Зачем же отказываться от этого уникального свойства в пользу сомнительной иллюзии более строгой типизации?

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

Поясните пожалуйста про квадратные скобки. Для чего они используются?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.