pozbycie się warningów w C

pozbycie się warningów w C
FV
  • Rejestracja:około 6 lat
  • Ostatnio:3 miesiące
  • Postów:96
0

Hej
Czy jest jakiś sposób by pozbyć się dwóch poniżej warningów gdy nie mamy możliwości zmiany typu argumentów funkcji? Rzecz dotyczy języka C, więc reinterpret_cast odpada.

Kopiuj
#include <stdio.h>
#include <stdlib.h>

void funkcja(int arg)
{
    const char* x = (const char*)arg;
    printf("x=%s\n", x);
}

static void handle(void *cmd)
{
    funkcja((int)cmd);
}

int main()
{
    const char* x = "blablafgh";
    handle((void *)x);

    return 0;
}

warningi:

Kopiuj
main.c:14:21: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]                         
main.c:20:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]  

To powyżej to uproszczenie.
Programując kernel moduł na interfejsie w callbacku we frameworku mam typ int a muszę przekazać tam const char*. Szkoda, że nie dali void gwiazdka.

edytowany 1x, ostatnio: fvg
enedil
Ale te warny mówią, że int ma mniejszy rozmiar niż const char*. Zapewne sizeof(int)==4, a sizeof(const char*) == 8.
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:2 minuty
2

Po prostu nie rób konwersji miedzy typem całkowitym a wskaźnikiem. Da się, ale jest to wprowadzania zamieszania i potencjalne źródło błędów.
A jak już z jakiegoś dziwnego powodu musisz to użyj: intptr_t lub uintptr_t jako typ całkowity.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.