C++ Koşul Sağlandığında Derlemeyi Durdurma

Varyemez

Hectopat
Katılım
3 Şubat 2018
Mesajlar
199
Yer
Türkiye
Daha fazla  
Cinsiyet
Erkek
Meslek
Lise Öğrencisi
Merhaba, mesela bir koşul sağlandığında GCC'de derleme işleminin durdurulup hata mesajı (error) vermesini nasıl sağlarız?

C++:
//Main.cpp
#include <GLFW/glfw3.h>
#include "PencereAc.h"

int main () {
    GameWindow.Width = 800;
    GameWindow.Heigth= 450;
    return 0;
}

C++:
//PencereAc.h
#include <GLFW/glfw3.h>

struct GameWindow {
    int Width, Heigth;
    bool Resizable = true;
    bool Fullscreen = false;

    void Create() {
        DetectErrors();
    }
    
    void DetectErrors () {
    if (Fullscreen && Resizable)
        //Derleme işlemi durdurulur ve hata mesajı sergilenir.
    }
};
GameWindow GameWindow;
 
Çözüm
Yapmaya çalıştığın şey mümkün. Derleyiciden önce çalışan ön işlemci (preprocessor) için makro yazman gerekiyor.
İlk önce tanımlayacağın değişkenleri makro olarak yazmalısın:
C++:
#define FULLSCREEN false
#define RESIZABLE false
Sonrasında bu değişkenleri birbiri ile karşılaştırabilirsin:
C++:
#if FULLSCREEN==RESIZABLE
    #error "FULLSCREEN ile RESIZABLE aynı"
#endif
Eğer iki değişken aynı şekilde tanımlanmışsa, GCC hata vererek çıkar.
Son olarak makroda tanımladığın değişkenleri, C++ değişkenlerine ataman gerekiyor:
C++:
    bool Resizable = FULLSCREEN;
    bool Fullscreen = RESIZABLE;
Kodun son hali:
C++:
//PencereAc.h
#include <GLFW/glfw3.h>
#define FULLSCREEN false
#define RESIZABLE false

#if FULLSCREEN==RESIZABLE
    #error "FULLSCREEN ile RESIZABLE aynı"
#endif

struct GameWindow {
    int Width, Heigth;
    bool Resizable = FULLSCREEN;
    bool Fullscreen = RESIZABLE;

    void Create() {

    }

};
GameWindow GameWindow;
Kodu derlemeye çalıştığın zaman aşağıdaki hatayı alacaksın:
Kod:
$ g++ Main.cpp
In file included from Main.cpp:3:0:
PencereAc.h:7:3: error: #error "FULLSCREEN ile RESIZABLE aynı"
  #error "FULLSCREEN ile RESIZABLE aynı"
   ^~~~~
Çözümü tam olarak anlayamadıysan, GCC'de ön işlemci ve makro konularını araştımanı öneririm.
Yapmaya çalıştığın şey mümkün. Derleyiciden önce çalışan ön işlemci (preprocessor) için makro yazman gerekiyor.
İlk önce tanımlayacağın değişkenleri makro olarak yazmalısın:
C++:
#define FULLSCREEN false
#define RESIZABLE false
Sonrasında bu değişkenleri birbiri ile karşılaştırabilirsin:
C++:
#if FULLSCREEN==RESIZABLE
    #error "FULLSCREEN ile RESIZABLE aynı"
#endif
Eğer iki değişken aynı şekilde tanımlanmışsa, GCC hata vererek çıkar.
Son olarak makroda tanımladığın değişkenleri, C++ değişkenlerine ataman gerekiyor:
C++:
    bool Resizable = FULLSCREEN;
    bool Fullscreen = RESIZABLE;
Kodun son hali:
C++:
//PencereAc.h
#include <GLFW/glfw3.h>
#define FULLSCREEN false
#define RESIZABLE false

#if FULLSCREEN==RESIZABLE
    #error "FULLSCREEN ile RESIZABLE aynı"
#endif

struct GameWindow {
    int Width, Heigth;
    bool Resizable = FULLSCREEN;
    bool Fullscreen = RESIZABLE;

    void Create() {

    }

};
GameWindow GameWindow;
Kodu derlemeye çalıştığın zaman aşağıdaki hatayı alacaksın:
Kod:
$ g++ Main.cpp
In file included from Main.cpp:3:0:
PencereAc.h:7:3: error: #error "FULLSCREEN ile RESIZABLE aynı"
  #error "FULLSCREEN ile RESIZABLE aynı"
   ^~~~~
Çözümü tam olarak anlayamadıysan, GCC'de ön işlemci ve makro konularını araştımanı öneririm.
 
Çözüm
Uyarı! Bu konu 8 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı