Loading...
RaUndreundre avatar RaUndreundre 54 Точки

Visual Studio Code със стандарт C++11

Здравейте,
За целите на курса C++ Advanced, по препоръка на лектора, трябва да си настроя IDE-то на C++11 за да е съвместимо с джъдж (за да не ме боли главата, както каза той :-D ).
Утрепах няколко часа в четене и проби - не ще и не ще. - все си стои на C++14.
Някой да е минавал през тази мизерия за VSCode?

Тагове:
0
C++ Advanced
j.petrov_90 avatar j.petrov_90 373 Точки

Привет,
Не ползвам Visual Studio Code, но намерих това:
https://code.visualstudio.com/docs/cpp/config-msvc

Иди на секцията C/C++ configurations

This opens the C/C++ Configurations page. When you make changes here, VS Code writes them to a file called c_cpp_properties.json in the .vscode folder.

Папките, които започват с точка обикновенно са скрити за file exporer-a, освен, ако не му дадеш да показна скрити файлове и папки.

Visual Studio Code places these settings in .vscode\c_cpp_properties.json. If you open that file directly, it should look something like this:
Предполагам, ако смениш cppStandard: "c++17" на c++11 би следвало да сработи.

{
  "configurations": [
    {
      "name": "Win32",
      "includePath": ["${workspaceFolder}/**"],
      "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
      "windowsSdkVersion": "10.0.18362.0",
      "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "intelliSenseMode": "msvc-x64"
    }
  ],
  "version": 4
}
0
RaUndreundre avatar RaUndreundre 54 Точки

Благодаря за отдленото време. За съжаление това не сработва при мен. Някъде го държи това 14 и туй си е.
Ще го мъча като намеря време а за сега ще имам едно наум за джъджа.
За проверка на стандарта ползвам следния код и си мисля че би трябвало да е правилен.

#include<iostream>
int main() {
   if (__cplusplus == 201703L)
      std::cout << "C++17" << std::endl;
   else if (__cplusplus == 201402L)
      std::cout << "C++14" << std::endl;
   else if (__cplusplus == 201103L)
      std::cout << "C++11" << std::endl;
   else if (__cplusplus == 199711L)
      std::cout << "C++98" << std::endl;
   else
      std::cout << "pre-standard C++" << std::endl;
}

 

0
Smeshan avatar Smeshan 89 Точки

Привет,
при мен с този код за проверка винаги изписва C++98 :? независимо дали слагам 14 или 17?
Иначе изобщо нямам такъв файл в c_cpp_properties.json в .vscode дори след като направя промени уж да се запишат там.

Аз нещо съм изпуснал, но какво трябва да се внимава с джъдж ако не е настроен на с++11?

Поздрави,
Илиян

0
04/06/2021 18:16:04
Axiomatik avatar Axiomatik 2422 Точки

StackOverflow => https://stackoverflow.com/questions/53995830/compiling-c11-in-visual-studio-code

Go to Settings > User Settings In here, search for Run Code Configuration:

Under this menu, find: "code-runner.executorMap"

Edit this Setting by adding it to User Setting as below for C++11 support:

"code-runner.executorMap":{
    "cpp": "cd $dir && g++ -std=c++11 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
},


OR

Edit this Setting by adding it to User Setting as below for C++17 support:

"code-runner.executorMap":{
    "cpp": "cd $dir && g++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
},

 

0
nikant avatar nikant 2 Точки

И за мен това се появява, като проблем от време на време - във VS работи, в Judge обикновено компилатора дава грешка.

Засега съм решил въпроса, като тествам кода в Code Blocks. Там не знам как да проверя на каква версия е С++, но засега на 100% дава идентични резултати, като в Judge.

Във VS не е нужно да му задавам #include<algorithm>, в Judge компилатора дава  грешка и от Code Blocks разбрах какъв е проблема.

Функцията accumulate за вектори в единия компилатор е в <algorithm>, в другия е в <numeric>

Засега това съм установил, като разлика или поне не се сещам за нещо друго.

1
06/06/2021 12:21:49
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.