Как вы можете добавить массив в GSList без переменной? - PullRequest
0 голосов
/ 02 мая 2011

Я работаю с чем-то вроде этого, но выдает ошибки.

Я бы просто поместил массив в переменную и передал бы его таким образом, но я смотрю почти на 500 строк, таких как эта, без данных. (Так что я не могу использовать цикл)

Кроме того, весь смысл использования GSList состоял в том, чтобы избежать ограничений для зубчатых массивов

list43333 = g_slist_append(list43333,{11,12,13,14,15,17,18,20,22,25,30});

Редактировать: приведение с `(int []) дает:

csgtk.h:14: warning: data definition has no type or storage class
csgtk.h:14: warning: type defaults to ‘int’ in declaration of ‘list43333’
csgtk.h:14: error: conflicting types for ‘list43333’
csgtk.h:12: note: previous definition of ‘list43333’ was here
csgtk.h:14: warning: passing argument 1 of ‘g_slist_append’ makes pointer from integer without a cast
/usr/include/glib-2.0/glib/gslist.h:52: note: expected ‘struct GSList *’ but argument is of type ‘int’
csgtk.h:14: warning: initialization makes integer from pointer without a cast
csgtk.h:14: error: initializer element is not constant

Редактировать: буквенное копирование вставить, чтобы показать, что оно не выходит за рамки (Обратите внимание, что это на верхнем уровне .h файла):

GSList * list43333 = NULL;
list43333 = g_slist_prepend(list43333,(int[]){});

основной файл

#include "csgtk.h"

GHashTable * widgetbuffer;
[...]

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Проблема в том, что компилятор не знает, какой тип вашего массива, поэтому что-то вроде этого должно работать.

list43333 = g_slist_append(list43333,(int[]){11,12,13,14,15});

однако вы должны рассмотреть, как вы это делаете, это будетлучше сделать один массив статических констант и добавить его к вашему GSList, так как здесь вы будете использовать время выполнения O (n²), так как оно должно обходить список для каждого добавления.

0 голосов
/ 18 августа 2012

Только что попробовал тоже самое, и оно работает. gcc 4.7.1 на Debian нестабильный amd64. Кстати, (int []){1, 2, 3} - литералы составных ISO C99.

#include <glib.h>

int main()
{
        GSList *l;

        l = g_slist_alloc();
        l = g_slist_append(l, (int []){1, 2, 3});

        return 0;
}

$ gcc -Wall -Wextra -g $(pkg-config --cflags --libs glib-2.0) main.c

...