Перейти к контенту

C++


Рекомендуемые сообщения

@PlayMod, а тебе разве мешает?

Тема заведомо непопулярна, однако у кого то когда то могут возникнуть вопросы именно по самому языку (например про новые стандарты).

Да что уж там, давайте я и спрошу. В общем существует c++11, а так же c++14. Вопрос, начиная с какой версии Visual Studio уже "из коробки" поддерживается полностью первый и второй(второй вообще доделан до конца, ну т.е. выпущен)? Из коробки, т.е. без установки всяких c++ compiler nov 2012/2013 ctp? Просто у меня получилось скомпилить с новыми определениями методов (=delete/=default) только в 2015 превьюхе, а так же в 2013, а вот в старушке 2012 даже с вышеуказанными компиляторами не проканало.

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение

Весьма "нубский" вопрос. У нас есть две разрядности приложений - 32 и 64. А еще есть х86 - платформа, на основании которой построено (или поддерживается, как это правильнее?) большинство процессоров (ПК), так? Я к тому, что x86 это одно, а x32 и x64 это другое. Почему тогда разработчики ставят в пару именно x86 и x64? Например либы в DirectX SDK. Разве x86 считается полным синонимом x32 в определенном (или даже без него?) контекте?


Есть такая мини-статья, в принципе мои "познания" сходятся с тем, что там написано, и вполне логично.

И в догонку еще такое нашел.

Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение

И снова я с простенькими вопросами-уточнениями. Речь пойдет о подключении библиотеки к проекту VS.

Итак, есть два (вроде) вида библиотек: статическая и динамическая. На сколько я понял, со статической все просто, нужен заголовочный файл и непосредственно статическая библиотека. На выходе мы имеем один файл (.exe например), в который эта статика непосредственно вкомпиллена, ну или как правильнее, это же линковщик делает. Со статикой верно?

Далее, динамика, тут интереснее, файл заголовка остается по смыслу таким же, добавляется сама динамика (.dll), и к этому нужно добавить библиотеку импорта, которая имеет так же расширение .lib, что ввело меня в кратковременный ступор. В этом случае библиотека импорта так же вкомпилливается в наш файл, и он уже будет знать, куда ссылаться, функция там или переменная. С динамикой верно?

Т.к. динамика несколько сложнее, еще вопросы. По сути нам надо создать библиотеку импорта и в свойствах проекта это можно указать для dll. Чтобы экспортировать из динамики у нас есть несколько способов, меня интересуют два, это с помощью .def-файла и __declspec(dllimport|dllimport). Собственно чем они отличаются? И можно или нужно ли их использовать вместе?

Заголовок

#pragma once

#ifdef COMPILING_DLL //добавлен в св-вах проекта для длл
#define DLLSPEC __declspec(dllexport)
#else
#define DLLSPEC __declspec(dllimport)
#endif

DLLSPEC int GetSum(int, int);
Код библиотеки

#include "Header.h"

DLLSPEC int GetSum(int a, int 
{
    return a + b;
}
Приложение

#include <iostream>
#include "../DynamicLib/Header.h" //хедер из длл

#pragma comment(lib, "DynamicLib.lib") //можно указать в св-вах проекта в Additional Dependencies

int main()
{
    std::cout << GetSum(1, 3) << std::endl;
    system("pause");
    return 0;
}

 

И таки да, есть возможность добавить reference в св-вах проекта, если это все в одном солюшене. Я так понимаю, он просто добавляет все опции для линкера без нашего шаманства?

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение

Здесь на самом деле терминологическая путаница.

Уверен? Я не очень.

Статические библотеки - это файлы .h

Цитата из статьи http://www.cplusplus.com/forum/articles/10627/

files with header extensions might be ignored by the compiler if you try to compile them

Статическая либа - файл с расширением .lib, хедеры используются в качестве include, т.е. вставляются препроцессором прямо в файл c(pp). Далее можно прочитать, что же делает компилятор.

Вкомпилить dll в свой проект - это, в общем, объединение его с exe так, что отдельный dll становится не нужен.

Sorry, но это вообще жесть. Я посчитаю, что я этого не читал.

 

PS: похоже я несколько запоздал с ответом... но хорошо, что так все оперативно, @xStream, как всегда, спасибо :)

Изменено пользователем Desertir
  • Нравится 3

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение

Делаю Variadic templates (template<class ... Args>). В общем если определение такой функции находится в файле, где она вызывается, все ок. Переношу определение в другой cpp и линкер ломается, говорит "1 unresolved externals".

//share.h

#pragma once

#include <string>

 

template<typename... Args>

void test(string name, Args... args);

//main.cpp

#include "share.h"

void main()

{

test("%s\n", "Success");

system("pause");

}

//works fine, go to test.cpp...

template<typename... Args>

void test(string name, Args... args)

{

printf(name.c_str(), args...);

}

//test.cpp

#include "share.h"

//...and not works

template<typename... Args>

void test(string name, Args... args)

{

printf(name.c_str(), args...);

}

error LNK2019: unresolved external symbol "void __cdecl test<char const *>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char const *)" (??$test@PBD@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PBD@Z) referenced in function _main	

Я так понимаю, это магия этих пакетизированных типов, как правильно в таком случае написать код?

Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение
@Elz, открой файл нотепадом и глянь эту строку. Почему то xml тег побился, или вообще левый появился, у меня такого нет (ни <#text> ни <text>) Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение

@Elz, похоже никто не в теме.

 

Свершилось чудо, а именно релиз мега крутой надстройки ReSharper для С++. Теперь код и на C++ можно "писать" в несколько кликов.

Конечно были EAP версии, и я ими пользовался, но тем не менее релиз - долгожданное событие.

Изменено пользователем Desertir
  • Нравится 1

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение

@Карлан, а чего тут объяснять? Есть ячейка памяти с определенным номером 0x1234DEAD (для x32/x86).

Переменная это именованная ячейка 0x1234DEAD + некоторый объем других ячеек, в зависимости от типа переменной.

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

Указатель сам себе переменная, которая хранит цифру. Эта цифра и есть 0x1234DEAD.

 

А вот где и как их применять - отдельный вопрос, объяснить просто будет трудно и будет очень много слов.

Проще задавать конкретные вопросы.

 

PS: надеюсь не сказал нигде глупость.

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение

char &addr = s;

И как компилятор тебе указатель в ссылку превратит? Разыменовываем и вперед.

Я специально не стал упоминать оператор присваивания, там еще надо объяснять, когда будет вызван конструктор копирования, а когда нет.

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение

в каких там int* a или int *a, int& a, int &a

Это из раздела "табы или пробелы". Пиши int * myVeryNiceIntegerPointer :)

Кроме этих мантр тебе никто ничего не скажет, надо просто брать, и писать чтото свое, а потом спрашивать, почему не работает. Или почему работает.

  • Спасибо 1

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение

2 Desertir: m1VeЯyKee\/\/11IntigerP001nteЯ - так круче.

Речь не об этом. Была.

пишу потому-что не работает

Тогда не нужно абстрактных вопросов, кидаешь неработающий код, а знающие подскажут.

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...