Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Вниз

Кто что думает?   Найти похожие ветки 

 
SPeller ©   (2007-06-06 02:07) [360]


> ab


> Фигасе!

Точка - это конкатенация строк. На самом деле b :) Прикол в том, что не смотря на скобки, в условие попадает все что до вопроса. А "a1" - это истинное выражение.


 
Vga ©   (2007-06-06 02:08) [361]

[359]
Кстати да... Зато нету разнобоя регистра, как у некоторых неаккуратных товарисчей... :)


 
Defunct ©   (2007-06-06 02:16) [362]

Real ©   (06.06.07 02:00) [359]
> По ходу вспомнил что меня больше всего всегда раздражало в Си:
> зависимость регистра. Это уж точно надо быть машиной

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

struct tagMY_STRUC
{
 ...
} TMY_STRUCT, *PMY_STRUCT;

PMY_STRUCT pMyStruct;
...

> Зато нету разнобоя регистра, как у некоторых неаккуратных
> товарисчей... :)

И это кстати тоже плюс! Код выглядит аккуратнее.


 
Vga ©   (2007-06-06 02:19) [363]


> > Зато нету разнобоя регистра, как у некоторых неаккуратных
>
> > товарисчей... :)
>
> И это кстати тоже плюс! Код выглядит аккуратнее.

Аккуратнее-то аккуратнее, это да. плюс. Вот тока лично у меня код на С\С++ все равно вызывает аллергию :) Да и необходимость соблюдать регистр (особенно когда он задан чужой библиотекой и совсем не нравится) - тоже вызывает дискомфорт :)


 
Defunct ©   (2007-06-06 02:19) [364]

сорри, ночью очепятываюсь:

typedef struct tagMY_STRUC
{
...
} TMY_STRUCT, *PMY_STRUCT;

PMY_STRUCT pMyStruct;


 
Defunct ©   (2007-06-06 02:21) [365]

> Vga ©   (06.06.07 02:19) [363]

Это пока. Было время я тоже думал - бейсик самый лучший язык, и зачем что-то еще надо ;>


 
Vga ©   (2007-06-06 02:22) [366]


> Ведь как удобно порой объявлять и тип и переменную одним
> и тем же именем, но в разном регистрe:

Тоже верно. Удобно. Когда пишешь. А когда читаешь чужой код и кроме имени надо запомнить его регистр...


> #define m(x)(x<0?-1:!!x)
> #define g tj()-J
> #define a(x)(x<0?-x:x)
> #define h(x)((x)<=K?x:N-(x))
> #define f 9999
> #define A return
> #define H printf(
> #define R double
> #define U int
> #define V for
> #define b else
> #define u while
> #define B if

Это из реального кода... Дальнейшее разобрать невозможно - больше похоже на base64, чем на язык программирования. Аккуратный квадратик символов. При этом - компилируется и работает.


 
Vga ©   (2007-06-06 02:25) [367]

Нетрудно заметить, что H и h в данном коде выполняют слегка разные операции...


 
Defunct ©   (2007-06-06 02:35) [368]

> Это из реального кода...

Это возможно
1. из реального плохого кода, который читать не нужно.
2. из специально запутанного (некое подобие защиты от модификации) программой автоматом.

В реальных проектах никто бы не стал подменять ключевые слова макросами, да еще и с односимвольными именами.

С другой стороны имеются очень мощные редакторы, способные парсить код и при наведении на идентификатор мышкой - будут показывать вам в отдельном окне - место где была объявлена переменная ее тип и т.п./макрос/функция на которую вы навелись. Пример такого редактора - Source Insight.


 
Vga ©   (2007-06-06 02:47) [369]

Ну да, немного сжульничал и привел код с какого-то конкурса :) Но тем не менее, придется запоминать, что foo - переменная, а Foo - ее тип. Не слишком способствует разбору...
Source Insight - штука конечно крайне полезная :) Хотя даже с помощью подобных инструментов разбирать макросы сложее #define MAX_PATH 260 очень непросто.


 
Defunct ©   (2007-06-06 03:16) [370]

> Хотя даже с помощью подобных инструментов разбирать макросы сложее
> #define MAX_PATH 260 очень непросто.

