Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.26;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 1.16 MB
Время: 0.128 c
2-1186138779
interandry
2007-08-03 14:59
2007.08.26
Помогите с созданием класса


2-1185543071
kyro
2007-07-27 17:31
2007.08.26
Из за чего не получается проиграть файл медиа плеером


2-1185876933
TruePunk
2007-07-31 14:15
2007.08.26
проблемы с jpeg


15-1185940922
IMHO
2007-08-01 08:02
2007.08.26
Бухгалтера vs. программисты


15-1185789204
Kerk
2007-07-30 13:53
2007.08.26
Клубом порулить хочется?