LINUX.ORG.RU

Компиляция кода на С++


0

2

[code=c++] include <cstdlib> #include <iostream> #include <stdio.h>

int i=0;

int j=0;

int main (int i, int j);

{ (cin>>i);

if i<=10;

i=i+10;

else j=i;

return i; } int wc(int i,int j) { cout<<(i);

return EXIT_SUCCESS; } [/code]

Вот. Решил заморочится. Как я понимаю, компилятор ругается на обьявление функции main. 10 C:\Dev-Cpp\main.cpp expected unqualified-id before '{' token .

Внесу ясность. Это компилит Dev C++. Дома GCC. В общем наведите на ум. Заранее спасибо.


Ответ на: комментарий от Dudraug

Поверьте, после того как поработаешь с простынками вроде этой (С-подобный скриптовый язык) около года

пример говнокода

Появляется дикое желание рефакторить/отделять операторы и содержимое круглых скобок пробелами.

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

m4n71k0r
()
Ответ на: комментарий от m4n71k0r

> отделять операторы и содержимое круглых скобок пробелами.

дык в любом нормальном IDE можно код отформатировать парой шорткатов

ahonimous
()
Ответ на: комментарий от m4n71k0r
#function int SetMis (int pID, int P, int  mID, int uNumb, int uAbil, int uDisl,
                      int MinT, int MaxT, int MinD, int MaxD, int MinK, int MaxK, int mT, int nN, int L1, int L2, int dS,
                          char *T, int time, int tpn)

Это просто праздник!

В геймдеве вообще бывает вменяемый код?

unsigned ★★★★
()
Ответ на: комментарий от unC0Rr

>> sizeof(TXT_QUEST) == 14

а в чём тогда разница между (char *) и (char[] *)?


этот вопрос полностью содержит ответ )))

dimon555 ★★★★★
()
Ответ на: комментарий от unsigned

А что тут скажешь...Человек видимо считал, что стек выдержит, да и ладно. А разработчик скриптового языка поначалу считал, что структуры - это не обязательно.....( 378 точек )

В геймдеве бывает вменяемый код. Когда есть установленные стандарты оформления кода. Когда диздоки действительно существуют и описывают большую часть проекта, а не пишутся на лету. Когда разработчики не уходят толпой, оставляя после собой код «древних богов», код «выделенный красным». Когда не пишутся костыли и колёса, когда в проекте не пишутся почти все типы «антипаттернов».

Я хотел показать мегауниверсальную «программу» (аналог coroutine в проекте), которая занимает 100K с лишним , но всякие codepaste - сервисы отказываются принимать больше 64К, поэтому выложил этот пример...( 15372 точек )

m4n71k0r
()

Если КТО меня слышит!

Переменная J была в идеале нужна для вызова функции по значению.
Сорри за бредовый код в начале.

вот новый

#include <stdio.h>
int i=0;
int wc( int i)
{
if (i<= 10)
{
i=i+10;
}
else
{
return i;
}
}
int main(void)
{
int j;
scanf («%d», j);
j=wc(j);
printf («%d\n», j);
return 0;

}

Но пишет что >ошибка сегментирования

sCat
() автор топика
Ответ на: комментарий от SSZB

Просто попытка понять правила видимости переменных, и как вызывать одну функцию из другой.

ЕМНИП &j -это обращение к адресу переменной. Так?

А где обьявление указателя?

sCat
() автор топика
Ответ на: комментарий от SSZB

j на этот момент ничкм не инициализированна.

sCat
() автор топика
Ответ на: комментарий от SSZB

В общем функция wc не вызывается. Знач. перем в wc не передается.

Ладно. завтра буду думать дальше.

sCat
() автор топика
Ответ на: комментарий от sCat

> А где обьявление указателя?

Какого еще указателя??? Ну... Типа... int j означает, что где-то в ОЗУ УЖЕ есть участок памяти в котором располагается эта самая j. &j означает получить адрес памяти в котором находиться j. В scanf ты передашь некоторый адрес (в данном случае адрес j) по которому функция будет записывать результат ввода.

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

SSZB
()
Ответ на: комментарий от sCat

> В общем функция wc не вызывается. Знач. перем в wc не передается.

Почему ты так решил??? Все там вызывается. Конечно, в случае если i<=10 функция wc вернет хрен его знает что, но это уже вопрос другого рода :)