В основном, в реальном коде макросы читать не приходится, т.к. они просто должны иметь интуитивно понятные имена. Аналогично имен функций.

Но если возникает необходимость их прочитать, то все не так уж и сложно

можно начать с того, что просто подставить параметры макроса и в уме или на листочке просчитать, что получится в результате. Пару-десятков таких успешных подстановок и считайте вы стали мастером макросов. ;>


 
Vga ©   (2007-06-06 03:28) [371]

эээ... Мне с реальным кодом в основном приходится иметь дело, чтобы понять что там к чему и пренести это в дельфи... Или перевести хедер. Как с макросами обращаться - представляю. Но нормальные конструкции разбираются на порядок быстрее.


 
db2admin ©   (2007-06-06 08:27) [372]

Vga ©   (06.06.07 03:28) [371]
> #define m(x)(x<0?-1:!!x)
> #define g tj()-J
> #define a(x)(x<0?-x:x)
> #define h(x)((x)<=K?x:N-(x))
> #define f 9999
> #define A return
> #define H printf(
> #define R double
> #define U int
> #define V for
> #define b else
> #define u while
> #define B if


 
Однокамушкин   (2007-06-06 09:48) [373]


> Defunct ©   (05.06.07 19:08) [322]
> 1. Препроцессор есть не только в C, но и в Delphi. В Delphi
> правда он немного кастрирован, но это больше минус чем плюс.
>  Если вы им не пользуетесь это исключительно ваше дело.
> Возможно вы просто еще не доросли до использования препроцессора.

Вот когда вы напишете в Delphi что-нибудь типа #define if while, тогда я поверю, что в Delphi есть препроцессор... препроцессор - это такое средство, которое позволяет тупо менять один набор символов на другой без учёта контекста и синтаксиса языка... Приведите пример чего-то подобного в Delphi...

А препроцессор я давно перерос... после того, как мой коллега в своём заголовочном файле зачем-то написал #define String STRING, а в моём коде, который использовал этот файл, у меня была структура с полем String... вот тогда я и понял, куда именно нужно засунуть препроцессор...

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

Поздравляю - понятие "раздельная компиляция" вам незнакомо... простой пример:
#define _UNICODE
#include <tchar.h>

в tchar.h объявлен тип TCHAR, определение которого зависит от того, определён или нет макрос _UNICODE... получается, что текст импортирующего модуля оказывает влияние на содержание импортируемого... если это раздельная компиляция, то я испанский лётчик... при раздельной компиляции все объявления, сделанные в импортируемом модуле, не зависят от содержания импортирующего...

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

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


 
Игорь Шевченко ©   (2007-06-06 10:00) [374]

Real ©   (05.06.07 22:08) [323]


> 1. Как ни крути, а английский - это самый популярный язык
> в мире и в китае кстати, его знает побольше людей чем в
> России.


И почему, спрашивается, математические формулы записываются на специальном языке, а вот программистам без английского хоть в петлю лезь и если begin в тексте программы нет, то она уже нечитаема.

Слабоватый какой-то аргумент, не находишь ?


> В обсуждении давно предлагается непредвзято сравнить синтаксисы.
>  Например с точки зрения начинающего программиста. Сколько
> я помню литературы по программированию для начинающих, во
> всех было написано что-то типа такого: "Паскаль идеален
> для обучения" и "Си - никак не назовешь языком для начинающих".
>  Если язык труден для начинающих, значит неявно подразумевается
> что писать на нем можно только привыкнув, не объясняет ли
> это все о чем спорят?


Для обучения не менее идеален, допустим, Алгол. И что ? Не учат, заразы, на нем.
Для обучения (и специально разработан, кстати) Basic, в котором ни слова от паскаля нет и в помине. И что ?

Не надо учить языку программирования. Ни в коем разе. Учить надо думать, желательно алгоритмически. А какой язык выбрать - а какая, по большому счету разница ?
В свое время народ учили Фортрану - и ничего, выучили. Неплохие программы люди пишут.

Думать, думать и еще раз думать!


 
Игорь Шевченко ©   (2007-06-06 10:01) [375]


> Просто потому, что в Си идеологически приучают что все данные
> - это просто свалка байт по определенному адресу и ты, программист
> - решай сам что с ней делать, как интерпретировать


