Моя программа компилируется на Windows без проблем. На окнах я использую conio.h
на Linux я использую замену введите описание ссылки здесь. Моя первая ошибка: typedef enum {FALSE=0x00, TRUE=0xff} BOOL;
и ошибка:
types.h:39:15: error: expected identifier before numeric constant
types.h:39:15: error: expected ‘} before numeric constant
types.h:39:15: error: expected unqualified-id before numeric constant
types.h:39:36: error: expected declaration before ‘} token
Поэтому проблема заключается в том, как избежать re -D, используя TRUE/FALSE и BOOL.
При портировании C-приложений неплохо иметь файл заголовка, который определяет возможности различных систем, к которым вы подключаетесь, сохраняя конкретную логику машины в одном месте.
Затем в вашем источнике вы можете работать над чем-то вроде:
#include "machine.h"
#if HAS_BOOL
#define FALSE myFALSE
#define TRUE myTRUE
#define BOOL myBOOL
#endif
#ifndef HAS_32bit_LONG
/* long is 64bit */
...
#endif
Затем ваши типы.h, включенные после системных файлов и machine.h, будут избегать попытки повторного использования -D.
В machine.h вы можете выяснить, на какой машине вы компилируете (или задаете свой собственный -D аргумент компилятору C) и установите соответствующие возможности, чтобы включить код, который работает вокруг вещей. Хотя это может показаться излишним, когда вы "просто" делаете один порт, вы обнаружите, что это значительно упростит, если вы позже перейдете к OSX.
Это может показаться хрупким, но с использованием этой стратегии разрешено использование пакетов альтернативных сигналов, при необходимости улучшенные версии malloc, с минимальным нарушением исходной версии, поэтому сохраняя одну исходную базу для всех целей.
Команда typedef сталкивается с каким-то другим заголовком, который #defines FALSE или TRUE.
typedef enum {FALSE=0x00, TRUE=0xff} BOOL;
строка:typedef enum {FALSE=0x00, TRUE=0xff} BOOL;