2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Си как оценить вызывающий код
Сообщение11.12.2021, 13:57 
Заблокирован


19/02/13

2388
На Codewars наткнулся на интересную задачку:
Цитата:
You task is to write a function (or something else?) bool is_parenthesized() that detects if its name is parenthesized in the place where it's called from:

is_parenthesized() // should return `false`
(is_parenthesized)() // should return `true`

Получается, моя функция должна заглянуть в вызывающий её код ещё до его компиляции. Как это возможно? Или есть какие-то другие признаки наличия скобок? Как вообще подступиться к этой задаче, с какой стороны?

 Профиль  
                  
 
 Re: Си как оценить вызывающий код
Сообщение11.12.2021, 14:01 


18/09/21
1682
Вот на stack нашел: What do the parentheses around a function name mean?
Видимо кроме функции ещё макрос надо написать.

 Профиль  
                  
 
 Re: Си как оценить вызывающий код
Сообщение11.12.2021, 14:06 
Заблокирован


19/02/13

2388
Похоже на то. Спасибо!

 Профиль  
                  
 
 Re: Си как оценить вызывающий код
Сообщение11.12.2021, 14:07 


18/09/21
1682
Проверил, работает.
Используется синтаксис C
#include "stdio.h"
#define is_parenthesized() (false)
bool (is_parenthesized)(void) {return true;}

int main()
{
  printf("res = %s\n", ((is_parenthesized)() ? "true" : "false"));
  return 0;
}
 

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group