O domínio C¶
Adicionado na versão 1.0.
O domínio C (nome c) é adequado para documentação de API C.
- .. c:member:: declaration¶
- .. c:var:: declaration¶
Descreve uma variável ou um membro de struct C. Exemplo de assinatura:
.. c:member:: PyObject *PyTypeObject.tp_bases
A diferença entre as duas diretivas é apenas cosmética.
- .. c:function:: function prototype¶
Descreve uma função C. A assinatura deve ser dada como em C, por exemplo:
.. c:function:: PyObject *PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
Observe que você não precisa fazer a barra invertida para escapar asteriscos na assinatura, pois ela não é analisada pelo reStructuredText embutido.
Na descrição de uma função você pode usar os seguintes campos de informação (veja também Listas de campos de informações).
param,parameter,arg,argument: Descrição de um parâmetro.type: Tipo de parâmetro, escrito como se fosse passado para o papelc:expr.returns,return: Descrição do valor de retorno.rtype: Tipo de retorno, escrito como se fosse passado para o papelc:expr.retval,retvals: Uma alternativa areturnspara descrever o resultado da função.
Adicionado na versão 4.3: O tipo de campo
retval.Por exemplo:
.. c:function:: PyObject *PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems) :param type: description of the first parameter. :param nitems: description of the second parameter. :returns: a result. :retval NULL: under some conditions. :retval NULL: under some other conditions as well.
que é renderizado como
-
PyObject *PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)¶
- No-contents-entry:
- No-index-entry:
- Parâmetros:
type – description of the first parameter.
nitems – description of the second parameter.
- Retorna:
a result.
- Valores de retorno:
NULL – under some conditions.
NULL – under some other conditions as well.
- :single-line-parameter-list: (no value)¶
Garante que os parâmetros da função serão emitidos em uma única linha lógica, substituindo
c_maximum_signature_line_lengthemaximum_signature_line_length.Adicionado na versão 7.1.
- .. c:macro:: name¶
- .. c:macro:: name(arg list)
Descreve uma macro C, ou seja, uma
#defineda linguagem C, sem o texto de substituição.Na descrição de uma macro você pode usar os mesmos campos de informação da diretiva
c:function.Adicionado na versão 3.0: A variante de estilo de função.
- :single-line-parameter-list: (no value)¶
Garante que os parâmetros da macro serão emitidos em uma única linha lógica, substituindo
c_maximum_signature_line_lengthemaximum_signature_line_length.Adicionado na versão 7.1.
- .. c:struct:: name¶
Descreve um struct de C.
Adicionado na versão 3.0.
- .. c:union:: name¶
Descreve uma union de C.
Adicionado na versão 3.0.
- .. c:enum:: name¶
Descreve um enum de C.
Adicionado na versão 3.0.
- .. c:enumerator:: name¶
Descreve um enumerador de C.
Adicionado na versão 3.0.
- .. c:type:: typedef-like declaration¶
- .. c:type:: name
Descreve um tipo C, como typedef ou o alias de um tipo não especificado.
Referência cruzadas a construções C¶
Os papéis a seguir criam referências cruzadas para construções da linguagem C se forem definidas na documentação:
- :c:member:¶
- :c:data:¶
- :c:var:¶
- :c:func:¶
- :c:macro:¶
- :c:struct:¶
- :c:union:¶
- :c:enum:¶
- :c:enumerator:¶
- :c:type:¶
Faz referência a uma declaração C, conforme definido acima. Observe que
c:member,c:dataec:varsão equivalentes.Adicionado na versão 3.0: Os papéis de var, struct, união, enum e enumerador.
Entidades anônimas¶
C oferece uniões, enums e structs anônimos. Para fins de documentação, eles devem receber algum nome que comece com @, por exemplo, @42 ou @data. Esses nomes também podem ser usados em referências cruzadas, embora símbolos aninhados sejam encontrados mesmo quando omitidos. O nome @... sempre será renderizado como [anonymous] (possivelmente como um link).
Exemplo:
.. c:struct:: Data
.. c:union:: @data
.. c:var:: int a
.. c:var:: double b
Explicit ref: :c:var:`[email protected]`. Short-hand ref: :c:var:`Data.a`.
Isso será renderizado como:
Referência explícita: Data.[anonymous].a. Referência abreviada: Data.a.
Adicionado na versão 3.0.
Fazendo alias de declarações¶
Às vezes, declarações de lista podem ser úteis em outros lugares além da documentação principal, por exemplo, ao criar uma sinopse de uma interface. A seguinte diretiva pode ser usada para esse propósito.
- .. c:alias:: name¶
Insere uma ou mais declarações de alias. Cada entidade pode ser especificada como pode na função
c:any.Por exemplo:
.. c:var:: int data .. c:function:: int f(double k) .. c:alias:: data f
se torna
-
int data¶
-
int f(double k)¶
Adicionado na versão 3.2.
Opções
- :maxdepth: int¶
Insere também declarações aninhadas, até a profundidade total fornecida. Use 0 para profundidade infinita e 1 apenas para a declaração mencionada. O padrão é 1.
Adicionado na versão 3.3.
- :noroot:¶
Ignora as declarações mencionadas e renderiza apenas declarações aninhadas. Requer
maxprofundidade0 ou pelo menos 2.Adicionado na versão 3.5.
-
int data¶
Tipos e expressões em lniha¶
- :c:expr:¶
- :c:texpr:¶
Insere uma expressão C ou digite como código embutido (
cpp:expr) ou texto embutido (cpp:texpr). Por exemplo:.. c:var:: int a = 42 .. c:function:: int f(int i) An expression: :c:expr:`a * f(a)` (or as text: :c:texpr:`a * f(a)`). A type: :c:expr:`const Data*` (or as text :c:texpr:`const Data*`).
será renderizado da seguinte maneira:
-
int a = 42¶
-
int f(int i)¶
Uma expressão: a * f(a) (ou como texto: a * f(a)).
Um tipo: const Data* (ou como texto const Data*).
Adicionado na versão 3.0.
-
int a = 42¶
Usando espaços de nomes¶
Adicionado na versão 3.1.
A linguagem C em si não oferece suporte o uso de espaço de nomes, mas às vezes pode ser útil emulá-lo na documentação, por exemplo, para mostrar declarações alternativas. O recurso também pode ser usado para documentar membros de structs/uniões/enums separados de sua declaração mãe.
O escopo atual pode ser alterado usando três diretivas de espaço de nomes. Eles gerenciam declarações de pilha onde c:namespace redefine a pilha e altera um determinado escopo.
A diretiva c:namespace-push altera o escopo para um determinado escopo interno do atual.
A diretiva c:namespace-pop desfaz a diretiva c:namespace-push mais recente.
- .. c:namespace:: scope specification¶
Altera o escopo atual dos objetos subsequentes para o escopo especificado e redefine a pilha de diretivas de espaço de nomes. Observe que os escopos aninhados podem ser especificados separando-os com um ponto, por exemplo:
.. c:namespace:: Namespace1.Namespace2.SomeStruct.AnInnerStruct
Todos os objetos subsequentes serão definidos como se seus nomes tivessem sido declarados com o escopo anexado. As referências cruzadas subsequentes serão pesquisadas a partir do escopo atual.
Usar
NULLou0como escopo mudará para escopo global.
- .. c:namespace-push:: scope specification¶
Altera o escopo relativamente ao escopo atual. Por exemplo, depois de:
.. c:namespace:: A.B .. c:namespace-push:: C.D
o escopo atual será
A.B.C.D.
- .. c:namespace-pop::¶
Desfaz a diretiva
c:namespace-pushanterior (não apenas abre um escopo). Por exemplo, depois de:.. c:namespace:: A.B .. c:namespace-push:: C.D .. c:namespace-pop::
o escopo atual será
A.B(nãoA.B.C).Se nenhuma diretiva
c:namespace-pushanterior tiver sido usada, mas apenas uma diretivac:namespace, então o escopo atual será redefinido para o escopo global. Ou seja,.. c:namespace:: A.Bé equivalente a:.. c:namespace:: NULL .. c:namespace-push:: A.B
Variáveis de configuração¶
Veja Opções para o domínio C.