|
|
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Стало, интересно, как можно инициализировать, например, вот это Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Т.е. нечто вроде: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Если это возможно, подскажите, пожалуйста, синтаксис. Спасибо. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 14:02:42 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
хотите сказать такой вариант у вас скомпилился? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 14:20:18 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
Tubrik wrote: > хотите сказать такой вариант у вас скомпилился? Точку с запятой пропустил? Да, пропустил, и забыл переправить. С ней компилится, но вопрос был, как убрать необходимость объявления tmp. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 14:33:59 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
еще в Код: plaintext 1. 2. const убрать тогда компилит.. Код: plaintext 1. объявить как: Код: plaintext 1. тоже не получается, кстати, а это тоже самое, что и: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 14:40:17 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
если упростить до такой попытки: Код: plaintext 1. 2. 3. 4. то у меня создается впечатление, что инициализация массивом при объявлении типа {} работает только если объявлен массив как [], а не как указатель *, а объявить вашу структуру: Код: plaintext 1. 2. 3. 4. как Код: plaintext 1. 2. 3. 4. не дозволено. Я исчерпал свои варинты и мне кажется, что так нельзя:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 14:59:36 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
Tubrik wrote: > как > struct A{ > char* names[]; > void *data; > }; > > > не дозволено. Дозволено. Но, судя по всему, в этом случае компилятор считает names массивом с нулевым размером. Потому что вот так можно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 15:57:38 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
Можно??? у меня не выходит.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 16:39:58 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
что, ещё косяк? Попробуй так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 17:29:26 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
maXmoчто, ещё косяк? Попробуй так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Это шутка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 17:49:59 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
maXmo wrote: > что, ещё косяк? Попробуй так: > struct A{ > char** names; > void *data; > }; > > const A vars[] = { > { &{"ASDF", "QWERT", 0}, 0}, //хыхы > {0, 0} > } > пробовал. Выглядит логично, но error: expected primary-expression before '{' token Tubrik wrote: >Можно??? >у меня не выходит.. У меня g++ 4.1.2: [quote] bash-3.1$ g++ --version g++ (GCC) 4.1.2 Copyright (C) 2006 Free Software Foundation, Inc. [/quote] Компилер у тебя мыслит точно так же но эту возможность заюзать не дает, см ошибки. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 18:19:55 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
одним словом так делать нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 18:33:18 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
По моему нельзя. Элемент структуры names должен быть самостоятельным указателем. А при вкладывании массива в структуру получается что массив встраивается в структуру напрямую без создания промежуточного указателя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 18:42:07 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
Нет, так нельзя. Вариант с получением адреса действительно выглядит логично, но, по грамматике, за ним должно следовать выражение, а инициализатор с фигурными скобками частью выражением не является. initializer ::= assignment_expression | { initializer (, initializer))* } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 19:45:06 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
Tubrik wrote: > одним словом так делать нельзя? с твоим компилером - нет. С моим можно, но смысла нету. :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 20:09:25 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
teras wrote: >Нет, так нельзя. White Owl wrote: > По моему нельзя. > Элемент структуры names должен быть самостоятельным указателем. А при > вкладывании массива в структуру получается что массив встраивается в > структуру напрямую без создания промежуточного указателя. Т.е. скорее всего болт? Обидно. Мне эта фишка пригодилась бы. (просто есть привычка использовать null-terminated массивы константных значений) Всем спасибо. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 20:13:40 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
ErVпросто есть привычка использовать null-terminated массивы константных значенийНу и в чем проблема? Заводить дополнительную константу по моему вполне нормально. Я так и делаю обычно. Даю им имена типа vars_names_0, vars_names_1 и так далее, вполне читаемо получается. А с другой стороны, для дальнейшего упрощения разработки, если таких массивов много надо - вытаскиваю весь массив имен в какой-нибудь внешний файл (последние годы предпочитаю в xml) и пишу маленький препроцессор который на основе этого xml файла сделает мне с или cpp файл с константами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 20:24:21 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
White Owl wrote: > Ну и в чем проблема? Заводить дополнительную константу по моему вполне > нормально. Просто обычно такую структур я использую под написание чего-то вроде шелла - есть имя команды, какие-то технические, и обработчик (т.е. внешний файл не пойдет, если все процедуры будут встроенные). И если для команды надо, например, создать alias, т.е. альтернативное имя, то логичнее всего было бы для этого использовать то же char**, опять же null-terminated. Просто без объявления доп переменных это бы все как бы логичнее было бы что ли. :) (это личные предпочтения, всего лишь). Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 20:52:22 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
ErVс твоим компилером - нет. С моим можно, но смысла нету. :) Мда. Описано в C99, поддерживается в GCC http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/Compound-Literals.html Самое смешное, что в драфте C++ от 2005-10-19 не встречается. Еще интереснее, что, в соответствии с этим, выражение вида Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 22:12:06 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
teras wrote: > int *p = (int []){2, 4}; !!!!!!!!!!! > компилируется при помощи gcc, но не компилируется при помощи g++. Вы знаете, но оно у меня без проблем компилится. помнил ведь, что видел где-то такое, но синтаксис забыл Соответственно, рабочий вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 2 teras Преогромное спасибо. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 04:51:08 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
ErV> компилируется при помощи gcc, но не компилируется при помощи g++. Вы знаете, но оно у меня без проблем компилится. Oops, забыл сказать, что это было в gcc 3.4 (mingw). В Linux было лень перегружаться, чтобы проверить на gcc 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 10:39:07 |
|
||
|
инициализация const char** без дополнительных массивов.
|
|||
|---|---|---|---|
|
#18+
в VC все равно не влезает.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 12:43:07 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34792429&tid=2028199]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 311ms |

| 0 / 0 |
