Начать изучать C #, не зная C?

Если у вас есть vps или выделенный сервер, вы можете запрограммировать свой собственный модуль с помощью программирования C.

para.h

/* 
 * File:   para.h
 * Author: rahul
 *
 * Created on 10 February, 2016, 11:24 AM
 */

#ifndef PARA_H
#define  PARA_H

#ifdef  __cplusplus
extern "C" {
#endif


#define From ""
#define To "" 
#define From_header "Rahul"   
#define TO_header "Mini"   
#define UID "smtp server account ID"
#define PWD "smtp server account PWD"
#define domain "dfgdfgdfg.com"


#ifdef  __cplusplus
}
#endif

#endif  
/* PARA_H */

main.c

/* 
 * File:   main.c
 * Author: rahul
 *
 * Created on 10 February, 2016, 10:29 AM
 */
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "time.h"
#include "para.h"

/*
 * 
 */

my_bool SendEmail_init(UDF_INIT *initid,UDF_ARGS *arg,char *message);
void SendEmail_deinit(UDF_INIT *initid __attribute__((unused)));
char* SendEmail(UDF_INIT *initid, UDF_ARGS *arg,char *result,unsigned long *length, char *is_null,char* error);

/*
 * base64
 */
int Base64encode_len(int len);
int Base64encode(char * coded_dst, const char *plain_src,int len_plain_src);

int Base64decode_len(const char * coded_src);
int Base64decode(char * plain_dst, const char *coded_src);

/* aaaack but it's fast and const should make it shared text page. */
static const unsigned char pr2six[256] =
{
    /* ASCII table */
    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63,
    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64,
    64,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64,
    64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64,
    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64
};

int Base64decode_len(const char *bufcoded)
{
    int nbytesdecoded;
    register const unsigned char *bufin;
    register int nprbytes;

    bufin = (const unsigned char *) bufcoded;
    while (pr2six[*(bufin++)] <= 63);

    nprbytes = (bufin - (const unsigned char *) bufcoded) - 1;
    nbytesdecoded = ((nprbytes + 3) / 4) * 3;

    return nbytesdecoded + 1;
}

int Base64decode(char *bufplain, const char *bufcoded)
{
    int nbytesdecoded;
    register const unsigned char *bufin;
    register unsigned char *bufout;
    register int nprbytes;

    bufin = (const unsigned char *) bufcoded;
    while (pr2six[*(bufin++)] <= 63);
    nprbytes = (bufin - (const unsigned char *) bufcoded) - 1;
    nbytesdecoded = ((nprbytes + 3) / 4) * 3;

    bufout = (unsigned char *) bufplain;
    bufin = (const unsigned char *) bufcoded;

    while (nprbytes > 4) {
    *(bufout++) =
        (unsigned char) (pr2six[*bufin] << 2 | pr2six[bufin[1]] >> 4);
    *(bufout++) =
        (unsigned char) (pr2six[bufin[1]] << 4 | pr2six[bufin[2]] >> 2);
    *(bufout++) =
        (unsigned char) (pr2six[bufin[2]] << 6 | pr2six[bufin[3]]);
    bufin += 4;
    nprbytes -= 4;
    }

    /* Note: (nprbytes == 1) would be an error, so just ingore that case */
    if (nprbytes > 1) {
    *(bufout++) =
        (unsigned char) (pr2six[*bufin] << 2 | pr2six[bufin[1]] >> 4);
    }
    if (nprbytes > 2) {
    *(bufout++) =
        (unsigned char) (pr2six[bufin[1]] << 4 | pr2six[bufin[2]] >> 2);
    }
    if (nprbytes > 3) {
    *(bufout++) =
        (unsigned char) (pr2six[bufin[2]] << 6 | pr2six[bufin[3]]);
    }

    *(bufout++) = '\0';
    nbytesdecoded -= (4 - nprbytes) & 3;
    return nbytesdecoded;
}

static const char basis_64[] =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

int Base64encode_len(int len)
{
    return ((len + 2) / 3 * 4) + 1;
}

