Странна работа
30 отговора
1389 прегледа
Странна работа
Пичове, защо когато пробвам да компилирам ей това с MSVC++ като win32 application:
char buf[80]; strcpy(buf,"blabla"); получавам грешка в първия аргумент, който трябва попринцип да е char*(cannot convert buf[80] to char*), а когато го компилирам като win32 console application всичко минава без грешки ?
char buf[80]; strcpy(buf,"blabla"); получавам грешка в първия аргумент, който трябва попринцип да е char*(cannot convert buf[80] to char*), а когато го компилирам като win32 console application всичко минава без грешки ?
объркал си се нещо...
не прави проблем - компилацията си мина
аз пък преоткривам топлата вода...
аз пък преоткривам топлата вода...
Re: Странна работа
Triabva ima oshte neshto v syobshtenieto - tipa na buf[80]. Proveri dali v opciite ne si zadal na compiler-a default "char" da go pravi na unsigned ili signed, shtoto i v dvata sluchaia dava greshka:
unsigned char buf[80];
strcpy(buf,"blabla");
Kazva:
error C2664: 'strcpy' : cannot convert parameter 1 from 'unsigned char [80]' to 'char *'
Grubia nachin e da kajesh strcpy((char*)buf,"blalba"); ama tova ne e elegantno. Proveri nomera na greshkata v MSDN.
Sys zdrave!
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
unsigned char buf[80];
strcpy(buf,"blabla");
Kazva:
error C2664: 'strcpy' : cannot convert parameter 1 from 'unsigned char [80]' to 'char *'
Grubia nachin e da kajesh strcpy((char*)buf,"blalba"); ama tova ne e elegantno. Proveri nomera na greshkata v MSDN.
Sys zdrave!
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Opravih se po grubiq na4in
Благодаря за помощта
Използвах грубия начин strcpy((char*) buf,"blabla"); и се получи, след няколко дни пробвах да компилирам отново без явно преобразуване и пак се получи (не съм променял нищо). Вече почвам да си мисля че има нещо гнило в MVC++. . От мсдн разбрах че става въпрос за промени свързани със съвместиомст с анси, но нищо конкретно за промяна на настроики на компилатора.
Използвах грубия начин strcpy((char*) buf,"blabla"); и се получи, след няколко дни пробвах да компилирам отново без явно преобразуване и пак се получи (не съм променял нищо). Вече почвам да си мисля че има нещо гнило в MVC++. . От мсдн разбрах че става въпрос за промени свързани със съвместиомст с анси, но нищо конкретно за промяна на настроики на компилатора.
Re: Opravih se po grubiq na4in
То има много гнили работи, ама е трудно да се хванат. Моят съвет е да пишeш по ANSI, и няма да имаш проблеми. Т.е., разкарвай precompiled headers.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Re: Opravih se po grubiq na4in
кво пък общо има precompiled headers i ANSI? и кво - да му билдва 10 пъти по-бавно?
а за първия човек - имаш ли всички service packs na studioto?
а за първия човек - имаш ли всички service packs na studioto?
Re: Opravih se po grubiq na4in
Ми точно че няма нищо общо с ANSI, затова да ги маха. А това с 10те пъти по-бавно ей сега си го измисли. VC6.0 е достатъчно интелигентна система за да компилира само това което трябва.
Прекомпилираните хедъри са предвидени за работа с MFC (RTFMSDN), а като говорим за MFC, вече така или иначе не говорим за ANSI. Pls, недей да говориш наизуст.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Прекомпилираните хедъри са предвидени за работа с MFC (RTFMSDN), а като говорим за MFC, вече така или иначе не говорим за ANSI. Pls, недей да говориш наизуст.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Редактирано от Duncan Griffin на
Re: Opravih se po grubiq na4in
хехехехе ти ме разби 