Ерунда полная, уж извини.


 
euru ©   (2007-06-06 10:02) [376]


> Real ©   (06.06.07 02:00) [359]


> По ходу вспомнил что меня больше всего всегда раздражало
> в Си: зависимость регистра.
Здесь я противоположного мнения. Например, при прочих равных условиях в исходниках Си в отличие от Паскаля не встретишь ключевые слова вида FOR, For. Там возможен только один вариант for, что повышает читабельность текста, т.к. воспринимается уже на уровне подсознания и не требует дополнительной интерпретации.


> Причем сами Сишники похоже это неявно признают: верхний
> регистр стараются не использовать и повсеместно используют
> "_" для длинных идентификаторов :)
Просто так исторически сложилось. SQL, например, тоже регистронезависимый, однако в большинстве случаев названия таблиц пишутся также через "_".


 
Loginov Dmitry ©   (2007-06-06 13:34) [377]

> Здесь я противоположного мнения. Например, при прочих равных
> условиях в исходниках Си в отличие от Паскаля не встретишь
> ключевые слова вида FOR, For. Там возможен только один вариант
> for, что повышает читабельность текста, т.к. воспринимается
> уже на уровне подсознания и не требует дополнительной интерпретации.


Поэтому многие проггеры (если не большинство) на Паскале придерживаются правила - все зарезирвированные слова набирать в нижнем регистре. И тогда уже никаких затруднений с интерпретацией.


 
Alkid ©   (2007-06-06 13:47) [378]


> Ну да, немного сжульничал и привел код с какого-то конкурса
> :) Но тем не менее, придется запоминать, что foo - переменная,
>  а Foo - ее тип. Не слишком способствует разбору...

Ну, не знаю как у вас, а в нормальных конторах, где кодят много на С/С++ есть соглашения о наименовании, которые так же указывают и какой регистр когда использовать.
Правда, всегда есть и шалопаи, которые на них болт кладут :)


 
Defunct ©   (2007-06-06 14:07) [379]

> Однокамушкин   (06.06.07 09:48) [373]
> Вот когда вы напишете в Delphi что-нибудь типа #define if while, тогда я
> поверю, что в Delphi есть препроцессор...

Откомпилируйте и запустите ниже приведенный пример.
Потом разкоментируйте строчку //{$define NEED_UNIT_INIT} и откомпилируйте и запустите еще раз.

unit Unit1;

interface

//{$define NEED_UNIT_INIT}

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{$ifdef NEED_UNIT_INIT}
begin
  ShowMessage("this message depended on preprocessor settings");
{$endif}
end.


> Поздравляю - понятие "раздельная компиляция" вам незнакомо...
> простой пример:
> #define _UNICODE
> #include <tchar.h>
> в tchar.h объявлен тип TCHAR, определение которого зависит от того,
> определён или нет макрос _UNICODE...

Не смешите людей своими примерами. Похоже это вам действительно неизвестно, что такое и для чего нужна "раздельная компиляция". Перечитайте еще раз [322] или [353].

Учить матчасть.


 
Eraser ©   (2007-06-06 14:09) [380]

раздельная компиляция или нет, а "инклудовая" система явно уступает по функциональности и читабельности модульной. в MS это кстати тоже поняли.


 
Defunct ©   (2007-06-06 14:21) [381]

> Однокамушкин   (06.06.07 09:48) [373]
> именно поэтому, когда я работал на VC++, мне приходилось время от
> времени делать полный ребилд проекта, потому что мои изменения не
> учитывались - умный компилятор не догадывался, что некоторые файлы
> надо перекомпилировать...

Значит вы просто не разобрались с makefile...

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

Нет не удобная. Т.к. в большем проекте для целей отладки C позволяет разместить функцию в любом C файле и затем подключить к любому C файлу директивой extern, не изменяя ни одного header файла.

Я вас умоляю. Своим постом вы только показали ваш уровень знаний и по Delphi и по C.


 
Real ©   (2007-06-06 14:22) [382]


> И почему, спрашивается, математические формулы записываются
> на специальном языке, а вот программистам без английского
> хоть в петлю лезь и если begin в тексте программы нет, то
> она уже нечитаема.
> Слабоватый какой-то аргумент, не находишь ?

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