Расскажи мне зачем тебе глобальная переменная i?

SSZB
()
Ответ на: комментарий от jtootf

зачем, если можно посовокупляться с чьими-нибудь мозгами на ЛОРе?

V_L_A_D ★★
()
Ответ на: комментарий от najar

Щас тебе объяснят, что это называется «инкапсуляция» :)

И тебе объяснят про инкапсуляцию в плюсах )))

Не, ну я как бы в курсе того, что это такое:) Кроме того, склонность некоторых людей использовать сеты/геты и называть это объектно-ориентированным программированием слабо зависит от используемого ЯП.

Просто так давно не было вкусного и питательного 4.3...

V_L_A_D ★★
()
Ответ на: комментарий от V_L_A_D

Кроме того, склонность некоторых людей использовать сеты/геты и называть это объектно-ориентированным программированием

скорее инкапсуляцией

najar
()
Ответ на: комментарий от m4n71k0r
#function int ModTpl (char letter)
int nRet;
nRet=0;
if (letter=='b')
  nRet=rand()*BTPLNUM;
else
if (letter=='c')
  nRet=rand()*CTPLNUM;
else
if (letter=='f')
  nRet=rand()*FTPLNUM;
else
if (letter=='h')
  nRet=rand()*HTPLNUM;
else
if (letter=='k')
  nRet=rand()*KTPLNUM;
else
if (letter=='p')
  nRet=rand()*PTPLNUM;
else
if (letter=='q')
  nRet=rand()*QTPLNUM;
else
if (letter=='s')
  nRet=rand()*STPLNUM;

return nRet;
#end

Охёптвою...

legolegs ★★★★★
()
Ответ на: комментарий от one_more_hokum

При чём это тут? В случае «j=wc(j)» вызов функции - точка следования, так что UB не возникает, всё нормально.

legolegs ★★★★★
()
Ответ на: комментарий от SSZB

По переменной

Решил пальнуть из пушки по воробьям.

Я так малость догадываюсь, что в wc что-то не то. В принципе как по другому написать чтоб в случае else ничего с переменной не делалось? Не присваивать-же переменной ее-же значение.

А по факту все работает. wc возвращает i, как-буд-то с ней ничего не произошло и условие i<=10 для нее ничего не значит.

Да..... Переменная i инициализируется нулем и по любому <=10. Ларчик просто открывался......

Вопрос: будет-ли видна j в функции wc. Я конечно почитаю по этой теме, но пока возможности что-то проверить нет.

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

sCat
() автор топика

аффтар - убейся. и не пиши ничего на плюсах. и на си. никогда. это совет.

anonymous
()
Ответ на: Если КТО меня слышит! от sCat

То, что вам было нужно?

#include <stdio.h>

int wc(int j)
{
  if(j <= 10)
    return j + 10;
  else return j;
}

void pwc(int *j)
{
  if(*j <= 10)
    *j += 10;
}

int main()
{
  int i, j;

  printf("i = ");
  scanf("%d", &i);
  printf("j = ");
  scanf("%d", &j);

  i = wc(i);
  pwc(&j);

  printf("i = %d\nj = %d\n", i, j);

  return 0;
}
Ruth ★★
()
Ответ на: По переменной от sCat

В принципе как по другому написать чтоб в случае else ничего с переменной не делалось?

    return j;

и условие i<=10 для нее ничего не значит.

Это потому что вы не указали return. При этом в случае, если i>10, будет возвращено старое значение (return i), а в случае, если i<=10, возникнет неопределенность, т.к. вы не указали, что следует возвращать функции.

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

Переменная i инициализируется нулем и по любому <=10

Huh? Внутри wc своя собственная переменная «i», которая инициализируется передаваемым значением (wc(j)).

Вопрос: будет-ли видна j в функции wc.

В функции wc будет видна _копия_ переменной j, которая будет называться i.

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

Внутри wc видна не глобальная переменная, а локальная. Простой пример по образу вашего:

#include <stdio.h>

int i = 0;

void wc(int i)
{ printf("%d\n", i); }

int main()
{
  wc(12);
  return 0;
}

Что будет выведено?

Ruth ★★
()
Ответ на: комментарий от Ruth

P.S. разве лоровский highlighter не должен подсвечивать #-директивы? Oo

Ruth ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.