Подтвердить что ты не робот

В чем разница? clang++ | clang -std = С++ 11

Я ошибочно использовал эту команду, которая не удалась на этапе ссылки:

$ clang -std=c++11 -stdlib=libc++ myInputFile.cpp

Может ли кто-нибудь объяснить, почему clang предоставляет параметр языка С++ и почему он не связан? Почему параметры -x c++ или -std=c++11 не выполняются так же, как clang++? Спасибо!

4b9b3361

Ответ 1

Технически ни одна из программ с именем clang или clang++ не является компилятором: они оба являются драйверами, которые анализируют входные аргументы и определяют, какие компиляторы/ассемблеры/компоновщики ссылаются на какие файлы с аргументами командной строки. Единственное различие между ними заключается в том, что clang ссылки против только стандартной библиотеки C, если он выполняет ссылку, тогда как clang++ ссылки на стандартные библиотеки С++ и C.

Параметр -x=<language> переопределяет эвристику программ драйверов для определения языка исходного файла, он направляет драйвер для вызова компилятора для <language> независимо.

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

Короче говоря, есть две разные программы драйверов, которые позволяют легко выбирать, с какой библиотекой следует ссылаться. Имеются разумные варианты использования для компиляции С++, но не для связывания с стандартной библиотекой С++.

Ответ 2

Clang - это имя всего компилятора.

Однако, с точки зрения командной строки:

  • Clang - компилятор C
  • Clang++ является компилятором С++ (например, g++ является компилятором С++, тогда как gcc является компилятором C)

Параметр -std = С++ 11 включает новый стандарт С++ 11 (как в g++).