> Для обучения не менее идеален, допустим, Алгол. И что ?
> Не учат, заразы, на нем.
> Для обучения (и специально разработан, кстати) Basic, в
> котором ни слова от паскаля нет и в помине. И что ?

Имхо, бэйсик хуже Паскаля для обучения. Алгол - когда будет Делфи для Алгол, тогда и ему будут учить :) Знаю об Алголе не слишком хорошо, но вроде это язык по мотивом которого делался и Паскаль, значит он в целом Паскале-подобный :)


> Не надо учить языку программирования. Ни в коем разе. Учить
> надо думать, желательно алгоритмически. А какой язык выбрать
> - а какая, по большому счету разница ?
> В свое время народ учили Фортрану - и ничего, выучили. Неплохие
> программы люди пишут.

Блин, ну вот опять. Речь о синтаксисе с точки зрения понимания и наглядности! Естественно что главное уметь программировать, а не знать какой-либо язык в совершенстве. Кодинг - для любого языка требует опыта и знаний о языке (правда имхо, в паскале опыт кодинга приходит быстрее :)


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

Ну может немного нагнал на Си :) Просто в сравнении с Паскалем, отношение к типу данных менее ответственное (как последствие, в ПХП и появилась конструкция === т.к. иногда требуется знать булевый ли тип был вернут или числовой) и иногда фанатическая тяга к указателям, там где можно без них обойтись вообще.


> > По ходу вспомнил что меня больше всего всегда раздражало
> > в Си: зависимость регистра.
> Здесь я противоположного мнения. Например, при прочих равных
> условиях в исходниках Си в отличие от Паскаля не встретишь
> ключевые слова вида FOR, For

Не знаю, лично для меня что написание: FOR, fOR, For, FoR - означает только одно - оператор цикла FOR :^) Просто наверное потому, что я привык что регистр (шрифт, цвет) символов не меняют смысла слова, то есть так, как в любом естественном человеческом языке. А вот как писали выше - давать типу и экземпляру одинаковые идентификаторы, но в разных регистрах - имхо полный бред: попробуй через неделю вспомнить как именно ты использовал и там и там разный регистр. Отсюда и появляются привычки типа: Типы пишем заглавными, остальное прописными... Но это хорошо до тех пор, пока не придется работать с исходником программиста, у которого все наоборот :) Паскаль тоже дает рекомендации по использованию регистра, но это только рекомендации.


> Просто так исторически сложилось. SQL, например, тоже регистронезависимый,
>  однако в большинстве случаев названия таблиц пишутся также
> через "_".

Хе, это смотря где. В Линухе, где регистрозависимыми являются имена файлов - для MySQL будут и имена таблиц регистрозависимыми. Стоит ли напоминать на каком языке писали *никсы, что везде распространилась регистрозависимость? :)


 
Однокамушкин   (2007-06-06 14:57) [383]


> Defunct ©   (06.06.07 14:07) [379]
> Откомпилируйте и запустите ниже приведенный пример.

Очень интересно... я, кажется, русским языком написал, что мне нужен пример, аналогичный #define if while в Delphi... в ответ я получил пример директивы {$IFDEF}... Не находите, что замена неравноценная? Ещё раз спрашиваю: можно ли написать в Delphi аналог #define if while? Заменить одно ключевое слово другим?

А тот {$DEFINE}, который есть в Delphi, никак не может изменить сам код, поэтому не в пример безопаснее #define... возможность использования того, что так объявлено, локализована в специальных директивах, а не размазана по всему коду...

> Не смешите людей своими примерами. Похоже это вам действительно
> неизвестно, что такое и для чего нужна "раздельная компиляция".
>  Перечитайте еще раз [322] или [353].
>
> Учить матчасть.

Учить матчасть придётся вам, потому что это вы не знаете, что такое раздельная компиляция и чем она отливается от независимой: http://forum.pascal.net.ru/lofiversion/index.php/t12785.html

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

А теперь - простой пример того, как C++ "умеет" выполнять такую проверку... создаём новый проект в VC++ - консольное приложение и добавляем к нему ещё два файла - Test.h и Test.cpp...

Файл InclTest.cpp
// InclTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Test.h"

int _tmain(int argc, _TCHAR* argv[])
{
TestOut(1);
return 0;
}


