Почему не там макросы в C#?

никакой такой пакет не мог быть найден. Вероятно, это - потому что я использую ubuntu 12.04.

The, которой соответствующая версия для Ubuntu 12.04, с этой даты, должна быть 1.16.1.2ubuntu7.

ia32-libs : Depends: ia32-libs-multiarch but it is not installable

Это ссылка к ia32-libs-multiarch страница, где можно загрузить .deb файл. Используйте dpkg -i filename.deb, чтобы вручную установить его, и, если успешный, попробовать склонный - добираются снова. В противном случае обновите с dpkg ошибкой.

я установил ia32 на тесте x86_64 система и получил следующее для содержания триггерного Файла и содержания giomodule.cache. Проверьте, чтобы видеть, как ваши отличаются:

izx@myprecise:~$ grep libglib /var/lib/dpkg/triggers/File 
/usr/lib/x86_64-linux-gnu/gio/modules libglib2.0-0
/usr/lib/gio/modules libglib2.0-0
/usr/share/glib-2.0/schemas libglib2.0-0
/usr/lib/i386-linux-gnu/gio/modules libglib2.0-0:i386
/usr/lib/gio/modules libglib2.0-0:i386
/usr/share/glib-2.0/schemas libglib2.0-0:i386

izx@myprecise:~$ ls /usr/lib/x86_64-linux-gnu/gio/modules
giomodule.cache      libgiognutls.so                 libgvfsdbus.so
libdconfsettings.so  libgiolibproxy.so
libgiognomeproxy.so  libgioremote-volume-monitor.so

izx@myprecise:~$ cat /usr/lib/x86_64-linux-gnu/gio/modules/giomodule.cache 
libgiognutls.so: gio-tls-backend
libgioremote-volume-monitor.so: gio-native-volume-monitor,gio-volume-monitor
libgvfsdbus.so: gio-vfs,gio-volume-monitor
libgiolibproxy.so: gio-proxy-resolver
libdconfsettings.so: gsettings-backend
libgiognomeproxy.so: gio-proxy-resolver
48
задан Brian Tompsett - 汤莱恩 27 November 2015 в 01:41
поделиться

7 ответов

из часто задаваемых вопросов по C #.

http://blogs.msdn.com/CSharpFAQ/archive/2004/03/09/86979.aspx

Почему C # не поддерживает макросы #define? В C ++ я могу определить макрос, например:

#define PRODUCT (x, y, z) x * y * z

, а затем использовать его в коде:

int a = PRODUCT (3, 2 , 1);

C # не позволяет этого делать. Почему?

На это есть несколько причин. Первая - это удобочитаемость.

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

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

Есть также несколько более тонкий вопрос. Макросы выполняются в текстовом виде, что означает, что если я напишу:

int y = PRODUCT (1 + 2, 3 + 4, 5 + 6)

, я ожидаю получить что-то, что дает мне 3 * 7 * 11 = 231 , но на самом деле расширение, как я определил, дает:

int y = 1 + 2 * 3 + 4 * 5 + 6;

, что дает мне 33. Я могу получить вокруг этого разумным применением скобок, но очень легко написать макрос, который работает в одних ситуациях и не работает в других.

Хотя C #, строго говоря, не имеет препроцессора, в нем есть условные символы компиляции, которые можно использовать для воздействия на компиляцию. Их можно определить в коде или с помощью параметров компилятора. Директивы «предварительной обработки» в C # (названы исключительно для согласованности с C / C ++, Используется для определения и отмены определения символов условной компиляции

#if, #elif, #else и #endif

Используется для условного пропуска разделов исходного кода

#line Используется для управления номерами строк, выдаваемых для ошибок и предупреждений.

# ошибка и # предупреждение Используется для выдачи ошибок и предупреждений.

#region и #endregion

Используются для явной пометки частей исходного кода.

См. Раздел 9.5 спецификации ECMA для получения дополнительной информации по вышеизложенному. Условная компиляция также может быть достигнута с помощью атрибута Conditional в методе, так что вызовы метода будут компилироваться только тогда, когда будет определен соответствующий символ. См. Раздел 24.4.2 спецификации ECMA для получения дополнительной информации об этом.

Автор: Эрик Ганнерсон

67
ответ дан 7 November 2019 в 12:07
поделиться

В этой статье сравниваются макросы perl и lisp, но суть остается прежней: макросы текстового уровня (perl / c ++) вызывают серьезные проблемы по сравнению с макросами исходного уровня (lisp)

http: / /lists.warhead.org.uk/pipermail/iwe/2005-July/000130.html

Более смелые люди, чем я, свернули свою собственную систему макросов в C # http://www.codeproject.com/KB /recipes/prepro.aspx

