netch80: (bird)
[personal profile] netch80
В питоне:

print '|%10%|' % ()
print '|%-10%|' % ()


выводит:

|         %|
|%         |


То же самое в перле и FreeBSD libc.

Но glibc выводит простой процент без расширения поля (две строки с |%|), gcc ругается, что формат неправильный, причём он в принципе не опознаёт такую возможность:

t.c:5: warning: conversion lacks type at end of format
t.c:5: warning: unknown conversion type character '|' in format
t.c:6: warning: conversion lacks type at end of format
t.c:6: warning: unknown conversion type character '|' in format


а C99 и Posix хором говорят "The complete conversion specification shall be %% ."

Date: 2014-07-11 11:28 am (UTC)
From: [identity profile] gul-kiev.livejournal.com
Получается, они по-разному трактуют и обрабатывают "%%" в строке формата: одни считают его форматным выводом (хоть и без аргументов), а другие - экранированием. Прикольно. Хотя и непонятно, какая разница.
Лично я всегда воспринимал "%%" как экранирование, и так и реализовывал бы (т.е. как в glibc). А теперь уже не удивлюсь, если, например, $$ в make окажется встроенной readonly-переменной со значением "$". Даже проверил - нет, всё-таки ${$} не работает. :)

Date: 2014-07-12 12:35 am (UTC)
From: [identity profile] d1f.livejournal.com
Не вижу тут gcc'шного кода.

Date: 2014-07-12 07:52 am (UTC)
From: [identity profile] netch80.livejournal.com
Ну, если он не очевиден:

#include <stdio.h>
int main()
{
        printf("|%10%|\n");
        printf("|%-10%|\n");
        return 0;
}

Edited Date: 2014-07-12 07:53 am (UTC)

Date: 2014-07-12 09:51 am (UTC)
From: [identity profile] d1f.livejournal.com
Нет, неочевиден.
Удваивания второго процента нет.
Символа типа преобразования нет, не помню, можно ли так.

Date: 2014-07-12 11:22 am (UTC)
From: [identity profile] netch80.livejournal.com
Второй '%' это и есть символ преобразования:)

Date: 2014-07-12 12:13 pm (UTC)
From: [identity profile] d1f.livejournal.com
Ну, значит, нет такого в glibc.

Profile

netch80: (Default)
netch80

January 2026

S M T W T F S
    1 23
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 2nd, 2026 02:33 pm
Powered by Dreamwidth Studios