Файл Test.h
extern "C" void __stdcall TestOut(int a);

Файл Test.cpp
#include "stdafx.h"
#include <stdio.h>

extern "C" void __stdcall TestOut(char* a)
{
printf("%s\n", a);
}


Файл stdafx.h не привожу, он стандартный, я там ничего не менял...

Обратите внимание, что прототипы функций TestOut в Test.h и Test.cpp различаются... тем не менее, проект компилируется, а вот при запуске даёт ошибку... потому что вместо TestOut с целым параметром тупой линкер подставил TestOut с параметром char*... так что никакой полной проверки он не выполняет, а без этого компиляция не является раздельной...

Вы можете и дальше рассказывать сказки о том, что в C++ компиляция раздельная, но, боюсь, в неё поверят только те, кто думает, что если при изменении файла перекомпилируется не весь проект, этого уже достаточно, чтобы называть компиляцию раздельной... ещё раз повторяю: в C++ компиляция независимая, но не раздельная...


 
Однокамушкин   (2007-06-06 15:08) [384]


> Defunct ©   (06.06.07 14:21) [381]
> Значит вы просто не разобрались с makefile...

Читайте внимательнее, что я написал... я работал с Visual C++, там по умолчанию никакие makefile не используются... среда решает эти вопросы самостоятельно... и вот почему-то получается, что Delphi такие вопросы решает легко, а VC++ спотыкается...

> Нет не удобная. Т.к. в большем проекте для целей отладки
> C позволяет разместить функцию в любом C файле и затем подключить
> к любому C файлу директивой extern, не изменяя ни одного
> header файла.

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

> Я вас умоляю. Своим постом вы только показали ваш уровень
> знаний и по Delphi и по C.

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


 
defunct ©   (2007-06-06 15:13) [385]

> А препроцессор я давно перерос... после того, как мой коллега в своём
> заголовочном файле зачем-то написал #define String STRING, а в моём
> коде, который использовал этот файл, у меня была структура с полем
> String... вот тогда я и понял, куда именно нужно засунуть препроцессор...

А может это не препроцессор виноват, а вы вместе с другом?
И это вас вместе с вашим другом надо засунуть именно туда куда вы предлагаете засунуть препроцессор.
Вы б еще структуре дали имя "struct" и а потом бы жаловались на язык.


 
palva ©   (2007-06-06 15:24) [386]

Что-то непонятно. Вы пишете пример, в котором просите сделать компилятор то-то и то-то. Он делает именно то, что вы пишете. Вы же сами написали для функции разные прототипы. Вполне возможно, что в этом заложен глубокий смысл. Вы хотите чтобы компилятор на этапе компиляции увидел, что прототипы разные? Так напишите тогда код по-другому. Но если программисту взбредет в голову использовать разные прототипы, то у него есть такая возможность.


 
defunct ©   (2007-06-06 15:29) [387]

Однокамушкин   (06.06.07 14:57) [383]

> Очень интересно... я, кажется, русским языком написал, что мне нужен
> пример, аналогичный #define if while в Delphi...

Уж извини, но у меня нет времени на вежлое втолковывание прописных истин. Ты почитай для общего образования, что такое препроцессор и для чего он используется, потом перечитай и попытайся понять смысл фразы из [322]

1. Препроцессор есть не только в C, но и в Delphi. В Delphi правда он немного кастрирован, но это больше минус чем плюс.

А потом наконец въедь, что #define if while это не препроцессор, это макро-определение. То что препроцессор Cи позволяет делать довольно гибкие макроопределения и даже подменять ключевые слова это не баг, это фича. На практике же imho только для экстремалу-экспериментатору может прийти в голову подменять или выбрасывать ключевые слова.

> Не беспокойтесь, знания вполне приличные, особенно по Delphi...

Каждый пост ими блещет.

> понимаете, главная задача программиста - писать понятный легко
> сопровождаемый и модифицируемый код,

Да я это понимаю. Поэтому в отличие от вас я в структурах не объявляю полей с именем "String", и не объявляю #define STRING String,
и никогда даже не пробовал использовать такую чушь как #define if while
потому что это опасно, непонятно и ведет к плачевным последствиям при сопровождении сопровождении.


 
db2admin ©   (2007-06-06 15:32) [388]

