Как «переопределить» один символ * к другому символу *? - PullRequest
1 голос
/ 20 декабря 2010

Примерно так: (это задача, как это сделать, а не менять тело основной функции)

Я думал, что это слишком просто ... но ... я не знаю, как это сделать ...

#include <iostream>

#define "a" "b"

int main( int argc,char ** argv) {
   std::cout << "a";
   return 0;
}

// вывод: b

Как это сделать?

Ответы [ 6 ]

8 голосов
/ 20 декабря 2010

К счастью, вы не можете переопределить строковые литералы.Конечно, реальный вопрос: почему вы хотите это сделать?

4 голосов
/ 20 декабря 2010

Изменение вывода на C ++ без изменения функции main ()

, например, из этой темы:

#include <iostream> 
#include <cstdio> 
#include <sstream> 

#define cout     printf("a"); std::ostringstream os; os 

int main() 
{ 
    std::cout << "b"; 
}

проще:

#include <iostream>
#define cout cout << "a"; return 0; std::cout
int main() 
{ 
    std::cout << "b"; 
}
4 голосов
/ 20 декабря 2010

Имена макросов должны быть идентификаторами, и поэтому не могут содержать символ ".

2 голосов
/ 20 декабря 2010

Вы не можете.Препроцессор не «смотрит» на строковые литералы.

0 голосов
/ 20 декабря 2010

#define - это плохой c++ стиль. Используйте const.

#include <iostream>  
// const char * string_a = "a"; // Regular: Use const char *
const char * string_a = "b"; // Replacing: Instead of bad    #define "a" "b"  

int main( int argc,char ** argv) {    
    std::cout << string_a;    
    return 0; 
}  
0 голосов
/ 20 декабря 2010

Вероятно, вы хотите сделать это:

#include <iostream>

#define a "b"

int main( int argc,char ** argv) {
   std::cout << a;
   return 0;
}

Вывод: b

...