int Base64encode(char *encoded, const char *string, int len)
{
    int i;
    char *p;

    p = encoded;
    for (i = 0; i < len - 2; i += 3) {
    *p++ = basis_64[(string[i] >> 2) & 0x3F];
    *p++ = basis_64[((string[i] & 0x3) << 4) |
                    ((int) (string[i + 1] & 0xF0) >> 4)];
    *p++ = basis_64[((string[i + 1] & 0xF) << 2) |
                    ((int) (string[i + 2] & 0xC0) >> 6)];
    *p++ = basis_64[string[i + 2] & 0x3F];
    }
    if (i < len) {
    *p++ = basis_64[(string[i] >> 2) & 0x3F];
    if (i == (len - 1)) {
        *p++ = basis_64[((string[i] & 0x3) << 4)];
        *p++ = '=';
    }
    else {
        *p++ = basis_64[((string[i] & 0x3) << 4) |
                        ((int) (string[i + 1] & 0xF0) >> 4)];
        *p++ = basis_64[((string[i + 1] & 0xF) << 2)];
    }
    *p++ = '=';
    }

    *p++ = '\0';
    return p - encoded;
}

/*
 end of base64
 */

const char* GetIPAddress(const char* target_domain) {
    const char* target_ip;
    struct in_addr *host_address;
    struct hostent *raw_list = gethostbyname(target_domain);
    int i = 0;
    for (i; raw_list->h_addr_list[i] != 0; i++) {
        host_address = raw_list->h_addr_list[i];
        target_ip = inet_ntoa(*host_address);
    }
    return target_ip;
}

char * MailHeader(const char* from, const char* to, const char* subject, const char* mime_type, const char* charset) {

    time_t now;
    time(&now);
    char *app_brand = "Codevlog Test APP";
    char* mail_header = NULL;
    char date_buff[26];
    char Branding[6 + strlen(date_buff) + 2 + 10 + strlen(app_brand) + 1 + 1];
    char Sender[6 + strlen(from) + 1 + 1];
    char Recip[4 + strlen(to) + 1 + 1];
    char Subject[8 + 1 + strlen(subject) + 1 + 1];
    char mime_data[13 + 1 + 3 + 1 + 1 + 13 + 1 + strlen(mime_type) + 1 + 1 + 8 + strlen(charset) + 1 + 1 + 2];

    strftime(date_buff, (33), "%a , %d %b %Y %H:%M:%S", localtime(&now));

    sprintf(Branding, "DATE: %s\r\nX-Mailer: %s\r\n", date_buff, app_brand);
    sprintf(Sender, "FROM: %s\r\n", from);
    sprintf(Recip, "To: %s\r\n", to);
    sprintf(Subject, "Subject: %s\r\n", subject);
    sprintf(mime_data, "MIME-Version: 1.0\r\nContent-type: %s; charset=%s\r\n\r\n", mime_type, charset);

    int mail_header_length = strlen(Branding) + strlen(Sender) + strlen(Recip) + strlen(Subject) + strlen(mime_data) + 10;

    mail_header = (char*) malloc(mail_header_length);

    memcpy(&mail_header[0], &Branding, strlen(Branding));
    memcpy(&mail_header[0 + strlen(Branding)], &Sender, strlen(Sender));
    memcpy(&mail_header[0 + strlen(Branding) + strlen(Sender)], &Recip, strlen(Recip));
    memcpy(&mail_header[0 + strlen(Branding) + strlen(Sender) + strlen(Recip)], &Subject, strlen(Subject));
    memcpy(&mail_header[0 + strlen(Branding) + strlen(Sender) + strlen(Recip) + strlen(Subject)], &mime_data, strlen(mime_data));
    return mail_header;
}

my_bool SendEmail_init(UDF_INIT *initid,UDF_ARGS *arg,char *message){
     if (!(arg->arg_count == 2)) {
        strcpy(message, "Expected two arguments");
        return 1;
    }

    arg->arg_type[0] = STRING_RESULT;// smtp server address
    arg->arg_type[1] = STRING_RESULT;// email body
    initid->ptr = (char*) malloc(2050 * sizeof (char));
    memset(initid->ptr, '\0', sizeof (initid->ptr));
    return 0;
}

