Portál AbcLinuxu, 17. říjen 2017 02:43

Dotaz: gcc a attribute((unused))

12.9. 09:31 rastos | skóre: 60 | blog: rastos
gcc a attribute((unused))
Přečteno: 218×
Odpovědět | Admin
Mám C zdroják, v ktorom je nepoužitá premenná,
rastos:/tmp$ cat unusedtest.c 
static const int rastos=0 attribute((unused));
a chcem, aby ju (a len ju!) gcc -Wall ignoroval. Tak som použil attribute unused, ale dostanem:
rastos:/tmp$ gcc -Wall -c unusedtest.c 
unusedtest.c:1:27: error: expected ‘,’ or ‘;’ before ‘attribute’
 static const int rastos=0 attribute((unused));
                           ^~~~~~~~~
unusedtest.c:1:18: warning: ‘rastos’ defined but not used [-Wunused-const-variable=]
 static const int rastos=0 attribute((unused));
                  ^~~~~~

rastos:/tmp$ gcc --version
gcc (GCC) 7.2.0
Čo je zle?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 2× (Vladimír Čunát, DarkKnight)
12.9. 09:57 NN
Rozbalit Rozbalit vše Re: gcc a attribute((unused))
Odpovědět | | Sbalit | Link | Blokovat | Admin
static const int rastos __attribute__((unused)) = 0;
Řešení 1× (Vladimír Čunát)
12.9. 10:03 DarkKnight | skóre: 25
Rozbalit Rozbalit vše Re: gcc a attribute((unused))
Odpovědět | | Sbalit | Link | Blokovat | Admin
Problemy jsou dva. Attributes se specifikuji pomoci __attribute__ a hlavne se definuji u nazvu promenne, takze tenhle kod uz funguje spravne
$ cat unusedtest.c 
static const int rastos __attribute__((unused)) = 0;

Plus se divam, ze pri pouziti brush je __ uspesne smazane :)
Řešení 1× (Vladimír Čunát)
12.9. 10:10 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: gcc a attribute((unused))
Odpovědět | | Sbalit | Link | Blokovat | Admin
Doporučuji začít první chybovou hláškou, ty další mohou být až následné, což je i tento případ. Především je to __attribute__ (ne attribute), a dále atribut patří za proměnnou nebo před ni, dokonce může být i mezi typem a jménem proměnné, ale ne až za inicializací. Tohle mi projde:
int f()
{
        static const int foo1 __attribute__((unused)) = 1;
        __attribute__((unused)) static const int foo2 = 1;
        static const int __attribute__((unused)) foo3 = 1;

        return 1;
}

(zkoušeno s gcc 4.8, nemám teď po ruce stroj s gcc7)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.