Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    KeSqueer
    Спасибо огромное.
     
  2. AlexCab

    AlexCab New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    142
    Objective-C.
    Метаинформация — у объекта непосредственно на этапе выполнения можно спросить его класс, список методов (с типами передаваемых аргументов)
    и instance-переменных, проверить, является ли класс потомком заданного и поддерживает ли он заданный протокол и т. п.

    Вопрос: как часто использовали, насколько это полезно, необходимо ли?

    Заранее спасибо.
     
  3. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Здрасте. Помогите мне пожалуйсто. Вот такая проблема не могу понять как мне организовать условный переход на с++
    if (l=v) v=RandomHi(iconcount);
    Мне надо, что бы если l равно v то заново генерировалось случайное число в v
    Для большей наглядности:
    10 IF L=V THEN RANDOMIZE (V): GOTO 10
     
  4. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Спасибо конечно всем, что никто не ответил мне, но мне думается, что-то, что я смогу ответить себе сам while (l=v) v=RandomHi(iconcount);
     
  5. JET

    JET New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2010
    Сообщения:
    4
    pashe4ka13
    Верно будет так(псевдокод):

    Код (Text):
    1.     while( varOne == varTwo )
    2.         varTwo  = randomFunction( argument );
     
  6. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Привет.

    Есть элемент ф-я класса, которая возвращает this и еще одна элемент ф-я, возвращающая *this

    Так вот в чем разница?

    Я знаю, что this это указатель.

    То есть выходит, что в первом случае будет возвращаться адрес, а во втором значение по адресу(так как указатель зазыменован)?
     
  7. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    bug1z
    *this ить тоже можно вернуть по-разному...
    Код (Text):
    1. A A::f() { return *this; }
    2. // или
    3. A& A::g() { return *this; }
    - две большие разницы :)
     
  8. cartman

    cartman New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2010
    Сообщения:
    4
    Вечер добрый.
    Я можно сказать нахожусь в начале изучения С и поэтому прошу прощения за глупые вопросы )))
    Вопрос в следующем - попытался создать класс без CRT, всё получилось (свои new и delete). Но вот исключения у меня ловить нет никакого желания, поэтому я думал обрабатывать ошибки создания класса в конструкторе. Ведь по сути new выделяет память под переменные класса (поправьте если ошибаюсь). Но компилятор сам проверяет выделилась ли память... Вот код VS2010:
    013A1073 call operator new (13A1000h)
    013A1078 add esp,4
    013A107B mov dword ptr [ebp-34h],eax
    013A107E cmp dword ptr [ebp-34h],0
    013A1082 je wMain+31h (13A1091h)
    013A1084 mov ecx,dword ptr [ebp-34h]
    013A1087 call foo::foo (13A1020h)

    Причём если я руками перемещаю указатель с 013A107E на 013A1084 конструктор вызывается. Естественно this = NULL. Вот это то я и хотел словить.
    Как можно "заставить" компилятор не генерировать эту заглушку?

    P.S.
    Гениальность кода
    mov dword ptr [ebp-34h],eax
    cmp dword ptr [ebp-34h],0
    просто убивает...
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ну возвращайте из new не ноль, а к примеру единицу. ^) Но вообще фигня всё это, если память скончалась то алес.

    Дебаг.
     
  10. cartman

    cartman New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2010
    Сообщения:
    4
    Booster
    Сам думал -1 возвратить (это кашерней), но была надежда отключить проверку.
    - нет, Release.
     
  11. tid

    tid Member

    Публикаций:
    0
    Регистрация:
    2 дек 2010
    Сообщения:
    57
    ошибки выдаваемые моим GCC:
    Код (Text):
    1. hashtab.c:31: error: conflicting types for ‘strdup’
    2. hashtab.c: In function ‘install’:
    3. hashtab.c:38: warning: incompatible implicit declaration of built-in function ‘malloc’
    4. hashtab.c:45: warning: incompatible implicit declaration of built-in function ‘free’
    5. hashtab.c: At top level:
    6. hashtab.c:51: error: conflicting types for ‘strdup’
    7. hashtab.c: In function ‘strdup’:
    8. hashtab.c:54: warning: incompatible implicit declaration of built-in function ‘malloc’
    программа:
    Код (Text):
    1. #include <stdio.h>
    2. #include <string.h>
    3.  
    4. #define HASHSIZE 101
    5.  
    6. struct nlist {
    7.     struct nlist *next; /*следующая запись в цепочке*/
    8.     char *name; /*имя*/
    9.     char *defn; /*подстановка*/
    10. };
    11.  
    12. static struct nlist *hashtab[HASHSIZE]; /*массив указателей на hashtab*/
    13.  
    14. unsigned hash(char *s)
    15. {
    16.     unsigned val;
    17.     for (val = 0; *s != '\0'; s++)
    18.         val = *s + 31*val;
    19.     return val % HASHSIZE;
    20. }
    21.  
    22. struct nlist *lookup(char *s)
    23. {
    24.     struct nlist *p;
    25.     for (p = hashtab[hash(s)]; p != NULL; p = p->next)
    26.         if (strcmp(s, p->name) == 0)
    27.             return p;
    28.     return NULL;
    29. }
    30.  
    31. char *strdup(char *s);
    32.  
    33. struct nlist *install(char *s, char *t)
    34. {
    35.     struct nlist *p;
    36.     unsigned val;
    37.     if ((p = lookup(s)) == NULL) { /*имя не найдено*/
    38.         p = (struct nlist *) malloc(sizeof(struct nlist)); /*выделяем память для нового элементы списка*/
    39.         if (p == NULL || (p->name = strdup(s)) == NULL)
    40.             return NULL;
    41.         val = hash(s);
    42.         p->next = hashtab[val];
    43.         hashtab[val] = p;        
    44.     } else /*уже есть в таблице*/
    45.         free((char *) p->defn);
    46.     if ((p->defn = strdup(t)) != NULL)
    47.         return p;
    48.     return NULL;
    49. }
    50.  
    51. char *strdup(char *s)
    52. {
    53.     char *p;
    54.     p = (char *) malloc(strlen(s)+1);
    55.     if (p != NULL)
    56.         strcpy(p,s);
    57.     return p;
    58. }
    где тут conflicting types, вроде все верно написано:
    в strdup передаю указатель на чар, возращаю тоже указатель, по коду видно что p->name - это указатель на чар..в чем же тут может быть косяк?
    заранее спасибо!
     
  12. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    tid
    strdup уже определена в string.h
     
  13. tid

    tid Member

    Публикаций:
    0
    Регистрация:
    2 дек 2010
    Сообщения:
    57
    Спасибо! сей час нагуглил, оказывается char *strdup(const char *s); не является стандартом ANSI C, но она поддерживается в заголовочном файле string.h почти всех компиляторов, впервые появилась в BSD.
     
  14. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Как VS 2008 включить поддержку кириллицы или может вначале объявить что нужно а то выводятся иероглифы ?

    Код (Text):
    1. #include <stdio.h>
    2.  
    3. int main(void)
    4. {
    5.   printf("Введите строку: ");
    6.  
    7.   return 0;
    8. }
    п.с. проект на си
     
  15. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Попробуйте так:

    Код (Text):
    1. #include <windows.h>
    2. ...
    3. printf(TEXT("Введите строку: "));
    Если ругается на TEXT, попробуйте _TEXT.
     
  16. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Код (Text):
    1. #include <stdio.h>
    2. #include <windows.h>
    3.  
    4. int main(void)
    5. {
    6.   printf(TEXT("Введите строку: "));
    7.  
    8.   return 0;
    9. }
    Выводится: ↕♦2♦5♦4♦8♦B♦5♦ а когда _TEXT:
     
  17. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    tester3000
    Во-первых, используйте локали (setlocale(LC_ALL, "Russian") или как-то так). Во-вторых, проверьте, какая кодировка стоит у редактора.
     
  18. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    блин, ну оем же
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    tester3000
    Во-первых, убери у проекта кодировку Unicode.
    Во-вторых, выполните в main() один раз при выводе любого текста SetConsoleOutputCP (GetACP()); Потребуется включить "windows.h"
    Код (Text):
    1. #include <windows.h>
    2. #include <stdio.h>
    3.  
    4. int main()
    5. {
    6.     SetConsoleOutputCP (GetACP());
    7.  
    8.     printf("Приветики\n");
    9.     return 0;
    10. }
     
  20. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    А это плохой совет.