2013-03-23 3 views
1

В настоящее время я переношу некоторый код Unix в Windows и натолкнулся на довольно странное использование условного оператора, который является недопустимым синтаксисом в соответствии с Visual Studio (2010 или 2012).Странное использование условного оператора

скопировал и вставил без изменений:

filename = filename ? : h->filename; 

Там нет никаких условий! Я предполагаю, что это либо проверка на пустую строку (из сортировки const char*), либо на пустой & пустой, поскольку я не могу придумать ничего другого, что может быть.

Кто-нибудь видел это раньше? Спасибо.

+0

Или http://stackoverflow.com/questions/2806255/why-would-you-use-the-ternary-operator-without-assigning-a-value-for-the-true: * "Это разрешено в GNU как неясное расширение до C "* –

+0

Спасибо всем за отличный набор ответов :) – niemiro

ответ

2

Это расширение gcc.

x = a ? : b; 

является почти же, как

x = a ? a : b; 

за то, что a только оцениваемого раз, что полезно, если a имеет каких-либо побочных эффектов или дорого оценить, за исключением.

2

Данный код работает аналогично следующему коду в данном конкретном контексте,

if (!filename) { 
    filename = h->filename; 
} 

отметить также, что в данном примере имя файла и h-> имя_файла две разные переменные. filename является обычной переменной, а h-> filename является переменной-членом структуры.

Смежные вопросы