GNU/Linux >> Znalost Linux >  >> Linux

Jak odstranit toto varování:druhý parametr „va_start“ není poslední pojmenovaný argument?

Musíte použít size místo fmt :

va_start(args, size);

Je to size , nikoli fmt , což je poslední parametr, který má explicitní název (na rozdíl od parametrů vararg, které nemají žádné názvy). Poslední pojmenovaný parametr musíte předat do va_start aby mohl zjistit adresu v paměti, na které začínají parametry vararg.


second parameter of ‘va_start’ not last named argument

Co to znamená a jak to odstranit?

Vaše funkce má pojmenované parametry parent , fmt a size . Specifikace C říká, že musíte vždy předat poslední pojmenovaný parametr do va_start , kvůli kompatibilitě se staršími kompilátory. Takže musíte projít size , nikoli fmt .

(Ale s moderním kompilátorem by to mohlo fungovat tak jako tak)


Myslím, že je zde zmatek:většina lidí se zabývá pouze funkcemi podobnými prirf, které mají formát a varargs. a myslí si, že musí předat název parametru, který popisuje formát. nicméně va_start nemá nic společného s žádným formátem podobným printf. toto je pouze funkce, která vypočítává offset na zásobníku, kde začínají nepojmenované parametry.


Linux
  1. Jak získat velikost adresáře v Linuxu

  2. Takto funguje linuxový server

  3. poslední:příkaz nenalezen

  1. Jak použít sed k odstranění posledních n řádků souboru

  2. Jak odstranit varování:link.res obsahuje výstupní sekce; zapomněl jsi -T?

  3. Jak extrahovat a/nebo odstranit poslední stránku z hromady PDF?

  1. Jak seřadit výstup Du podle velikosti?

  2. Jak získat přístup k poslednímu argumentu komentovaného příkazu?

  3. Jak deaktivovat VAROVÁNÍ:apt nemá stabilní rozhraní CLI...