LINUX.ORG.RU

Двойные скобки вокруг объявления в условии

 ,


0

2

Когда в условии делаешь объявление с присваиваением - всё работает, когда вокруг этого объявления ставишь еще одни вторые скобки - компилятор ругается.

#include <stdio.h>

int main(void)
{

	int i = 5;
	
	if (i == 5)  // компилируется норм
		printf("i equal five!\n");
	
	if ((i == 5))   // компилируется норм
		printf("i equal five! with double parentheses\n"); 
	
	if (int j = 5)   // компилируется норм
		printf("j equal five!\n");
	
	if ((int g = 5))   // ошибка компиляции 
		printf("g equal five!\n");


	return 0;
}

Вываливается с ошибкой

janb@janb~: g++ main.cpp 
main.cpp: In function 'int main()':
main.cpp:22:7: error: expected primary-expression before 'int'
  if ((int g = 1))
       ^
main.cpp:22:7: error: expected ')' before 'int'
main.cpp:23:28: error: expected ')' before ';' token
   printf("j equal five!\n");
                            ^

Compilation exited abnormally with code 1 at Mon Jul  6 13:24:18

Поиграться можно тут

http://cpp.sh/3csy


Такой код нужен для последующих проверок вроде

if ( (int g = func()) != NULL)
    doSmth();

JANB
() автор топика
Ответ на: комментарий от JANB

Как не был? Стандарт запрещает декларации в скобках в данном случае.

Deleted
()

скобки в if() - часть оператора if. в них допускается объявление локальной переменной.

скобки внутри - выражение. объявление локальной переменной в выражении не допускается.

чо, блин, ваще надо курить, чтоб такие идеи в голову приходили?

alegz ★★★★
()
Ответ на: комментарий от JANB

Такой код нужен для последующих проверок вроде

if ( (int g = func()) != NULL)
    doSmth();

очевиднофикс

if(int g = func()) {
    doSmth();
}
shty ★★★★★
()
Ответ на: комментарий от Miguel

Во. Точняк. Тоже валится с ошибкой

 In function 'int main()': 4:4: error: expected primary-expression before 'int' 4:4: error: expected ')' before 'int' 

JANB
() автор топика
Ответ на: комментарий от alegz

Замечу, что в сишном стандарте таки выражение:

C99 6.8.4 selection-statement:
    "if" "(" expression ")" statement ["else" statement]
    "switch" "(" expression ")" statement

loyd
()
Ответ на: комментарий от JANB

Ну? И как? Не просёк ещё разницу между statement и expression?

Miguel ★★★★★
()
Ответ на: комментарий от JANB

Нужно срочно отправить багрепорт.

anonymous
()
Ответ на: комментарий от anonymous

Дык, я о том, что declaration вообще запрещён в if в сях.

loyd
()
Ответ на: комментарий от JANB

Такой код нужен

Ты ошибаешься

if ( (int g = func()) != NULL)

Я бы хреначил тебя огромным томиком K&R до посинения

anonymous
()
Ответ на: комментарий от loyd

В плюсовом уже не так:

6.4 Selection statements

Selection statements choose one of several flows of control.

selection-statement:
       if ( condition ) statement
       if ( condition ) statement else statement
       switch ( condition ) statement
condition:
       expression
       attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause
       attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list

Miguel ★★★★★
()

C++ сегодня - это PL/I времён гиганта известного цвета.

зато и любим.

qulinxao ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.