Ответ 1
Технически ни одна из программ с именем clang
или clang++
не является компилятором: они оба являются драйверами, которые анализируют входные аргументы и определяют, какие компиляторы/ассемблеры/компоновщики ссылаются на какие файлы с аргументами командной строки. Единственное различие между ними заключается в том, что clang
ссылки против только стандартной библиотеки C, если он выполняет ссылку, тогда как clang++
ссылки на стандартные библиотеки С++ и C.
Параметр -x=<language>
переопределяет эвристику программ драйверов для определения языка исходного файла, он направляет драйвер для вызова компилятора для <language>
независимо.
Опция -std=<dialect>
выбирает, какой диалект определенного языка вы хотите использовать. Если вам нужно убедиться, что ваша программа на С++ переносима на старый компилятор С++ 98, вы можете скомпилировать ее с помощью -std=c++98
. -std
применяется только к целевому языку: он не будет пытаться скомпилировать, например. ассемблер или java как С++ 98, только исходные файлы, которые драйвер считает С++.
Короче говоря, есть две разные программы драйверов, которые позволяют легко выбирать, с какой библиотекой следует ссылаться. Имеются разумные варианты использования для компиляции С++, но не для связывания с стандартной библиотекой С++.