Onde destino pode ser definido da seguinte forma:
-  nome do banco[@host][:porta]
 -  tcp:postgresql://host[:porta][/nome_do_banco]
 -  unix:postgresql://host[:porta][/nome_do_banco]
 -  uma string contendo qualquer uma das formas mencionadas acima
 -  uma variável do tipo char contendo qualquer uma das formas mencionadas acima
 -  DEFAULT
 
E nome_do_usuário pode ser definido como:
-  username
 -  username/senha
 -  username IDENTIFIED BY senha
 -  username USING senha
 
Para o nosso artigo, iremos passar os parâmetros através de variáveis, que é o penúltimo modo listado lá em cima. Vamos então, ao código fonte:
/* INCLUDE */
#include <stdio.h>
EXEC SQL include sqlca;
/* MAIN */
int main(int argc, char **argv)
{
   EXEC SQL BEGIN DECLARE SECTION;
      const char *nome_database = "teste@localhost";
      const char *szUser = "teste";
   EXEC SQL END DECLARE SECTION;
   EXEC SQL CONNECT TO :szDBName USER :szUser;
    
   if(sqlca.sqlcode != 0) {
      printf("Conexão com %s falhou.
", nome_database);
      return 0;
   } else {
      printf("Connection ok com %s.
", nome_database);
   }
    
   EXEC SQL DISCONNECT ALL;
   
   return 0;
}
Os pontos que devem ser observados aqui são:
EXEC SQL BEGIN DECLARE SECTION;
   const char *nome_database = "teste@localhost";
   const char *szUser = "teste";
EXEC SQL END DECLARE SECTION;
Este bloco serve para declarar variáveis que serão usadas para passar ou receber valores para o banco de dados. Elas precisam ser declaradas nesta seção em especial para que o pré-processador do PostgreSQL tenha conhecimento delas.
O comando:
EXEC SQL CONNECT TO :szDBName USER :szUser;
realiza a conexão com o banco de dados. Para indicar ao pré-processador que queremos usar variáveis, devemos usar o símbolo dois-pontos (:) seguido pelo nome da variável. Note que estas variáveis devem ter sido declaradas na seção DECLARE SECTION.
Outro ponto a ser observado é a verificação da variável sqlca.sqlcode. O pré-processador declara uma variável global chamada sqlca, que tem a seguinte estrutura:
struct {
   char sqlcaid[8];
   long sqlabc;
   long sqlcode;
   struct {
      int sqlerrml;
      char sqlerrmc[70];
   } sqlerrm;
   char sqlerrp[8];
   long sqlerrd[6];
   char sqlwarn[8];
   char sqlstate[5];
} sqlca;
Esta estrutura permite uma verificação de erros e warnings (aviso, traduzido literalmente) mais detalhada sobre os comandos executados. A variável sqlcode pode assumir os seguintes valores:
-  0 se nenhum erro ocorreu durante a execução;
 -  negativo, se um warning foi gerado;
 -  positivo, se uma condição não-fatal ocorreu, como por exemplo uma query que não retorna valores.
 
Por fim, o comando:
 
EXEC SQL DISCONNECT ALL;
Finaliza todas as conexões abertas pelo programa.
O programa acima simplesmente abre uma conexão com o banco de dados especificado e exibe uma mensagem dizendo se a conexão foi efetuada com sucesso ou não. Como padrão eu costumo salvar os arquivos com SQL embutido com a extensão pgc, mas qualquer outra extensão pode ser usada.