Удалено модератором


 
Vendict ©   (2007-06-06 15:57) [389]

Real ©   (05.06.07 22:19) [324]
For j:=0 to 3 do          
sm[j]:=(sm1 and ($ff shl (j*8)))  shr (j*8);
хотя это ещё цветочки ...


 
db2admin ©   (2007-06-06 16:02) [390]

Удалено модератором


 
Alkid ©   (2007-06-06 16:07) [391]


> Вы можете и дальше рассказывать сказки о том, что в C++
> компиляция раздельная, но, боюсь, в неё поверят только те,
>  кто думает, что если при изменении файла перекомпилируется
> не весь проект, этого уже достаточно, чтобы называть компиляцию
> раздельной... ещё раз повторяю: в C++ компиляция независимая,
>  но не раздельная...

Прошу не путать язык С++ и среду разработки Visual C++.
Это в Delphi язык и среда разрабтки тесно увязаны.


 
Alkid ©   (2007-06-06 16:09) [392]


> А вернувшись к проекту через год, можно запутаться, где
> что определено и где что используется... а если кому-то
> потом придётся разбирать ваш код, то я ему заранее сочувствую.
> ..

Ну-ну. Вообще-то бывают и более трудные случаи. Я, вон, не так давно на новую работу устроился, а тут проекты с мегабайтами исходного кода на С++.
И ничего, вник быстро.

Кстати, на предыдуще работы приходилось вникать в код на Дельфи. Скорость вникания от этого не выросла и не уменьшилась. Т.е. от языка она мало зависит.


 
b z   (2007-06-06 16:14) [393]

а вас не напрягает:
procedure
function
property
constructor
destructor

или в противовес:
постоянно указывать public ....
? :)


 
Defunct ©   (2007-06-06 16:29) [394]

> Вы можете и дальше рассказывать сказки о том, что в C++ компиляция
> раздельная, но, боюсь, в неё поверят только те, кто думает, что если при
> изменении файла перекомпилируется не весь проект, этого уже
> достаточно, чтобы называть компиляцию раздельной...

http://home.perm.ru/~strannik/st_txt_prog_02.html

Смотрите пункт
F. РАЗДЕЛЬНАЯ КОМПИЛЯЦИЯ В ЯЗЫКАХ ПРОГРАММИРОВАНИЯ.


 
Loginov Dmitry ©   (2007-06-06 16:49) [395]

> а вас не напрягает:
> procedure
> function
> property
> constructor
> destructor
> или в противовес:
> постоянно указывать public ....


А вот это как раз еще один большой плюс в сторону Паскаля.


 
Однокамушкин   (2007-06-06 17:54) [396]


> defunct ©   (06.06.07 15:29) [387]
> А потом наконец въедь, что #define if while это не препроцессор,
>  это макро-определение. То что препроцессор Cи позволяет
> делать довольно гибкие макроопределения и даже подменять
> ключевые слова это не баг, это фича. На практике же imho
> только для экстремалу-экспериментатору может прийти в голову
> подменять или выбрасывать ключевые слова.

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

> А может это не препроцессор виноват, а вы вместе с другом?
> И это вас вместе с вашим другом надо засунуть именно туда
> куда вы предлагаете засунуть препроцессор.
> Вы б еще структуре дали имя "struct" и а потом бы жаловались
> на язык.

Хамство ваше оставляю без внимания, оно характеризует вас, а не меня, а по поводу всего остального объясняю: в C++ нет зарезервированных слов String и STRING, поэтому использовать такие идентификаторы вполне допустимо... есть тип string в STL, но в том проекте STL не использовался...

А вообще, снова сталкиваюсь с подменой понятий с вашей стороны... я писал про переопределение ключевых слов - вы мне в ответ не относящийся к делу пример про {$IFDEF}... я пишу про идентификатор String - вы переводите стрелки на ключевое слово struct (компилятор, кстати, не дал бы объявить поле с таким именем, и вы не можете этого не знать)... подобную подмену понятий обычно используют тогда, когда возразить по сути нечего...

