Несколько значений в одном определении макроса с __SYSCALL_DEFINEx

Вы можете просто загрузить jq двоичный файл для вашей платформы и запустить (chmod +x jq):

$ curl 'https://twitter.com/users/username.json' | ./jq -r '.name'

Он извлекает атрибут "name" из объекта json.

jq homepage говорит, что это похоже на sed для данных JSON.

1
задан StoryTeller 25 March 2019 в 09:47
поделиться

2 ответа

где определение макроса может иметь несколько значений

Макрос не имеет значений. Макрос - это конструкция манипуляции токеном. Когда препроцессор расширяет его, он превращает (ноль или более) входных токенов в выходные токены. Выходные токены просто должны быть действительными токенами, они даже не должны быть действительным кодом Си. Например:

#define foo(t) 1 > 0 t 0 : 1

Это совершенно правильное функциональное определение макроса. Когда мы пишем foo(;) или foo(3), препроцессор подставляет аргумент в последовательность токенов, которую он выплевывает. Конечно, для аргументов, которые мы предоставили, результат синтаксически неверен C. Но foo(?) приведет к действительному C.

Смысл этой преамбулы состоял в том, чтобы объяснить, что эти точки с запятой не делают ничего особенного. Они являются лишь частью последовательности токенов, которую выкладывает макрос. Этот макрос предназначен для замены себя последовательностью объявлений и определений функций, которые реализуют системный вызов. Объявления и операторы в органах функций должны заканчиваться символом ;. Ничего больше.

0
ответ дан StoryTeller 25 March 2019 в 09:47
поделиться

В этом случае вы не видите определение макроса с несколькими значениями, вы видите определение макроса, которое занимает несколько строк. Таким образом, в основном, __SYSCALL_DEFINEx (x, name, ...) будет заменен целым блоком кода ниже (обратите внимание, что \ в конце строки предназначен для охвата нескольких строк, и, конечно, каждая строка кода заканчиваться на;).

0
ответ дан Nguyen Cong 25 March 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: