Visual Studio не выдает ошибку, если заголовок отсутствует - PullRequest
0 голосов
/ 07 мая 2020

Я сейчас тестирую с помощью простой тестовой программы. Это выглядит так:

#include <iostream>
using namespace std;
int main() {
    string s = "a b c d ";
    remove(s.begin(),s.end(),' ');
}

Когда я создаю его с помощью Visual Studio, он строится правильно и не выдает никаких ошибок. Однако, если я попытаюсь создать его с помощью eclipse (mingw), он будет жаловаться на функции «удалить», как и должно быть, потому что соответствующий заголовок не включен. Есть ли способ настроить визуальную студию так, чтобы она также жаловалась и не включала автоматически заголовки или что-то еще, что она делает? Я уже проверил, отключив возможность использования предварительно скомпилированных заголовков в свойствах проекта Visual Studio, и это не помогает.

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

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

Он только определяет, в каких файлах определены определенные c функции.

Итак, если конкретная реализация c, которую вы используете, включает в себя все через файл, и вам не нужно включать что-либо еще, то это все еще разрешено стандартом.

Итак, в в одной реализации все скомпилируется, а в другой будут появляться ошибки. Это не контролируется стандартом C ++.

Вы можете сообщить об ошибке разработчикам и посмотреть, согласны ли они, что это ошибка. (В данном случае: https://github.com/microsoft/stl/issues)

0 голосов
/ 07 мая 2020

Когда вы пишете программу, которая не включает правильные заголовки, некоторые инструментальные цепочки могут просто так успешно построить вашу программу, потому что, возможно, их <iostream> в конечном итоге включает нужный вам заголовок ( как <algorithm>).

Это не меняет того факта, что ваш код неверен. Вы получаете сборку случайно.

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

Итак:

#include <string>
#include <algorithm>
...