Странна работа

30 отговора 1389 прегледа
#1

Странна работа

Пичове, защо когато пробвам да компилирам ей това с MSVC++ като win32 application:
char buf[80]; strcpy(buf,"blabla"); получавам грешка в първия аргумент, който трябва попринцип да е char*(cannot convert buf[80] to char*), а когато го компилирам като win32 console application всичко минава без грешки ?

Отговор
в отговор на Budala #2

???

sichko si raboti
pone na VC6 i VC.NET 2003

Отговор
в отговор на Budala #3

объркал си се нещо...

не прави проблем - компилацията си мина



аз пък преоткривам топлата вода...
Отговор
в отговор на Budala #4

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!

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор
в отговор на Duncan Griffin #5

Opravih se po grubiq na4in

Благодаря за помощта
Използвах грубия начин strcpy((char*) buf,"blabla"); и се получи, след няколко дни пробвах да компилирам отново без явно преобразуване и пак се получи (не съм променял нищо). Вече почвам да си мисля че има нещо гнило в MVC++. . От мсдн разбрах че става въпрос за промени свързани със съвместиомст с анси, но нищо конкретно за промяна на настроики на компилатора.

Отговор
в отговор на budala #6

да ти кажа какво е гнилото

ами това е бъг в матрицата, нали се сещаш

Отговор
в отговор на budala #7

Re: Opravih se po grubiq na4in

То има много гнили работи, ама е трудно да се хванат. Моят съвет е да пишeш по ANSI, и няма да имаш проблеми. Т.е., разкарвай precompiled headers.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор
в отговор на Duncan Griffin #8

Re: Opravih se po grubiq na4in

кво пък общо има precompiled headers i ANSI? и кво - да му билдва 10 пъти по-бавно?

а за първия човек - имаш ли всички service packs na studioto?

Отговор
в отговор на Questor #9

Re: Opravih se po grubiq na4in

Ми точно че няма нищо общо с ANSI, затова да ги маха. А това с 10те пъти по-бавно ей сега си го измисли. VC6.0 е достатъчно интелигентна система за да компилира само това което трябва.
Прекомпилираните хедъри са предвидени за работа с MFC (RTFMSDN), а като говорим за MFC, вече така или иначе не говорим за ANSI. Pls, недей да говориш наизуст.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.

Редактирано от Duncan Griffin на

Отговор
в отговор на Duncan Griffin #10

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...

Редактирано от Questor на

Отговор
в отговор на Questor #11

Precompiled Headers

Мисля , че сега му е времето някой да ми обясни какво е прек. хедърс и дали се излползват извън мфц

Отговор
в отговор на budala #12

Re: Precompiled Headers

ми както каза колегата, RTFMSDN :)

и се сещам за една песен на Фил Колинс - Do as I say, Don't do as I do :)

Отговор
в отговор на Questor #13

Re: Opravih se po grubiq na4in

Направих си труда да опитам дадения от теб пример с 10 файла които правят това, и изобщо не виждам разлика. Единствения вариант който според мен би бил такова забавяне е изрично да си задал отделно компилиране при всеки include/definition.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор
в отговор на budala #14

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 (аз това ) и се е сблъсквал с проблеми граничещи с абсурда.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор
в отговор на Duncan Griffin #15

Re: Opravih se po grubiq na4in

Kakwo razbirash pod 'изрично да си задал отделно компилиране при всеки include/definition'? Vseki pyt pravq Rebuild all. A - i sym s VC7.

Отговор
в отговор на Questor #16

Re: Opravih se po grubiq na4in

>> 'изрично да си задал отделно компилиране при всеки include/definition'

Е какво според теб мога да имам предвид под това?!?

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор
в отговор на Duncan Griffin #17

Re: Opravih se po grubiq na4in

emi ne znam kakvo e tova i kyde se zadava...??

(Enable Minimal Rebuild = No)

Редактирано от Questor на

Отговор
в отговор на Questor #18

Re: Opravih se po grubiq na4in

Това се използва много рядко, например ако се налага да модифицираш сорса по време на самата компилация. Т.е. самото компилиране води до промяна на сорса.
Аз съм го ползвал при записване на програми върху ROM, когато target беше непосредствено RO-паметта и трябва да се направят 300 компилации на драйвер, всяка с различно ID.

Във VC не съм виждал такова нещо, и нямам идея дали изобщо го има. Ама де да те знам на какво си способен, според мен 3 пъти по-бавно компилиране на проект при on/off PCH се дължи или ако изрично е указано така, или ако е направено некадърно.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор
в отговор на Duncan Griffin #19

Re: Opravih se po grubiq na4in

Брей сега пък на друг компилатор отидохме, пък и драйвер - сигурно е бил 1 файл, и сигурно и компилаторът не е имал PCH-ta...

И каква е тая простотия компилаторът да ти променя сорса 'по време на компилация' - за това си има custom build, ако щеш в маке файла си слагаш нещо да ти направи вълнуващата промяна и т.н....

Айде ако обичаш или говори за MSVC и не отбивай топката или си затрай.

Редактирано от Questor на

Отговор
в отговор на Questor #20

Re: Opravih se po grubiq na4in

Хихих, ако бяхме в американски сериал за съдебни разправии тук е мястото на което аз щях да кажа "Възразявам, това са предположения", а съдията да се обърне към теб с думите "Приема се. Придържайте се към фактите, моля".

За да не заблудиш някого, трябва да подчертая, че аз пиша на ANSI С/С++ и препоръчвам писането по тази спецификация. В т.ч. assert(), наместо Assert(), unsigned int наместо UINT и пр. и пр.
Компилаторът го използвам за да компилирам, а IDE-то за да разработвам в широк смисъл. Но има голяма разлика между IDE и технология, а Microsoft винаги се опитват да пробутват едното заедно с другото. Разликата обаче е, че едното е добро, а другото sux (лично мнение).

Приемайки конвенциите на МС за С/С++ писане (гореспоменатите прекомпилирани хедъри, споменатите в този постинг Assert() и UINT) единственото което можеш да постигнеш е singleplatforming. Не можеш да постигнеш нещо качествено различно, защото все още говорим за С/С++.
Това е което имах предвид още от самото начало.

Като гледам обаче, и да говоря и да не говоря - все едно. Аз си обяснявам, аргументирам се, ти си говориш наизуст. Накрая като не можа да измислиш какво да кажеш, започна да си фантазираш какви ли толкова програми съм правил. Ми тъпо.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор