После прочтения орграфов и триграфов я продолжил и протестировал простую программу:
#include <stdio.h>
int main()
{
int a = 0;
//??/
++a;
printf("%d",a);
return 0;
}
и по рефлексу я сделал
g++ -std=c++11 test.c
и, к моему удивлению, не было выдано никаких предупреждений, и был напечатан 0, так что я продолжил и попытался скомпилировать компилятор Си, и он выдал предупреждение из-за триграфа.
Мой вопрос почему -std=c++11
автоматически тянуть в -trigraphs
и не выдают предупреждение по умолчанию? (без использования -Wall) Требуются ли реализации определенных функций C ++ 11? (очень сомневаюсь, но стоит спросить)
Переходя -std=c99
имеет тот же эффект, что и включение триграфа и отключение предупреждения.
Это должно позволить триграфу быть строго совместимым со стандартом. Отключение предупреждения удивительно, но обратите внимание, что предупреждение о триграфе игнорируются. Предупреждение, вероятно, уходит, потому что -std
не удалось активировать отдельные предупреждения (-Wtrigraphs
) о триграфе используемый.
И это, вероятно, следует считать ошибкой.
Других решений пока нет …