Блог пользователя difask

Автор difask, 11 лет назад, По-русски

Я видел, что в С++ можно писать что то типа.

#ifdef something

...

#endif

Где можно настроить это something? Я использую CodeBlocks. Спасибо!

  • Проголосовать: нравится
  • +8
  • Проголосовать: не нравится

»
11 лет назад, скрыть # |
Rev. 5  
Проголосовать: нравится 0 Проголосовать: не нравится

#include <iostream> #include <cstdio> using namespace std; #define smth int main() { #ifdef smth puts("smth is defined"); #else puts("smth is not defined"); #endif #ifndef smth // #ifnfed = !ifdef puts("smth is not defined"); #else puts("smth is defined"); #endif return 0; }
  • »
    »
    11 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Я не про это. Например я хочу подключить файлы. Некоторые кфщики пишут вот-так :

    #ifdef nickname

    freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);

    #elseif

    freopen(name".in", "r", stdin); freopen(file".out", "w", stdout);

    #endif Тоесть на компютере и тестере должны исполнться разные куски кода.

    • »
      »
      »
      11 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Лично я всегда делал так:

      //#define DEBUG
      #define TASKNAME ""
      
      ...
      
         #ifdef DEBUG
              freopen (TASKNAME".in", "r", stdin);
             	freopen (TASKNAME".out", "w", stdout);
          #else
              freopen ("input.txt", "r", stdin);
              freopen ("output.txt", "w", stdout);
          #endif
      

      Нужно вывести на консоль — часть после #else сделал комментарием
      Нужно вывести в файл TASKNAME — снял комментарий с DEBUG
      Нужно в input.txt — оставил все как есть

      Занимает это все буквально 2 секунды, уж поверьте, никакой лишней ерунды, уж поверьте

  • »
    »
    11 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Ваш код не совсем то, что я хотел. И он не компилируется. ideone Хотя это тоже крутая штука. Спасибо! И все же вы знаете как сделать такую фишку, как в предыдущем комментарии?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

Вот здесь: http://www.codeblocks.org/docs/main_codeblocks_en3.html#x3-270001.11.6

А вообще можно писать

#ifndef ONLINE_JUDGE
  // Local stuff
#endif

так как многими серверами это поддерживается.

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +12 Проголосовать: не нравится

This can be done in the compiler settings of your IDE. Usually they allow you to pass some arguments to the compiler invocation. You need to pass the argument:

-D something

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

You could enable by putting #define something 1 before that #ifdef :

#define something 
#ifdef something
...
#endif
»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

you could enable by putting #define something 1 before that #ifdef :

#define something
#ifdef something
...
#endif
»
11 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится +2 Проголосовать: не нравится

This is a simple example for #ifdef, #ifndef and #else you can also have #elif which works like else if and there is #if that works like if;

#define HelloWorld

#ifdef HelloWorld
#define ByeWorld
// This line will be executed
#else
#define HelloWorld
// This line won't be executed
#endif

#ifndef HolaMundo
#define HolaMundo
// This line will be executed
#else
#define AdiosMundo
// This line won't be executed
#endif
»
11 лет назад, скрыть # |
 
Проголосовать: нравится +18 Проголосовать: не нравится

"something" можно передать в аргументах компилятора:

g++ -Dsomething test.cpp

Если ваш проект в CodeBlocks использует CMake, откройте файл CMakeLists.txt и добавьте туда строчку

add_definitions(-Dsomething)

там же можно добавить все опции, перечисленные в этом посте, например:

add_compile_options("-std=c++11" "-O2" "-Wall" "-Wextra")
»
11 лет назад, скрыть # |
 
Проголосовать: нравится +13 Проголосовать: не нравится

For Codeblocks: Settings -> Compiler.

If you invoke gcc manually: g++ -DSOMETHING ...