From patchwork Thu Nov 17 10:09:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 39306 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp994037pzb; Thu, 17 Nov 2022 02:10:35 -0800 (PST) X-Google-Smtp-Source: AA0mqf67NRX5RO8U1IEf7KzpwkYZ6LTLW+H5jW5dTvR4JqD2qkVNYZeyUDivN6UEhF1BpQbF3Gxu X-Received: by 2002:aa7:d803:0:b0:467:f948:6df4 with SMTP id v3-20020aa7d803000000b00467f9486df4mr1480906edq.217.1668679835282; Thu, 17 Nov 2022 02:10:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668679835; cv=none; d=google.com; s=arc-20160816; b=pLId4BJpGR06yZZ3Z/dNphE/YsQuhFffPnHbXxJ6UozYqdBCVUz9Z9h/qiq6vSToj+ 5tcPuQvdDbzdMnhM6VDtickXwST1OhJKdiKGTxv3RGhFNM0JJA5aoAjSTvY9fH+/coJ4 YE1h+kizCIa5aokNhFBrpQHUCHfvshLubGO7ay4A0udJhbZ4L21AJ/6k9gZvLl7U9iFx aWTCfLvv6+P1VKOO2ua9NBDqe8zYQ3MX5HvhUra05dNhLfc929tw6CDrX23F86oBE3tP jYqFWpKjr3xcXzQ1mAEhtpQghVbmCqjZiw30jyundOxye+ONrirgexzEraexdfi0Bogl 09EA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=udoTl5Skj8Jo4uSBarhtIew2R5XWzCzt9jMXpvdj6y8=; b=Wh6P9cUQ0oCpC7+42USrBy4PpxOdlXeNoT3tZkniMsGc9k9KCdKv4tv6GrClCOoSkd VIQtsxd5+C7W+kqE+v5RlEyPcG0bTiClRA+Gb1Xy+nnQS+hvg8g6wfjeQ02CURGo9CZy pVGSG0fwdzB4y0fAyM6nT0fq5ZScuFfVfLBF9MnTg6rhgWtPwDUnL/dR5KZljOEGyEuX dpz/XO0OJzCN/ztCQR96suZBvigMNkz1nMCnAp4N+yszKbPIvfYNLbefmkQCkFve2WRY fGlJPzvA8cp2yHYlb7XrkA2EF/JjVXPZBapW0slLOIhRYdJRTdjLWVLmWGe34FrAop1G 2Bgg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id di19-20020a170906731300b007aee592fd06si237404ejc.203.2022.11.17.02.10.34; Thu, 17 Nov 2022 02:10:35 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 70DE268BCC1; Thu, 17 Nov 2022 12:10:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DCD0368BA90 for ; Thu, 17 Nov 2022 12:09:58 +0200 (EET) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id A047D240591 for ; Thu, 17 Nov 2022 11:09:58 +0100 (CET) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id AnqSHWB1uixp for ; Thu, 17 Nov 2022 11:09:56 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 7EAB22404F7 for ; Thu, 17 Nov 2022 11:09:56 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 1E9773A0520 for ; Thu, 17 Nov 2022 11:09:50 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 17 Nov 2022 11:09:38 +0100 Message-Id: <20221117100942.6217-3-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221117100942.6217-1-anton@khirnov.net> References: <20221117100942.6217-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/7] doc/developer.texi: update the language feature section X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: xq5/j80zNHBT It is currently very out of touch with reality. * declare we are using C99 fully, rather than C90 plus extensions * mention our use of stdatomic.h * mention forbidden C99 features, like VLAs and complex numbers --- doc/developer.texi | 49 ++++++++++++---------------------------------- 1 file changed, 12 insertions(+), 37 deletions(-) diff --git a/doc/developer.texi b/doc/developer.texi index 8e6d9d8730..01735e07f5 100644 --- a/doc/developer.texi +++ b/doc/developer.texi @@ -58,54 +58,29 @@ and should try to fix issues their commit causes. @section C language features -FFmpeg is programmed in the ISO C90 language with a few additional -features from ISO C99, namely: - +FFmpeg is programmed in the ISO C99 language, extended with: @itemize @bullet @item -the @samp{inline} keyword; - -@item -@samp{//} comments; - -@item -designated struct initializers (@samp{struct s x = @{ .i = 17 @};}); - -@item -compound literals (@samp{x = (struct s) @{ 17, 23 @};}). - -@item -for loops with variable definition (@samp{for (int i = 0; i < 8; i++)}); - -@item -Variadic macros (@samp{#define ARRAY(nb, ...) (int[nb + 1])@{ nb, __VA_ARGS__ @}}); - -@item -Implementation defined behavior for signed integers is assumed to match the -expected behavior for two's complement. Non representable values in integer -casts are binary truncated. Shift right of signed values uses sign extension. +Atomic operations from C11 @file{stdatomic.h}. They are emulated on +architectures/compilers that do not support them, so all FFmpeg-internal code +may use atomics without any extra checks. However, @file{stdatomic.h} must not +be included in public headers, so they stay C99-compatible. @end itemize -These features are supported by all compilers we care about, so we will not -accept patches to remove their use unless they absolutely do not impair -clarity and performance. - -All code must compile with recent versions of GCC and a number of other -currently supported compilers. To ensure compatibility, please do not use -additional C99 features or GCC extensions. Especially watch out for: +Compiler-specific extensions may be used with good reason, but must not be +depended on, i.e. the code must still compile and work with compilers lacking +the extension. +The following C99 features must not be used anywhere in the codebase: @itemize @bullet @item -mixing statements and declarations; - -@item -@samp{long long} (use @samp{int64_t} instead); +variable-length arrays; @item -@samp{__attribute__} not protected by @samp{#ifdef __GNUC__} or similar; +complex numbers; @item -GCC statement expressions (@samp{(x = (@{ int y = 4; y; @})}). +mixed statements and declarations. @end itemize @section Code formatting conventions