precompiled headers bilo za MFC LOL :)))
ама и аз ти се вързах и реших да пробвам - ами в проект с 7 файла, които правят
#include "stdafx.h"
using namespace std;
static map<int, int> theMap;
се усеща разликата със и без precompied headers..... то при толкова малко файлове е трудно да се засече, ама поне 3 пъти...
"dostatychno inteligentno" hehe to tva ne e svyrzano s koe-koga da kompilira i dali e inteligentno...
precompiled headers bilo za MFC LOL :)))
ама и аз ти се вързах и реших да пробвам - ами в проект с 7 файла, които правят
#include "stdafx.h"
using namespace std;
static map<int, int> theMap;
се усеща разликата със и без precompied headers..... то при толкова малко файлове е трудно да се засече, ама поне 3 пъти...
"dostatychno inteligentno" hehe to tva ne e svyrzano s koe-koga da kompilira i dali e inteligentno...
Редактирано от Questor на
Precompiled Headers
Мисля , че сега му е времето някой да ми обясни какво е прек. хедърс и дали се излползват извън мфц
Re: Precompiled Headers
ми както каза колегата, RTFMSDN :)
и се сещам за една песен на Фил Колинс - Do as I say, Don't do as I do :)
и се сещам за една песен на Фил Колинс - Do as I say, Don't do as I do :)
Re: Opravih se po grubiq na4in
Направих си труда да опитам дадения от теб пример с 10 файла които правят това, и изобщо не виждам разлика. Единствения вариант който според мен би бил такова забавяне е изрично да си задал отделно компилиране при всеки include/definition.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Re: Precompiled Headers
Creating Precompiled Header Files
The Microsoft C and C++ compilers provide options for precompiling any C or C++ code—including inline code. Using this performance feature, you can compile a stable body of code, store the compiled state of the code in a file, and during subsequent compilations combine the precompiled code with code that is still under development. Each subsequent compilation is faster because the stable code does not need to be recompiled.
Звучи много добре, и наистина е така. Но както винаги майкрософтци използват добра идея и я кръщават с друго име. Това което са използвали този път е технология от 1970 и някоя година. Технологията се нарича "разделно компилиране на файлове", и се базира на принципа на който се build-ва изпълнимия файл:
Сорс ----компилиране-----> Обектен файл -------свързване------> Изпълним файл
Технологията се използва от 20 години насам от всяка МАКЕ програма - проверява дали сорса е променян, и ако е - тогава компилира, ако не - тогава използва обектния файл който е строен последно (ако няма обектен файл също компилира). По този начин компилирането става само веднъж, НЕЗАВИСИМО колко пъти се използва кода от други файлове.
Прекомпилираните хедъри работят на същия принцип, но са Microsoft specific и наистина имат някои предимства, които са валидни изключително при МФЦ разработки. По принцип няма проблем да ги ползваш и без МФЦ.
Проблемът обаче идва когато VC6.0 обърка нещичко във въпросните прекомпилирани хедъри - от този момент нататък трябва да жертваш дни наред докато се оправиш. На мен ми се случи при разработката на един game engine който имаше инфраструктура от десетина проекта в един workspace.
Накрая се принудихме да извадим сорсовете и да ги сложим в един чисто нов workspace за да успеем да компилираме.
Та, моят съвет си остава да следваш стандартната технология без PСH - проектирай си програмата да използва оптимален брой файлове, VC ще компилира само тези които са променяни (ако не дадеш Rebuild, тогава компилира всичко но пак само по веднъж).
Който иска нека вярва, който не иска - да не вярва. Това е безплатен съвет от човек който пише от 3 години почти само на VC6.0 (аз това
) и се е сблъсквал с проблеми граничещи с абсурда.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
The Microsoft C and C++ compilers provide options for precompiling any C or C++ code—including inline code. Using this performance feature, you can compile a stable body of code, store the compiled state of the code in a file, and during subsequent compilations combine the precompiled code with code that is still under development. Each subsequent compilation is faster because the stable code does not need to be recompiled.
Звучи много добре, и наистина е така. Но както винаги майкрософтци използват добра идея и я кръщават с друго име. Това което са използвали този път е технология от 1970 и някоя година. Технологията се нарича "разделно компилиране на файлове", и се базира на принципа на който се build-ва изпълнимия файл:
Сорс ----компилиране-----> Обектен файл -------свързване------> Изпълним файл
Технологията се използва от 20 години насам от всяка МАКЕ програма - проверява дали сорса е променян, и ако е - тогава компилира, ако не - тогава използва обектния файл който е строен последно (ако няма обектен файл също компилира). По този начин компилирането става само веднъж, НЕЗАВИСИМО колко пъти се използва кода от други файлове.
Прекомпилираните хедъри работят на същия принцип, но са Microsoft specific и наистина имат някои предимства, които са валидни изключително при МФЦ разработки. По принцип няма проблем да ги ползваш и без МФЦ.
Проблемът обаче идва когато VC6.0 обърка нещичко във въпросните прекомпилирани хедъри - от този момент нататък трябва да жертваш дни наред докато се оправиш. На мен ми се случи при разработката на един game engine който имаше инфраструктура от десетина проекта в един workspace.
Та, моят съвет си остава да следваш стандартната технология без PСH - проектирай си програмата да използва оптимален брой файлове, VC ще компилира само тези които са променяни (ако не дадеш Rebuild, тогава компилира всичко но пак само по веднъж).
Който иска нека вярва, който не иска - да не вярва. Това е безплатен съвет от човек който пише от 3 години почти само на VC6.0 (аз това
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Re: Opravih se po grubiq na4in
Kakwo razbirash pod 'изрично да си задал отделно компилиране при всеки include/definition'? Vseki pyt pravq Rebuild all. A - i sym s VC7.
Re: Opravih se po grubiq na4in
>> 'изрично да си задал отделно компилиране при всеки include/definition'
Е какво според теб мога да имам предвид под това?!?
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Е какво според теб мога да имам предвид под това?!?
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Re: Opravih se po grubiq na4in
emi ne znam kakvo e tova i kyde se zadava...??
(Enable Minimal Rebuild = No)
(Enable Minimal Rebuild = No)
Редактирано от Questor на
Re: Opravih se po grubiq na4in
Това се използва много рядко, например ако се налага да модифицираш сорса по време на самата компилация. Т.е. самото компилиране води до промяна на сорса.
Аз съм го ползвал при записване на програми върху ROM, когато target беше непосредствено RO-паметта и трябва да се направят 300 компилации на драйвер, всяка с различно ID.
Във VC не съм виждал такова нещо, и нямам идея дали изобщо го има. Ама де да те знам на какво си способен, според мен 3 пъти по-бавно компилиране на проект при on/off PCH се дължи или ако изрично е указано така, или ако е направено некадърно.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Аз съм го ползвал при записване на програми върху ROM, когато target беше непосредствено RO-паметта и трябва да се направят 300 компилации на драйвер, всяка с различно ID.
Във VC не съм виждал такова нещо, и нямам идея дали изобщо го има. Ама де да те знам на какво си способен, според мен 3 пъти по-бавно компилиране на проект при on/off PCH се дължи или ако изрично е указано така, или ако е направено некадърно.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Re: Opravih se po grubiq na4in
Брей сега пък на друг компилатор отидохме, пък и драйвер - сигурно е бил 1 файл, и сигурно и компилаторът не е имал PCH-ta...
И каква е тая простотия компилаторът да ти променя сорса 'по време на компилация' - за това си има custom build, ако щеш в маке файла си слагаш нещо да ти направи вълнуващата промяна и т.н....
Айде ако обичаш или говори за MSVC и не отбивай топката или си затрай.
И каква е тая простотия компилаторът да ти променя сорса 'по време на компилация' - за това си има custom build, ако щеш в маке файла си слагаш нещо да ти направи вълнуващата промяна и т.н....
Айде ако обичаш или говори за MSVC и не отбивай топката или си затрай.
Редактирано от Questor на
Re: Opravih se po grubiq na4in
Хихих, ако бяхме в американски сериал за съдебни разправии тук е мястото на което аз щях да кажа "Възразявам, това са предположения", а съдията да се обърне към теб с думите "Приема се. Придържайте се към фактите, моля". 
За да не заблудиш някого, трябва да подчертая, че аз пиша на ANSI С/С++ и препоръчвам писането по тази спецификация. В т.ч. assert(), наместо Assert(), unsigned int наместо UINT и пр. и пр.
Компилаторът го използвам за да компилирам, а IDE-то за да разработвам в широк смисъл. Но има голяма разлика между IDE и технология, а Microsoft винаги се опитват да пробутват едното заедно с другото. Разликата обаче е, че едното е добро, а другото sux (лично мнение).
Приемайки конвенциите на МС за С/С++ писане (гореспоменатите прекомпилирани хедъри, споменатите в този постинг Assert() и UINT) единственото което можеш да постигнеш е singleplatforming. Не можеш да постигнеш нещо качествено различно, защото все още говорим за С/С++.
Това е което имах предвид още от самото начало.
Като гледам обаче, и да говоря и да не говоря - все едно. Аз си обяснявам, аргументирам се, ти си говориш наизуст. Накрая като не можа да измислиш какво да кажеш, започна да си фантазираш какви ли толкова програми съм правил. Ми тъпо.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
За да не заблудиш някого, трябва да подчертая, че аз пиша на ANSI С/С++ и препоръчвам писането по тази спецификация. В т.ч. assert(), наместо Assert(), unsigned int наместо UINT и пр. и пр.
Компилаторът го използвам за да компилирам, а IDE-то за да разработвам в широк смисъл. Но има голяма разлика между IDE и технология, а Microsoft винаги се опитват да пробутват едното заедно с другото. Разликата обаче е, че едното е добро, а другото sux (лично мнение).
Приемайки конвенциите на МС за С/С++ писане (гореспоменатите прекомпилирани хедъри, споменатите в този постинг Assert() и UINT) единственото което можеш да постигнеш е singleplatforming. Не можеш да постигнеш нещо качествено различно, защото все още говорим за С/С++.
Това е което имах предвид още от самото начало.
Като гледам обаче, и да говоря и да не говоря - все едно. Аз си обяснявам, аргументирам се, ти си говориш наизуст. Накрая като не можа да измислиш какво да кажеш, започна да си фантазираш какви ли толкова програми съм правил. Ми тъпо.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.