Текущий архив: 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.hextern "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.15 MB
Время: 0.164 c