web-dev-qa-db-fra.com

Problème lors de la compilation du code C: erreur: attendu '=', ',', ',', 'asm' ou '__attribute__' avant 'int'

J'utilise tutoriels James M pour écrire un noyau. J'écris le code avec un compilateur croisé pour elf-i386 Arch sous macOS 10.12 avec GCC 6.2.0 et Binutils.

Tout est compilé saufmain.c, ce qui échoue avec cette erreur:

Erreur: attendu '=', ',', ';', 'asm' ou '__attribute__' avant 'int'.

Cependant, le fichier est exactement tel qu'il est dans le tutoriel. Quelqu'un peut-il m'aider à comprendre pourquoi?

/*
Sierra Kernel
kernel.c -- Main kernel file
Copyright (C) 2017  Jacobo Soffer <[email protected]>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>. 
*/

#include <os.h>

int main(struct multiboot *mboot_ptr)
{
    kprint("Welcome to the Sierra Kernel! \n"); // Test VGA Driver
    kprint(BUILD_FULL); // Print version information
    asm volatile ("int $0x3");  // Test interrupts
    asm volatile ("int $0x4");
}

Un référentiel public avec tout le code du noyau est disponible sur: https://gitlab.com/SierraKernel/Core/tree/master

4
Jacobo Soffer
int main(struct multiboot, *mboot_ptr)

A un extra "," il semble

essayer

int main(struct multiboot *mboot_ptr)
2
Sebu Elias

Peut-être que c'est une réponse tardive, mais généralement l'erreur pointe vers quelque chose qui ne va pas dans le fichier inclus juste avant int, dans votre cas, c'est os.h, essayez de détecter s'il manque un ; dans ce fichier ou dans un fichier inclus.

2
werber bang

Si vous essayez de compiler avec le dialecte C89 C, vous aurez ce problème. essayez de c99 CFLAGS + = -std = c99

0
Sujay goshal