> Да я это понимаю. Поэтому в отличие от вас я в структурах
> не объявляю полей с именем "String", и не объявляю #define
> STRING String,
> и никогда даже не пробовал использовать такую чушь как #define
> if while
> потому что это опасно, непонятно и ведет к плачевным последствиям
> при сопровождении сопровождении.

Так это должен понимать компилятор, а не программист...

> > Не беспокойтесь, знания вполне приличные, особенно по
> Delphi...
>
> Каждый пост ими блещет.

У вас в контактных данных адрес живой? Мне есть чем доказать своё знание Delphi, но по некоторым причинам не хочу светить это на форуме... так что если вы не против, могу прислать письмо... А то надоело эти обвинения на пустом месте слушать... даже интересно, где это тут я проявил незнание Delphi? В чём конкретно?

> http://home.perm.ru/~strannik/st_txt_prog_02.html
>
> Смотрите пункт
> F. РАЗДЕЛЬНАЯ КОМПИЛЯЦИЯ В ЯЗЫКАХ ПРОГРАММИРОВАНИЯ.

Пока без комментариев, на работе доступ к этому ресурсу почему-то закрыт...


 
Однокамушкин   (2007-06-06 17:57) [397]


> palva ©   (06.06.07 15:24) [386]
> Что-то непонятно. Вы пишете пример, в котором просите сделать
> компилятор то-то и то-то. Он делает именно то, что вы пишете.
>  Вы же сами написали для функции разные прототипы. Вполне
> возможно, что в этом заложен глубокий смысл. Вы хотите чтобы
> компилятор на этапе компиляции увидел, что прототипы разные?
>  Так напишите тогда код по-другому. Но если программисту
> взбредет в голову использовать разные прототипы, то у него
> есть такая возможность.

"Разуму надо придать не крылья, а скорее свинец и тяжесть, чтобы они сдерживали всякий прыжок и полет" - Френсис Бэкон. Мне очень нравится этот философ...


 
defunct ©   (2007-06-06 18:18) [398]

> Однокамушкин   (06.06.07 17:54) [396]
> ...
> А вообще, снова сталкиваюсь с подменой понятий с вашей стороны...

Я протестовал против двух твоих высказываний.

1. Ты сказал что в Delphi нет препроцессора:
... "например, отсутствие мерзости под названием препроцессор..."

в коменте [379] - доказано, что препроцессор в Delphi есть.

2. Ты сказал что в C "ненормальная" раздельная компиляция -

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

я привел ссылку где сравнивается раздельная компиляция в различных языках. Паскаль набрал там 6 очков, C++ - 8 очков, C - 5.


Других вопросов к тебе ни имею, и не намерен по ним спорить.

Со своими понятиями надо разбираться самому.

> У вас в контактных данных адрес живой?

Живой, но прочитать смогу только вечером.


 
Vga ©   (2007-06-06 21:23) [399]


> db2admin ©   (06.06.07 08:27) [372]

Хех, не, такие приколы я смотрю, но расковырять не пытаюсь :) Хотя думаю, если прогнать через препроцессор и реформаттер - то можно будет и разобрать.


> Ну, не знаю как у вас, а в нормальных конторах, где кодят
> много на С/С++ есть соглашения о наименовании, которые так
> же указывают и какой регистр когда использовать.
> Правда, всегда есть и шалопаи, которые на них болт кладут
> :)

Ну Open Source сообщество контора не совсем нормальная, а из других контор ко мне сорцы обычно не попадают - закрыты :)


 
Vga ©   (2007-06-06 21:43) [400]


> defunct ©   (06.06.07 18:18) [398]

Знание автором статьи по ссылке языка Delphi (в вступлении сказано. что в качестве Pascal рассматривается Delphi) вызывает сомнения.



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 вся ветка

Форум: "Прочее";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 1.16 MB
Время: 2.063 c
15-1185793624
VRSB
2007-07-30 15:07
2007.08.26
обработка условий


15-1185354885
Kerk
2007-07-25 13:14
2007.08.26
Федор Черенков


2-1186066654
JaK[Light]
2007-08-02 18:57
2007.08.26
Потоки и volatile


2-1186294194
>>DEATH<<
2007-08-05 10:09
2007.08.26
Как реализовать


15-1185782456
Vendict
2007-07-30 12:00
2007.08.26
Nero и оперативная память





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский