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.
Dilin grameri doğru yazılmış işe, complier hata vermez; Sizin amacınız nedir ?
Kodlarda bulunun iki tane boolean tipi değişken True değerinde olur ise derlemenin (compiling) durmasını istemekteyim, bu mümkün değil mi?
 
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
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…