?

Log in

No account? Create an account

о выпадающих отрицаниях

« previous entry | next entry »
ноя. 14, 2007 | 01:53 pm

Сегодня выяснилось интересное поведение компилятора Visual C: в директиве #if not defined он глотает not. Недаром во всех кроссплатформенных проектах пишут #if !defined.
Метки:

Ссылка | Что скажете? | Поделиться

Comments {5}

Андрій Новосьолов

* * *

from: andrzejn
date: ноя. 14, 2007 11:41 am (UTC)
Ссылка

А он обязан понимать такую конструкцию?

Когда я ещё писал на C/C++, я вообще пользовался словом #ifndef

Свои 5 коп. | Развитие

erra

не уверен

from: erra
date: ноя. 14, 2007 12:03 pm (UTC)
Ссылка

#ifndef, строго говоря, является сокращением от #if not defined. и в ситуации, когда у тебя есть какое-нибудь

#if defined (Win32) and not defined (FOO)

gcc понимает, а вот MSVC — нет. Причём, говорю же, добро бы ругался, паразит.

----
Впрочем, я не уверен, что gcc понимает :).

Edited at 2007-11-14 12:14 (UTC)

Свои 5 коп. | Предыстория | Развитие

Cyril Slobin

* * *

from: slobin
date: ноя. 14, 2007 12:01 pm (UTC)
Ссылка

А откуда такая директива вообще взялась? Её в природе не существует. Бывают #if defined и #if !defined либо #ifdef и #ifndef. Хотя да, должна была не глотать, а выругаться.

... Сферическая планета в вакууме ...

Свои 5 коп. | Развитие

erra

не знаю, откуда

from: erra
date: ноя. 14, 2007 12:12 pm (UTC)
Ссылка

наши программисты придумали ;>

глотает, похоже, потому что расценивает её как имя макропеременной с неопределённым значением (и потому, собственно, игнорирует).

Свои 5 коп. | Предыстория | Развитие

Light

* * *

from: livelight
date: ноя. 16, 2007 01:15 pm (UTC)
Ссылка

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

У меня было как-то раз еще веселей: в проекте одном писать надо было в одном месте на RSL, где булево отрицание обозначается знаком ~ , а в другом - на C, где тильда обозначает немного другое. И когда возвращаемое значение функции, возвращающей 0 или 1, я отрицал тильдой, истина у меня получалась ВСЕГДА. Очень долго на это медитировал, прежде чем сообразил.

Свои 5 коп. | Развитие