void SendEmail_deinit(UDF_INIT *initid __attribute__((unused))){
    if (initid->ptr) {
        free(initid->ptr);
    }
}

char* SendEmail(UDF_INIT *initid, UDF_ARGS *arg,char *result,unsigned long *length, char *is_null,char* error){
   char *header = MailHeader(From_header, TO_header, "Hello Its a test Mail from Codevlog", "text/plain", "US-ASCII");
    int connected_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    struct sockaddr_in addr;
    memset(&addr, 0, sizeof (addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(25);
    if (inet_pton(AF_INET, GetIPAddress(arg->args[0]), &addr.sin_addr) == 1) {
        connect(connected_fd, (struct sockaddr*) &addr, sizeof (addr));
    }
    if (connected_fd != -1) {
        int recvd = 0;
        const char recv_buff[4768];
        int sdsd;
        sdsd = recv(connected_fd, recv_buff + recvd, sizeof (recv_buff) - recvd, 0);
        recvd += sdsd;

        char buff[1000];
        strcpy(buff, "EHLO "); //"EHLO sdfsdfsdf.com\r\n"
        strcat(buff, domain);
        strcat(buff, "\r\n");
        send(connected_fd, buff, strlen(buff), 0);
        sdsd = recv(connected_fd, recv_buff + recvd, sizeof (recv_buff) - recvd, 0);
        recvd += sdsd;

        char _cmd2[1000];
        strcpy(_cmd2, "AUTH LOGIN\r\n");
        int dfdf = send(connected_fd, _cmd2, strlen(_cmd2), 0);
        sdsd = recv(connected_fd, recv_buff + recvd, sizeof (recv_buff) - recvd, 0);
        recvd += sdsd;

        char _cmd3[1000];
        Base64encode(&_cmd3, UID, strlen(UID));
        strcat(_cmd3, "\r\n");
        send(connected_fd, _cmd3, strlen(_cmd3), 0);
        sdsd = recv(connected_fd, recv_buff + recvd, sizeof (recv_buff) - recvd, 0);
        recvd += sdsd;

        char _cmd4[1000];
        Base64encode(&_cmd4, PWD, strlen(PWD));
        strcat(_cmd4, "\r\n");
        send(connected_fd, _cmd4, strlen(_cmd4), 0);
        sdsd = recv(connected_fd, recv_buff + recvd, sizeof (recv_buff) - recvd, 0);
        recvd += sdsd;

        char _cmd5[1000];
        strcpy(_cmd5, "MAIL FROM: ");
        strcat(_cmd5, From);
        strcat(_cmd5, "\r\n");
        send(connected_fd, _cmd5, strlen(_cmd5), 0);
        char skip[1000];
        sdsd = recv(connected_fd, skip, sizeof (skip), 0);

        char _cmd6[1000];
        strcpy(_cmd6, "RCPT TO: ");
        strcat(_cmd6, To); //
        strcat(_cmd6, "\r\n");
        send(connected_fd, _cmd6, strlen(_cmd6), 0);
        sdsd = recv(connected_fd, recv_buff + recvd, sizeof (recv_buff) - recvd, 0);
        recvd += sdsd;

        char _cmd7[1000];
        strcpy(_cmd7, "DATA\r\n");
        send(connected_fd, _cmd7, strlen(_cmd7), 0);
        sdsd = recv(connected_fd, recv_buff + recvd, sizeof (recv_buff) - recvd, 0);
        recvd += sdsd;

        send(connected_fd, header, strlen(header), 0);
        send(connected_fd, arg->args[1], strlen(arg->args[1]), 0);
        char _cmd9[1000];
        strcpy(_cmd9, "\r\n.\r\n.");
        send(connected_fd, _cmd9, sizeof (_cmd9), 0);
        sdsd = recv(connected_fd, recv_buff + recvd, sizeof (recv_buff) - recvd, 0);
        recvd += sdsd;

        char _cmd10[1000];
        strcpy(_cmd10, "QUIT\r\n");
        send(connected_fd, _cmd10, sizeof (_cmd10), 0);
        sdsd = recv(connected_fd, recv_buff + recvd, sizeof (recv_buff) - recvd, 0);

        memcpy(initid->ptr, recv_buff, strlen(recv_buff));
        *length = recvd;
    }
    free(header);
    close(connected_fd);
    return initid->ptr;
}

Чтобы настроить проект, просмотрите это видео: https: // www

Я разрешу, если появится какая-либо ошибка в вышеприведенном коде, Just Inform в комментарии

23
задан this. __curious_geek 19 August 2009 в 17:09
поделиться

22 ответа

Если ваша цель - выучить свой родной язык, и вы не собираетесь стать серьезным программистом, во что бы то ни стало выучите язык, который вы собираетесь использовать.

Если вы собираетесь стать серьезным программистом, вы действительно должны когда-нибудь стать опытным в Си. Я не знаю, какой путь будет сложнее, начиная с C # или начиная с C. C будет непросто, когда вы к нему подойдете.

Если вы уже знаете некоторые языки, но не C или C #, перейдите на C # сейчас, а позже выберите C.

Ключевым моментом является то, что C является более простым языком, но для достижения значительных результатов в нем требуются более сложные структуры. Некоторые вещи, которые вы легко можете сделать в C #, будут сложными в C, хотя C является более распространенным и универсальным языком.

8
ответ дан David Thornley 19 August 2009 в 17:09
поделиться

Конечно, C # легче понять. Конечно, знание C поможет, но если вы не знаете C, лучше начать с языка более высокого уровня, как C #.

-1
ответ дан Sinan Ünür 19 August 2009 в 17:09
поделиться

Можно также прочитать « Язык программирования C » от K & amp; R, потому что это быстрое чтение, и оно даст вам представление, которое может помочь понять производительность, происходящую за кулисами в мусоре. язык коллекции.

0
ответ дан Dave 19 August 2009 в 17:09
поделиться

Сходство между C ++ и C # заканчивается лексером.

0
ответ дан M. Utku ALTINKAYA 19 August 2009 в 17:09
поделиться

Я обнаружил, что изучение Java для большинства ООП наиболее полезно для изучения C #, поскольку они почти идентичны по библиотекам и синтаксису.

Знание C или C ++ становится полезным только после того, как вы углубитесь в C # в такие области, как неуправляемый код.

0
ответ дан Sinan Ünür 19 August 2009 в 17:09
поделиться

Изучение C или C ++ было бы более трудным, но вы, вероятно, стали бы гораздо более привыкшими к основам, что никогда не было бы плохо.

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

0
ответ дан McAden 19 August 2009 в 17:09
поделиться

Это не должно быть проблемой. Пока вы разбираетесь в объектно-ориентированном программировании, у вас все в порядке.

1
ответ дан Sinan Ünür 19 August 2009 в 17:09
поделиться

Мой ответ на все вопросы формы «Должен ли я изучать язык X или Y? Должен ли я изучать Z до Y и X после Y?» и т. д. то же самое: не беспокойтесь о таких вопросах. Забудь их. Если вы думаете, что изучение C # сейчас будет более полезным (может быть, есть больше рабочих мест, или вы хотите присоединиться к проекту, или, может быть, вам просто любопытно), тогда сядьте и начните учиться.

Если вы уже хорошо владеете одним языком, вам не понадобится много времени, чтобы подобрать достаточно для того, чтобы понять, сможете ли вы продуктивно использовать его. И вы не можете решить, стоит ли вам уделять много времени изучению языка, не зная его. Поэтому начните изучать C #, если хотите.

Чтобы довести это до крайности, я думаю, тот факт, что около 30 лет назад я изучил сборку Z80 еще до изучения BASIC, очень помог мне в этом. Тем не менее, я бы никогда не советовал вам изучать другие языки, пока вы не освоите сборку. (Кстати, все, что я помню, это код операции 0xc9 RET).

Итак, начните изучать C #. Если вам любопытно, продолжайте изучать C, все время помня, что, несмотря на то, что оба имеют фигурные скобки, они совершенно разные языки. Так же, как C и C ++.

1
ответ дан Sinan Ünür 19 August 2009 в 17:09
поделиться

Если вы не образованный программист ООП, скорее всего, лучше избегать C (или даже C ++), если вы не большой поклонник ненависти к себе. Все остальные заявленные причины верны, но имейте в виду, что C # также управляется (посмотрите), поэтому гораздо труднее попасть в «неприятности» с .

1
ответ дан Hardryv 19 August 2009 в 17:09
поделиться

Конечно! C # - это язык намного более высокого уровня, чем C, и он обрабатывает множество деталей для вас.

Хотя есть одна рекомендация, C # - очень хороший язык, но он имеет немного более крутой курс обучения, чем VB.NET. VB.NET НЕ Visual Basic, он просто переносит часть синтаксиса.

Синтаксис и ключевые слова VB.NET легче выучить, а затем легко переводить на C #. Помимо особых случаев, очень мало вещей, которые один язык может сделать, а другой - нет, и, поскольку VB.NET легче изучать, я большой сторонник его использования в качестве языка "welcome to .NET".


Просто для пояснения: не следует распространять клеймо «Классического» VB на VB.NET, VB6 и VB.NET - это совершенно разные языки и структуры, имеющие только поверхностное сходство.

VB.NET предлагает несколько новинок для новых разработчиков:

  • позволяют использовать синтаксис. C # может заставить зеленого разработчика вырвать свои волосы, потому что они забыли () в пустоте или добавили их в свойство.
  • Visual Studio предлагает быструю обратную связь по некомпилируемому коду.
  • VB.NET использует слова в местах, где C # использует символы. В приведенных ниже примерах не то, что C # ожидает, что вы знаете, что «:» означает «Наследует» или «Реализует» в зависимости от следующего аргумента, VB.NET говорит «Наследует MyBaseClass» и «Реализует INamedObject», что гораздо более интуитивно понятно

Чтобы быть справедливым, у меня есть один главный недостаток , который я имею с шаблонами кода VB.NET по умолчанию - они не имеют «Option Strict On» и «Option Explicit На "заявлениях наверху. Если вы попадете в VB.NET, обязательно добавьте их в каждый класс, они позволят компилятору выполнять более упреждающую проверку ошибок и приведут к более высокому качеству кода и понимания системы типов .NET

Предложить пример эквивалентного кода .NET, написанного на C # и VB.NET:

C #

interface INamedObject
{
    string Name { get; set; }
}

abstract class MyBaseClass
{
    void PrintType()
    {
        Console.WriteLine(this.GetType().Name);
    }
}

class MyConcreteClass : MyBaseClass, INamedObject
{
    public MyConcreteClass()
        : base()
    {
    }

    public string Name
    {
        get;
        set;
    }
}

VB.NET

Option Strict On
Option Explicit On

Interface INamedObject
    Property Name() As String
End Interface

MustInherit Class MyBaseClass

    Sub PrintType()
        Console.WriteLine(Me.GetType.Name)
    End Sub

End Class

Class MyConcreteClass
    Inherits MyBaseClass
    Implements INamedObject

    Public Sub New()
        MyBase.New()
    End Sub

    Private _Name As String
    Public Property Name() As String Implements INamedObject.Name
        Get
            Return _Name
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property
End Class
1
ответ дан STW 19 August 2009 в 17:09
поделиться

Как и я, если вы спешите изучать новый язык, прыгайте прямо. Но если у вас много времени (студент), я думаю, что каждый, кто хочет называться кодером, должен знать C.

1
ответ дан DevByDefault 19 August 2009 в 17:09
поделиться

Это, конечно, возможно.

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

1
ответ дан ChrisF 19 August 2009 в 17:09
поделиться

Да, это прекрасно.

1
ответ дан João Silva 19 August 2009 в 17:09
поделиться

Одна вещь, которую многие новые программисты не упоминают, это то, что они хотят сделать? Вы хотите сделать что-то простое, как привет мир? Или вы хотите сделать что-то более сложное, например, приложение с графическим интерфейсом или видеоигру?

Причина этого заключается в том, что не каждый язык программирования подходит для каждой задачи. Как уже упоминали другие, C - это отличный язык для систем и драйверов (или на самом деле всего, что требует низкоуровневого интерфейса или предельной производительности), а C # предназначен для создания настольных приложений - от текстовых редакторов до огромных многоуровневых корпоративных решений. Несмотря на названия этих языков, они на самом деле имеют только похожее имя и несколько общих синтаксисов.

Я бы порекомендовал начать с C # и сохранить C на потом. Вы можете быстро начать работать с множеством бесплатных инструментов, таких как Visual Studio Express C # . Если позже вы захотите начать работать с такими вещами, как ядро ​​Linux, компиляторы или драйверы аппаратного обеспечения, вы можете быстро подобрать C. Язык C по-прежнему стоит изучать.

2
ответ дан Sinan Ünür 19 August 2009 в 17:09
поделиться

Да. Когда я начинал с C #, у меня не было опыта работы с C.

2
ответ дан DenaliHardtail 19 August 2009 в 17:09
поделиться

У меня такой вопрос: вы пытаетесь выбрать первый язык для изучения программирования? (C # является опцией) или вы знаете другой язык и думаете, что вам может потребоваться выучить C до C #?

Если вы не пытаетесь изучать программирование, я бы сказал, что вы можете пропустить C и перейти прямо к C #. Но для первого языка я бы не советовал. Попробуйте использовать язык сценариев, чтобы вы могли быстро написать код.

2
ответ дан Keltex 19 August 2009 в 17:09
поделиться

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

Я думаю, что это нормально - перейти на C # или любой другой объектно-ориентированный язык в качестве вашего первого языка. На самом деле многие люди утверждают, что ОО-язык должен быть вашим первым языком, если вы хотите стать успешным в ОО, потому что вы не будете застревать в процедурном мышлении.

Тем не менее, хорошие программисты, у которых нет хотя бы приличной работающей ментальной модели для того, что происходит под прикрытием, немногочисленны. Это означает, что в конечном итоге вы должны узнать, как компьютер управляет памятью, указателями, как процессор выполняет инструкции и т. Д. В конечном счете, чтение ИМС и книги по сборке было бы хорошей идеей. Я не думаю, что вам нужно стать опытным в любом; Вам просто нужно прийти к базовому пониманию того, как работают компьютер и языки программирования.

6
ответ дан Daniel Auger 19 August 2009 в 17:09
поделиться

Конечно. C # использует C-подобный синтаксис, но я думаю, что вам будет легче учиться, чем C.

7
ответ дан JMarsch 19 August 2009 в 17:09
поделиться

Хотя C является хорошим языком для изучения в целом, я не верю, что вы получите какие-то конкретные знания, которые помогут вам выучить C #.

3
ответ дан Nathan DeWitt 19 August 2009 в 17:09
поделиться

Конечно. C # заимствует семантические соглашения из C, но, конечно, нет необходимости изучать его.

Фактически, вы пропустите фазу, когда вы пытаетесь использовать C #, как если бы это было C.

14
ответ дан Dana 19 August 2009 в 17:09
поделиться

Да, язык программирования C не является обязательным условием для изучения C #. Знание некоторого C определенно поможет вам быстрее освоить синтаксис C #, но помимо этого есть немного сходств.

22
ответ дан Andrew Hare 19 August 2009 в 17:09
поделиться

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

Обучение C научит вас больше о том, как работает компьютер, и даст вам низкий уровень понимания. C # - это язык высокого уровня с более низкой кривой обучения для получения графического интерфейса.

Джоэл и Джефф часто обсуждают ценность обучения C, stackcastflow подкаст № 2 является одним из примеров

37
ответ дан Colin Gravill 19 August 2009 в 17:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: