Когда я искал значение __cplusplus
, я нашел следующий фрагмент кода.
#include <stdio.h>
int main() {
#define TO_LITERAL(text) TO_LITERAL_(text)
#define TO_LITERAL_(text) #text
#ifndef __cplusplus
/* this translation unit is being treated as a C one */
printf("a C program\n");
#else
// this translation unit is being treated as a C++ one
printf("a C++ program\n__cplusplus expands to \""
TO_LITERAL(__cplusplus) "\"\n");
#endif
(void)getchar();
return 0;
}
Этот код дает разные результаты в зависимости от того, каким образом он скомпилирован. Но я плохо разбираюсь в двух жирных линиях.
- Почему неправильно, если я объединяю эти две строки в одну строку:
#define TO_LITERAL(text) #text
- Что означает #текст во второй строке?
Большое спасибо
g++
это-E
. Для MSVC это/P
. - person Scheff's Cat   schedule 27.07.2017__cplusplus
прочитайте это. Этот фрагмент кода показывает, какая стандартная версия C++ действует. У C тоже есть, это__STDC_VERSION__
- person StoryTeller - Unslander Monica   schedule 27.07.2017