¿Vale la pena usar la palabra clave en línea o el compilador es lo suficientemente inteligente como para saber cuándo necesita alinear una función?C: ¿Vale la pena la palabra clave en línea?
Respuesta
El compilador es bastante inteligente y tiene varias métricas para determinar si algo merece la pena. Pero a veces, sin embargo, el desarrollador tendrá conocimiento sobre cómo se ejecutará la aplicación y sabrá alinear algo que el compilador no hace automáticamente. Sin embargo, nunca pondría las cosas en línea manualmente a menos que haya hecho algunos puntos de referencia y descubrí que en línea mejoraría mi rendimiento.
Puede leer más sobre GCC uses inline.
Siempre vale la pena ser explícito sobre la intención.
También vale la pena señalar que el compilador ni siquiera necesita alinearse si cree que es mejor no hacerlo.
Sí, es lo suficientemente inteligente. Pero lo que no ha logrado ningún progreso en los últimos 40 años es la forma en que se crean los programas de C. Todavía es un archivo de código fuente a la vez.
Para obtener una función en línea en más de un archivo .c, coloca la definición de función en el archivo .h. Y si no los marca en línea, el vinculador se quejará de las múltiples definiciones.
+1, 'en línea' hoy en día significa" permitir definiciones múltiples ". El hecho de que también es una sugerencia para el compilador "hacer que llamar a esta función sea rápido" es un efecto secundario irrelevante e irrelevante :-) Creo que no es que "la forma en que se crean los programas" no haya avanzado: algunos compiladores/vinculadores tener. Pero el mínimo común denominador, que permite el estándar, no ha avanzado. –
Decir 'en línea' significa "permitir definiciones múltiples" es simplemente incorrecto. Esta pregunta es sobre el lenguaje C, no sobre C++. C no tiene funciones 'extern inline', la palabra clave' inline' no es válida sin 'static', y nunca se permiten múltiples definiciones de una función. –
La norma dice
7.1.2 Función especificadores
2. Una declaración de la función (8.3.5, 9.3, 11.4) con un comitente en línea declara una función en línea. El especificador en línea indica a la implementación que la sustitución en línea del cuerpo de la función en el punto de llamada es preferible al mecanismo de llamada de función habitual. No se requiere una implementación para realizar esta sustitución en línea en el punto de llamada; sin embargo, incluso si esta sustitución en línea se omite, las otras reglas para las funciones en línea definidas en 7.1.2 se seguirán respetando.
Así que me comparo inline
a tal <br />
en HTML - es una buena práctica utilizar el auto-cierre <br />
todo el tiempo. Pero se podría argumentar que casi todas las implementaciones del navegador tratan <br>
y <br />
exactamente lo mismo, lo que IMO pasa por alto.
Como han notado otros, esto probablemente no sea muy relevante para el valor de rendimiento en estos días. Pero creo que todavía funciona muy bien como palabra clave semántica que transmite la intención.
- 1. ¿Vale la pena Qt?
- 2. ¿Vale la pena Heroku?
- 3. ¿Vale la pena Napkee?
- 4. Mezclar OCaml y C: ¿vale la pena?
- 5. ¿Vale la pena la obstrucción?
- 6. vale la pena aprender groovy?
- 7. ¿Vale la pena aprender COM?
- 8. ¿Está Processing.js vale la pena?
- 9. GroupLayout: ¿Vale la pena aprender?
- 10. ¿Vale la pena usar JDEE?
- 11. Zend Framework ¿Vale la pena?
- 12. Rails + Oracle: ¿vale la pena?
- 13. ¿Vale la pena la actualización a C# 4.0
- 14. ¿Vale la pena la asignación O/R?
- 15. ¿Vale la pena usar Debug.Assert en ASP.NET?
- 16. ¿Vale la pena usar OOP en PHP?
- 17. ¿Vale la pena aprender a usar MSBuild?
- 18. ¿Vale la pena aprender el lenguaje ensamblador?
- 19. ¿Vale la pena usar sqlalchemy-migrate?
- 20. ¿Vale la pena aprender Perl 6?
- 21. ¿Vale la pena aprender Ruby on Rails
- 22. Agile Toolkit, vale la pena usar?
- 23. Entity Framework 4.0: ¿vale la pena ahora?
- 24. ¿Vale la pena aprender GNU Make?
- 25. ¿VS2010 Premium vale la pena el precio?
- 26. ¿Vale la pena aprender haml & sass?
- 27. MyEclipse: ¿Todavía vale la pena usarlo?
- 28. jQuery UI + ASP.NET UpdatePanel - ¿Vale la pena?
- 29. ¿Vale la pena que gzip js archivos?
- 30. ¿Vale la pena usar PLINQ con ASP.NET?
Una observación que no vale la pena responder: si no tiene la intención de utilizar la función desde fuera de la unidad de compilación, la palabra clave "static" hace más para ayudar al compilador que "inline". El compilador puede, por ejemplo, en línea independientemente del tamaño si hay un solo sitio de llamada. –