2014 dxdy logo

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

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




 
 Си как оценить вызывающий код
Сообщение11.12.2021, 13:57 
На 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 
Вот на stack нашел: What do the parentheses around a function name mean?
Видимо кроме функции ещё макрос надо написать.

 
 
 
 Re: Си как оценить вызывающий код
Сообщение11.12.2021, 14:06 
Похоже на то. Спасибо!

 
 
 
 Re: Си как оценить вызывающий код
Сообщение11.12.2021, 14:07 
Проверил, работает.
Используется синтаксис 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 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group