Home > Software engineering >  Error compiling in C [ error: expected ‘=’, ‘,’, ‘;’ ... ]
Error compiling in C [ error: expected ‘=’, ‘,’, ‘;’ ... ]

Time:12-31

When I want to compile the Raci.c file by executing gcc Raci.c, I get the following error :

Raci.c:32:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘WinMain’ 32 | int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, hPrev, LPSTR lpCmdLine, int nCmdShow) {

I've been trying to find the solution for a long time and I can't find it.

Thanks in advance and sorry if it's a 'stupid' bug I've been studying C on my own for a short time.

I attach the content of Raci.c :

       │ File: Raci.c
───────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │
   2   │ #include<stdio.h>     // Libreria estandar para valores entrada/salida
   3   │ #include<stdlib.h>    // Define 4 variables, macros y otras funciones generales
   4   │ #include<unistd.h>    // Proporciones acceso a la API de POSIX (Operating System Interface). Estander IEEE que permite compatibilidad entre diferente S.O.
   5   │
   6   │ #ifdef _WIN32
   7   │ #include<winsock2.h>  // Nos permite establecer conexiones con el servidor
   8   │ #include<windows.h>   // Definimos que trabajaremos con Windows y nos aporta compatibilidad con ciertas funciones
   9   │ #include<winuser.h>   // Permite diferentes funciones Windows Based
  10   │ #include<wininet.h>   // Permite conexiones inet (detallar)
  11   │ #include<windowsx.h>  // Mas compatibilidad Windows
  12   │ #endif
  13   │
  14   │ #include<string.h>    // Permite manipular arrays de characteres comodamente (strings(
  15   │ #include<sys/stat.h>  // Libreria C POSIX que contiene construcciones que facilitan obtención de información sobre atributos de archivos
  16   │ #include<sys/types.h> // Diferentes variables y estructuras...
  17   │
  18   │
  19   │ /*
  20   │ Función main/prinicpal donde estableceremos conexión con el servidor y especificaremos el resto de funciones.
  21   │
  22   │ APIENTRY => Alias de WINAPI (Explicamos al compilador como manejar el stack y argumentos al llamar la función)
  23   │
  24   │
  25   │     PARAMETERS :
  26   │
  27   │     HINSTANCE hInstance => Identificador de instancia / modulo. El S.O. utiliza este valor para identificar el EXE cuando es cargador en memoria.
  28   │     HINSTANCE hPrev     => Identificador de instancia previo
  29   │     LPSTR lpCmdLine     => Contiene la linea de comandos en un String Unicode (Nos da la shell utilizando un charset en casi todos los idiomas (UNICODE))
  30   │     int nCmdShow        => Indicador de tamaño de ventana CMD (pequeña, grande, invisible ...)
  31   │ */
  32   │ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow) {
  33   │
  34   │     // Inicializaciones de consola
  35   │
  36   │     HWND stealth; // Identificador de ventana parte de Win32 API
  37   │     AllocateConsole(); // Inicializa nueva consola permitiendo entrada / salida y control de errores de esta misma.
  38   │     stealth = FindWindowA("ConsoleWindowClass", NULL); // Función para encontrar la ventana con ClassName "ConsoleWindowClass" sin especificar titulo. Busca la ventana / proceso
  39   │
  40   │     ShowWindow(stealth,0); // Inicializamos la consola sin mostrarla
  41   │
  42   │ }

CodePudding user response:

APIENTRY is not defined in any of the headers included by your program.

For a program using the Windows API, you should define _WIN32 on the compiler command line so it includes the OS specific headers that define all these symbols and types...

Try: gcc -D_WIN32 Raci.c -o Raci.o

As commented by David Grayson, your compiler might not be installed correctly to compile Windows programs.

CodePudding user response:

I answer my question in case this resolves the same error for someone.

When wanting to compile the C Raci.c file by executing a gcc Raci.c the error occurs:

Raci.c:32:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘WinMain’ 32 | int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow) {

This is due to the fact that the gcc compiler has Linux-based systems as "target / destination" and when wanting to compile headers / headers with "target / destination", Windows based skips the above error.

Excerpt from the line that indicates target from gcc:
gcc -v : Target: x86_64-linux-gnu

Solution
Using the mingw32 package we can compile and link headers to Windows on our Linux system.

  • Install mingw32 => apt install mingw-64
  • Example to compile / use x64-bit => x86_64-w64-mingw32-g [file.c]
  • Example to compile / use 32-bit => i686-w64-mingw32-g [file.c]
  • Related