1
ответ дан 7 November 2019 в 12:07
поделиться

Макросы в C / C ++ использовались для определения констант, создания небольших встроенных функций и для различных вещей, непосредственно связанных с компиляцией кода (#ifdef) .

В C # у вас есть строго типизированные константы, достаточно умный компилятор для встраивания функций, когда это необходимо, и вы знаете, как правильно компилировать материал (никакой ерунды с предварительно скомпилированными заголовками).

Но нет особой причины, по которой вы не могли бы сначала запустить свой CS-файл через препроцессор C, если вы действительно этого хотели:)

4
ответ дан 7 November 2019 в 12:07
поделиться

Макросы в стиле C ++, по моему опыту, добавляют огромную сложность без соответствующих преимуществ. Я точно не пропустил их ни на C #, ни на Java. (Я вообще редко использую символы препроцессора в C #, но иногда рад, что они есть.)

Теперь разные люди призывали к макросам в стиле Lisp , о которых я мало знаю, но определенно звучат приятнее, чем в стиле C ++.

Что конкретно вы хотите сделать с макросами? Возможно, мы сможем помочь вам мыслить более идиоматично в стиле C # ...

28
ответ дан 7 November 2019 в 12:07
поделиться

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

1
ответ дан 7 November 2019 в 12:07
поделиться

Макросы - это инструмент для тех дней, когда большинство программистов были умнее компилятора. В C / C ++ все еще есть случаи, когда это так.

В настоящее время большинство программистов не так умны, как компилятор / среда выполнения C #.

0
ответ дан 7 November 2019 в 12:07
поделиться

Можно использовать геоип драгоценный камень.

environment.rb

config.gem 'geoip'

Загрузить GeoIP.dat.gz из http://www.maxmind.com/app/geolitecountry . распакуйте файл. Ниже предполагается, что в разделе # {RAILS _ ROOT }/db dir.

@geoip ||= GeoIP.new("#{RAILS_ROOT}/db/GeoIP.dat")    
remote_ip = request.remote_ip 
if remote_ip != "127.0.0.1" #todo: check for other local addresses or set default value
  location_location = @geoip.country(remote_ip)
  if location_location != nil     
    @model.country = location_location[2]
  end
end
-121--1311398-

int _ fast # _ t из < stdint.h > или < boost/cstdint.hpp > .

Это означает, что вы откажетесь от простоты и непротиворечивости (эти типы могут быть символьным типом, например, которые являются целыми типами в C/C + +, и это может привести к неожиданным резолюциям функции) вместо того, чтобы просто использовать int.

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

Он будет использоваться на процессоре x86 и храниться полностью в оперативной памяти. Достаточно большое количество должно быть сохранено (50 000 +), поэтому процессор кэширует и это необходимо учитывать.

Вы все еще должны беспокоиться о кэше ( после вы находитесь на этом уровне оптимизации), даже если все данные не будут кэшированы. Например, доступ к каждому предмету осуществляется последовательно? непредсказуемо? или только одно поле из каждого предмета в последовательности? Сравните структуру {int a, b;} данных [N]; с int data_a[N], data_b[N];. (Представьте, что вам нужны все «а» сразу, но вы можете игнорировать другой, в каком пути более дружественный кэш?) Опять же, это не похоже на основную область, на которой следует сосредоточиться.

-121--3049948-

Чтобы вам было интересно вводить ЭТО снова и снова.

// Windows presetation foundation dependency property.
public class MyStateControl : ButtonBase
{
  public MyStateControl() : base() { }
  public Boolean State
  {
    get { return (Boolean)this.GetValue(StateProperty); }
    set { this.SetValue(StateProperty, value); } 
  }
  public static readonly DependencyProperty StateProperty = DependencyProperty.Register(
    "State", typeof(Boolean), typeof(MyStateControl),new PropertyMetadata(false));
}

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

Не позволяйте недостаткам хромых макросов C и C++ замять вас силой компиляции кода, разрешенного по времени. Компиляция временного разрешения и генерации кода позволяет более эффективно выражать ЗНАЧЕНИЕ и НАМЕРЕНИЕ кода без необходимости прописывать все детали niggling исходного кода. Например, что если бы можно было заменить вышесказанное на следующее:

public class MyStateControl : ButtonBase
{
  public MyStateControl() : base() { }

  [DependencyProperty(DefaultValue=true)] 
  bool State { get; set; }
}

у Бу они есть, у ОкамМЛ (по крайней мере, Мета МЛ), а у C и C++ - (в противной форме, но лучше, чем вообще не иметь). C # - нет.

36
ответ дан 7 November 2019 в 12:07
поделиться
Другие вопросы по тегам:

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